MenuDrawer.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <template>
  2. <BasicDrawer
  3. v-bind="$attrs"
  4. @register="registerDrawer"
  5. showFooter
  6. :title="getTitle"
  7. width="50%"
  8. @ok="handleSubmit"
  9. >
  10. <BasicForm @register="registerForm" />
  11. </BasicDrawer>
  12. </template>
  13. <script lang="ts">
  14. import { defineComponent, ref, computed, unref } from 'vue';
  15. import { BasicForm, useForm } from '/@/components/Form/index';
  16. import { formSchema } from './menu.data';
  17. import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
  18. import { getMenuList, saveMenuApi, updateMenuApi } from '/@/api/system/system';
  19. import { makeMenuTree, TreeMenuNode } from '/@/utils/treeUtils';
  20. export default defineComponent({
  21. name: 'MenuDrawer',
  22. components: { BasicDrawer, BasicForm },
  23. emits: ['success', 'register'],
  24. setup(_, { emit }) {
  25. const isUpdate = ref(true);
  26. const [registerForm, { resetFields, setFieldsValue, updateSchema, validate }] = useForm({
  27. labelWidth: 100,
  28. schemas: formSchema,
  29. showActionButtonGroup: false,
  30. baseColProps: { lg: 12, md: 24 },
  31. });
  32. const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
  33. resetFields();
  34. setDrawerProps({ confirmLoading: false });
  35. isUpdate.value = !!data?.isUpdate;
  36. if (unref(isUpdate)) {
  37. setFieldsValue({
  38. ...data.record,
  39. });
  40. }
  41. const tData = (await getMenuList()) as any as TreeMenuNode[];
  42. const treeData = makeMenuTree(tData);
  43. updateSchema({
  44. field: 'parentId',
  45. componentProps: {
  46. treeData,
  47. },
  48. });
  49. });
  50. const getTitle = computed(() => (!unref(isUpdate) ? '新增菜单' : '编辑菜单'));
  51. async function handleSubmit() {
  52. try {
  53. const values = await validate();
  54. setDrawerProps({ confirmLoading: true });
  55. // TODO custom api
  56. console.log(values);
  57. values.parentId ??= 0;
  58. if (!unref(isUpdate)) {
  59. await saveMenuApi(values);
  60. } else {
  61. await updateMenuApi(values);
  62. }
  63. closeDrawer();
  64. emit('success');
  65. } finally {
  66. setDrawerProps({ confirmLoading: false });
  67. }
  68. }
  69. return { registerDrawer, registerForm, getTitle, handleSubmit };
  70. },
  71. });
  72. </script>