ProjectLeave.vue 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <template>
  2. <base-dialog @cancel="cancelDialog">
  3. <div slot="header">{{params.title}}</div>
  4. <div slot="body">
  5. <a-alert :message="$t('iam.project.project_leave_tips')" class="mb-2" />
  6. <dialog-selected-tips :name="$t('dictionary.project')" :count="params.data.length" :action="params.title" />
  7. <dialog-table :data="params.data" :columns="params.columns.slice(0, 3)" />
  8. </div>
  9. <div slot="footer">
  10. <a-button type="primary" @click="handleConfirm" :loading="loading">{{ $t('dialog.ok') }}</a-button>
  11. <a-button @click="cancelDialog">{{ $t('dialog.cancel') }}</a-button>
  12. </div>
  13. </base-dialog>
  14. </template>
  15. <script>
  16. import DialogMixin from '@/mixins/dialog'
  17. import WindowsMixin from '@/mixins/windows'
  18. export default {
  19. name: 'UserProjectLeaveDialog',
  20. mixins: [DialogMixin, WindowsMixin],
  21. data () {
  22. return {
  23. loading: false,
  24. }
  25. },
  26. methods: {
  27. async handleConfirm () {
  28. this.loading = true
  29. const manager = new this.$Manager('users', 'v1')
  30. try {
  31. const pids = []
  32. this.params.data.forEach(p => {
  33. p.roles.forEach(r => {
  34. pids.push({
  35. project: p.id,
  36. role: r.id,
  37. })
  38. })
  39. })
  40. const params = {
  41. group: true,
  42. project_roles: pids,
  43. }
  44. await manager.performAction({
  45. id: this.params.uid,
  46. action: 'leave',
  47. data: params,
  48. })
  49. this.cancelDialog()
  50. this.$bus.$emit('UserSidepageProjectsListRefresh')
  51. } catch (error) {
  52. this.loading = false
  53. throw error
  54. }
  55. },
  56. },
  57. }
  58. </script>