FormModal.vue 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <template>
  2. <BasicModal
  3. v-bind="$attrs"
  4. destroyOnClose
  5. @register="registerModal"
  6. :title="getTitle"
  7. @ok="handleSubmit"
  8. width="900px"
  9. >
  10. <BasicForm @register="registerForm" />
  11. </BasicModal>
  12. </template>
  13. <script lang="ts" setup>
  14. import { ref, computed, unref } from 'vue';
  15. import { BasicModal, useModalInner } from '/@/components/Modal';
  16. import { BasicForm, useForm } from '/@/components/Form';
  17. import { useMessage } from '/@/hooks/web/useMessage';
  18. import { dataFormSchema } from './data';
  19. // import {
  20. // // addObj,
  21. // // editObj,
  22. // // viewObj,
  23. // selectMenuTreeAndExcludeNode,
  24. // } from '/@/api/modules/system/sysMenuApi';
  25. import {
  26. rbacMenuAdd,
  27. rbacMenuEdit,
  28. rbacMenuDetailId,
  29. rbacMenuQueryTreeAbbr,
  30. } from '/@/api/sys/rbacMenuApi';
  31. import { listDictModel } from '/@/api/common';
  32. import { transformDict } from '/@/utils';
  33. const emit = defineEmits(['success', 'register']);
  34. const getTitle = computed(() => (!unref(isUpdate) ? '新增菜单' : '编辑菜单'));
  35. const isUpdate = ref(false);
  36. const rowId = ref();
  37. const { createMessage } = useMessage();
  38. const [registerForm, { setFieldsValue, updateSchema, resetFields, validate }] = useForm({
  39. labelWidth: 100,
  40. schemas: dataFormSchema,
  41. showActionButtonGroup: false,
  42. baseColProps: { lg: 12, md: 24 },
  43. actionColOptions: {
  44. span: 23,
  45. },
  46. });
  47. const [registerModal, { setModalProps, closeModal }] = useModalInner(async data => {
  48. await resetFields();
  49. setModalProps({ confirmLoading: false });
  50. isUpdate.value = !!data?.isUpdate;
  51. if (unref(isUpdate)) {
  52. rowId.value = data.record.id;
  53. const resData = await rbacMenuDetailId(data.record.id);
  54. await setFieldsValue({
  55. ...resData,
  56. // 设置默认值
  57. parentId: resData.parentId === '0' ? null : resData.parentId,
  58. visible: resData.visible,
  59. disable: resData.disable,
  60. keepalive: resData.keepalive ? 0 : 1,
  61. linkExternal: resData.linkExternal,
  62. frame: resData.frame,
  63. tenantMenu: !resData.tenantMenu ? '0' : resData.tenantMenu.toString(),
  64. });
  65. } else {
  66. await setFieldsValue({
  67. parentId: data.record.parentId,
  68. });
  69. }
  70. const sysMenuTypeOptions = transformDict(await listDictModel({ dictCode: 'sys_menu_type' }));
  71. const treeData = await rbacMenuQueryTreeAbbr({ excludeNodeIds: [data.record.id] });
  72. await updateSchema([
  73. {
  74. field: 'menuType',
  75. componentProps: { options: sysMenuTypeOptions },
  76. },
  77. // {
  78. // field: 'parentId',
  79. // componentProps: {
  80. // treeData: treeData,
  81. // fieldNames: {
  82. // label: 'name',
  83. // key: 'id',
  84. // value: 'id',
  85. // },
  86. // },
  87. // },
  88. ]);
  89. await updateSchema({ field: 'parentId', componentProps: { treeData } });
  90. });
  91. // 提交按钮事件
  92. async function handleSubmit() {
  93. try {
  94. const values = await validate();
  95. setModalProps({ confirmLoading: true });
  96. !unref(isUpdate)
  97. ? await rbacMenuAdd({ ...values })
  98. : await rbacMenuEdit({ ...values, id: rowId.value });
  99. !unref(isUpdate) ? createMessage.success('新增成功!') : createMessage.success('编辑成功!');
  100. closeModal();
  101. emit('success', { isUpdate: unref(isUpdate), values: { ...values, id: rowId.value } });
  102. } finally {
  103. setModalProps({ confirmLoading: false });
  104. }
  105. }
  106. </script>