<template> <BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="title" :width="800" @ok="handleSubmit"> <BasicForm @register="registerForm"/> </BasicModal> </template> <script lang="ts" setup> import {ref, computed, unref} from 'vue'; import {BasicModal, useModalInner} from '/src/components/Modal'; import {BasicForm, useForm} from '/src/components/Form'; import {formSchema} from '../AdsAccount.data'; import {saveOrUpdate} from '../AdsAccount.api'; // Emits声明 const emit = defineEmits(['register','success']); const isUpdate = ref(true); const isDetail = ref(false); const isAudit = ref(false); //表单配置 const [registerForm, {setProps,resetFields, setFieldsValue, validate}] = useForm({ //labelWidth: 150, schemas: formSchema, showActionButtonGroup: false, baseColProps: {span: 24} }); //表单赋值 const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => { //重置表单 await resetFields(); setModalProps({confirmLoading: false,showCancelBtn:!!data?.showFooter,showOkBtn:!!data?.showFooter}); isUpdate.value = !!data?.isUpdate; isDetail.value = !!data?.showFooter; isAudit.value = !!data?.isAudit; // 赋值所有字段 await setFieldsValue({ ...data.record, }); if (unref(isAudit)) { const limitedFields = ['reviewStatus', 'remark', 'accountName']; const updatedSchema = formSchema.map(field => ({ ...field, show: limitedFields.includes(field.field), dynamicDisabled: field.field === 'accountName', })); setProps({ schemas: updatedSchema }); } else { // 如果不是审核模式,则检查是否为更新状态,禁用 reviewStatus 字段 const updatedSchema = formSchema.map(field => { if (field.field === 'reviewStatus' && unref(isUpdate)) { return { ...field, dynamicDisabled: true, // 禁用 reviewStatus 字段 }; } return field; }); setProps({ schemas: updatedSchema }); } setProps({ disabled: !data?.showFooter }) }); //设置标题 const title = computed(() => unref(isAudit) ? '审核' : (!unref(isUpdate) ? '新增' : (!unref(isDetail) ? '详情' : '编辑'))); //表单提交事件 async function handleSubmit(v) { try { let values = await validate(); setModalProps({confirmLoading: true}); //提交表单 await saveOrUpdate(values, isUpdate.value, isAudit.value); //关闭弹窗 closeModal(); //刷新列表 emit('success'); } finally { setModalProps({confirmLoading: false}); } } </script> <style lang="less" scoped> /** 时间和数字输入框样式 */ :deep(.ant-input-number) { width: 100%; } :deep(.ant-calendar-picker) { width: 100%; } </style>