edit.vue 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <script lang="ts" setup>
  2. import { computed, ref, unref } from 'vue';
  3. import { alert, useVbenDrawer } from '@vben/common-ui';
  4. import { useFormOptions, useVbenForm } from '#/adapter';
  5. import { CmsSiteMenuApi } from '#/api';
  6. import { useSchema } from '../data.config';
  7. defineOptions({
  8. name: 'MenuEdit',
  9. });
  10. const emit = defineEmits(['success']);
  11. const modelRef = ref<Record<string, any>>({});
  12. const isUpdate = ref(true);
  13. const [Form, formApi] = useVbenForm(
  14. useFormOptions({
  15. commonConfig: {
  16. colon: true,
  17. formItemClass: 'col-span-2 md:col-span-1',
  18. },
  19. schema: [],
  20. wrapperClass: 'grid-cols-2 gap-x-4',
  21. }),
  22. );
  23. const [Drawer, { close, getData, lock, unlock }] = useVbenDrawer({
  24. closeOnClickModal: false,
  25. destroyOnClose: true,
  26. onCancel() {
  27. close();
  28. },
  29. onConfirm: async () => {
  30. try {
  31. const { valid } = await formApi.validate();
  32. if (!valid) return;
  33. const values = await formApi.getValues();
  34. lock();
  35. const postParams = unref(modelRef);
  36. Object.assign(postParams, values);
  37. await (unref(isUpdate)
  38. ? CmsSiteMenuApi.editDetail(postParams as CmsSiteMenuApi.RecordItem)
  39. : CmsSiteMenuApi.addDetail(
  40. postParams as CmsSiteMenuApi.BasicRecordItem,
  41. ));
  42. alert('操作成功');
  43. emit('success');
  44. close();
  45. } finally {
  46. unlock();
  47. }
  48. },
  49. onOpenChange: async (isOpen: boolean) => {
  50. if (isOpen) {
  51. // lock();
  52. const data = getData<Record<string, any>>();
  53. isUpdate.value = !!data.isUpdate;
  54. modelRef.value = { ...data.baseData };
  55. const schema = useSchema({ siteId: data.baseData.siteId });
  56. formApi.setState({ schema });
  57. if (unref(isUpdate)) {
  58. const entity = await CmsSiteMenuApi.getDetail(data.baseData.id);
  59. modelRef.value = { ...entity };
  60. const formatData: any = { ...entity };
  61. await formApi.setValues(formatData);
  62. // unlock();
  63. }
  64. }
  65. },
  66. });
  67. const getTitle = computed(() => (unref(isUpdate) ? '编辑菜单' : '新增菜单'));
  68. </script>
  69. <template>
  70. <Drawer class="w-[1000px]" :title="getTitle">
  71. <Form />
  72. </Drawer>
  73. </template>