| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- <script lang="ts" setup>
- import { computed, ref, unref } from 'vue';
- import { useVbenModal } from '@vben/common-ui';
- import { message } from 'ant-design-vue';
- import { useFormOptions, useVbenForm } from '#/adapter';
- import { DictionaryApi } from '#/api';
- import { useSchema } from './data.config';
- defineOptions({
- name: 'DictItemEdit',
- });
- const emit = defineEmits(['success']);
- const modelRef = ref<Record<string, any>>({});
- const isUpdate = ref(true);
- const [Form, { validate, setValues, getValues }] = useVbenForm(
- useFormOptions({
- schema: useSchema(),
- }),
- );
- const [Modal, { close, setState, getData, lock, unlock }] = useVbenModal({
- fullscreenButton: false,
- draggable: true,
- onCancel() {
- close();
- },
- onConfirm: async () => {
- try {
- const { valid } = await validate();
- if (!valid) return;
- const values = await getValues();
- lock();
- const postParams = unref(modelRef);
- Object.assign(postParams, values);
- await (unref(isUpdate)
- ? DictionaryApi.editItemDetail(postParams as DictionaryApi.RecordItem)
- : DictionaryApi.addItemDetail(
- postParams as DictionaryApi.BasicRecordItem,
- ));
- message.success('操作成功');
- emit('success');
- close();
- } finally {
- unlock();
- }
- },
- onOpenChange: async (isOpen: boolean) => {
- if (isOpen) {
- setState({ loading: true });
- const data = getData<Record<string, any>>();
- isUpdate.value = !!data.isUpdate;
- modelRef.value = { ...data.baseData };
- if (unref(isUpdate)) {
- const entity = await DictionaryApi.getItemDetail(data.baseData.id);
- modelRef.value = { ...entity };
- setValues(entity);
- }
- setState({ loading: false });
- }
- },
- });
- const getTitle = computed(() =>
- unref(isUpdate) ? '编辑字典项' : '新增字典项',
- );
- </script>
- <template>
- <Modal class="w-[1000px]" :title="getTitle">
- <Form />
- </Modal>
- </template>
|