UserDrawer.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <template>
  2. <BasicDrawer
  3. v-bind="$attrs"
  4. @register="registerDrawer"
  5. :title="getTitle"
  6. :width="adaptiveWidth"
  7. @ok="handleSubmit"
  8. :showFooter="showFooter"
  9. destroyOnClose
  10. >
  11. <BasicForm @register="registerForm" />
  12. </BasicDrawer>
  13. </template>
  14. <script lang="ts" setup>
  15. import { defineComponent, ref, computed, unref, useAttrs } from 'vue';
  16. import { BasicForm, useForm } from '/@/components/Form/index';
  17. import { formSchema } from './user.data';
  18. import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
  19. import { saveOrUpdateUser, getUserRoles, getUserDepartList } from './user.api';
  20. import { useDrawerAdaptiveWidth } from '/@/hooks/jeecg/useAdaptiveWidth';
  21. // 声明Emits
  22. const emit = defineEmits(['success', 'register']);
  23. const attrs = useAttrs();
  24. const isUpdate = ref(true);
  25. const rowId = ref('');
  26. const departOptions = ref([]);
  27. //表单配置
  28. const [registerForm, { setProps, resetFields, setFieldsValue, validate, updateSchema }] = useForm({
  29. labelWidth: 90,
  30. schemas: formSchema,
  31. showActionButtonGroup: false,
  32. });
  33. // TODO [VUEN-527] https://www.teambition.com/task/6239beb894b358003fe93626
  34. const showFooter = ref(true);
  35. //表单赋值
  36. const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
  37. await resetFields();
  38. showFooter.value = data?.showFooter ?? true;
  39. setDrawerProps({ confirmLoading: false, showFooter: showFooter.value });
  40. isUpdate.value = !!data?.isUpdate;
  41. if (unref(isUpdate)) {
  42. rowId.value = data.record.id;
  43. //租户信息定义成数组
  44. if (data.record.relTenantIds && !Array.isArray(data.record.relTenantIds)) {
  45. data.record.relTenantIds = data.record.relTenantIds.split(',');
  46. } else {
  47. //【issues/I56C5I】用户管理中连续点两次编辑租户配置就丢失了
  48. //data.record.relTenantIds = [];
  49. }
  50. //查角色/赋值/try catch 处理,不然编辑有问题
  51. try {
  52. const userRoles = await getUserRoles({ userid: data.record.id });
  53. if (userRoles && userRoles.length > 0) {
  54. data.record.selectedroles = userRoles;
  55. }
  56. } catch (error) {}
  57. //查所属部门/赋值
  58. const userDepart = await getUserDepartList({ userId: data.record.id });
  59. if (userDepart && userDepart.length > 0) {
  60. data.record.selecteddeparts = userDepart;
  61. let selectDepartKeys = Array.from(userDepart, ({ key }) => key);
  62. data.record.selecteddeparts = selectDepartKeys.join(',');
  63. departOptions.value = userDepart.map((item) => {
  64. return { label: item.title, value: item.key };
  65. });
  66. }
  67. //负责部门/赋值
  68. data.record.departIds && !Array.isArray(data.record.departIds) && (data.record.departIds = data.record.departIds.split(','));
  69. //update-begin---author:zyf Date:20211210 for:避免空值显示异常------------
  70. data.record.departIds = data.record.departIds == '' ? [] : data.record.departIds;
  71. //update-begin---author:zyf Date:20211210 for:避免空值显示异常------------
  72. }
  73. //处理角色用户列表情况(和角色列表有关系)
  74. data.selectedroles && (await setFieldsValue({ selectedroles: data.selectedroles }));
  75. //编辑时隐藏密码/角色列表隐藏角色信息/我的部门时隐藏所属部门
  76. updateSchema([
  77. {
  78. field: 'password',
  79. show: !unref(isUpdate),
  80. },
  81. {
  82. field: 'confirmPassword',
  83. ifShow: !unref(isUpdate),
  84. },
  85. {
  86. field: 'selectedroles',
  87. show: !data.isRole,
  88. },
  89. {
  90. field: 'departIds',
  91. componentProps: { options: departOptions },
  92. },
  93. {
  94. field: 'selecteddeparts',
  95. show: !data?.departDisabled ?? false,
  96. },
  97. {
  98. field: 'selectedroles',
  99. show: !data?.departDisabled ?? false,
  100. },
  101. ]);
  102. // 无论新增还是编辑,都可以设置表单值
  103. if (typeof data.record === 'object') {
  104. setFieldsValue({
  105. ...data.record,
  106. });
  107. }
  108. // 隐藏底部时禁用整个表单
  109. //update-begin-author:taoyan date:2022-5-24 for: VUEN-1117【issue】0523周开源问题
  110. setProps({ disabled: !showFooter.value });
  111. //update-end-author:taoyan date:2022-5-24 for: VUEN-1117【issue】0523周开源问题
  112. });
  113. //获取标题
  114. const getTitle = computed(() => (!unref(isUpdate) ? '新增用户' : '编辑用户'));
  115. const { adaptiveWidth } = useDrawerAdaptiveWidth();
  116. //提交事件
  117. async function handleSubmit() {
  118. try {
  119. let values = await validate();
  120. setDrawerProps({ confirmLoading: true });
  121. values.userIdentity === 1 && (values.departIds = '');
  122. let isUpdateVal = unref(isUpdate);
  123. //提交表单
  124. await saveOrUpdateUser(values, isUpdateVal);
  125. //关闭弹窗
  126. closeDrawer();
  127. //刷新列表
  128. emit('success', { isUpdateVal, values });
  129. } finally {
  130. setDrawerProps({ confirmLoading: false });
  131. }
  132. }
  133. </script>