formDrawer.vue.btl 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <template>
  2. <BasicDrawer
  3. v-bind="$attrs"
  4. destroyOnClose
  5. @register="registerDrawer"
  6. :title="getTitle"
  7. :width="width"
  8. @ok="handleSubmit"
  9. :showFooter="true"
  10. >
  11. <BasicForm @register="registerForm" layout="vertical" />
  12. </BasicDrawer>
  13. </template>
  14. <script lang="ts" setup>
  15. import { ref, computed, unref } from 'vue';
  16. import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
  17. import { BasicForm, useForm } from '/@/components/Form';
  18. import { useMessage } from '/@/hooks/web/useMessage';
  19. import { dataFormSchema } from './data';
  20. import { ${frontModuleName}${busNameFirstUpper}dd, ${frontModuleName}${busNameFirstUpper}Edit, ${frontModuleName}${busNameFirstUpper}Detail } from '/@/api/${frontModuleName}/${frontModuleName}${busNameFirstUpper}Api';
  21. const emit = defineEmits(['success', 'register']);
  22. const getTitle = computed(() => (!unref(isUpdate) ? '新增${functionName}' : '编辑${functionName}'));
  23. const width = '45%';
  24. const isUpdate = ref(false);
  25. const rowId = ref();
  26. const { createMessage } = useMessage();
  27. const [registerForm, { setFieldsValue, resetFields, validate }] = useForm({
  28. labelWidth: 100,
  29. schemas: dataFormSchema,
  30. showActionButtonGroup: false,
  31. actionColOptions: {
  32. span: 23,
  33. },
  34. });
  35. const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async data => {
  36. await resetFields();
  37. setDrawerProps({ confirmLoading: false });
  38. isUpdate.value = !!data?.isUpdate;
  39. if (unref(isUpdate)) {
  40. const resData = await ${frontModuleName}${busNameFirstUpper}Detail(data.record.id);
  41. rowId.value = resData.id;
  42. await setFieldsValue({
  43. ...resData,
  44. });
  45. }
  46. });
  47. // 提交按钮事件
  48. async function handleSubmit() {
  49. try {
  50. const values = await validate();
  51. setDrawerProps({ confirmLoading: true });
  52. !unref(isUpdate)
  53. ? await ${frontModuleName}${busNameFirstUpper}Add({ ...values })
  54. : await ${frontModuleName}${busNameFirstUpper}Edit({ ...values, id: rowId.value });
  55. !unref(isUpdate) ? createMessage.success('新增成功!') : createMessage.success('编辑成功!');
  56. closeDrawer();
  57. emit('success', {
  58. isUpdate: unref(isUpdate),
  59. values: { ...values, id: rowId.value },
  60. });
  61. } finally {
  62. setDrawerProps({ confirmLoading: false });
  63. }
  64. }
  65. </script>