diff --git a/src/api/platform/system/controller/genDatabaseType.ts b/src/api/platform/system/controller/genDatabaseType.ts index 8270a83..5ea3705 100644 --- a/src/api/platform/system/controller/genDatabaseType.ts +++ b/src/api/platform/system/controller/genDatabaseType.ts @@ -3,6 +3,7 @@ import { defHttp } from '/@/utils/http/axios'; enum Api { list = '/system_proxy/system/devtools/genDatabaseType/list', + selectListByType = '/system_proxy/system/devtools/genDatabaseType/selectListByType', add = '/system_proxy/system/devtools/genDatabaseType/save', get = '/system_proxy/system/devtools/genDatabaseType', edit = '/system_proxy/system/devtools/genDatabaseType/update', @@ -12,6 +13,8 @@ enum Api { export const listGenDatabaseType = (params?: Partial) => defHttp.get({ url: Api.list, params }, { isReturnResultResponse: true }); +export const selectListByType = (type: string) => defHttp.get({ url: `${Api.selectListByType}/${type}` }); + export const addGenDatabaseType = (params: Partial) => defHttp.post({ url: Api.add, data: params }); export const editGenDatabaseType = (params: Partial) => defHttp.put({ url: Api.edit, data: params }); diff --git a/src/views/system/devtools/genDataBaseType/GenDataBaseTypeModal.vue b/src/views/system/devtools/genDataBaseType/GenDataBaseTypeModal.vue index bbe75de..3288e1f 100644 --- a/src/views/system/devtools/genDataBaseType/GenDataBaseTypeModal.vue +++ b/src/views/system/devtools/genDataBaseType/GenDataBaseTypeModal.vue @@ -45,12 +45,13 @@ import { reactive, computed } from 'vue'; import { BasicForm, useForm } from '/@/components/Form/index'; import { formSchema, genTableFieldTypeReloadColumns } from './genDataBaseType.data'; - import { saveAndGenTableFieldType, getGenDatabaseType } from '/@/api/platform/system/controller/genDatabaseType'; + import { saveAndGenTableFieldType, getGenDatabaseType, selectListByType } from '/@/api/platform/system/controller/genDatabaseType'; import { BasicModal, ModalProps, useModal, useModalInner } from '/@/components/Modal'; import { BasicTable, TableAction, useTable } from '/@/components/Table'; import GenTableFieldTypeModal from './GenTableFieldTypeModal.vue'; import { useMessage } from '/@/hooks/web/useMessage'; import { isNil } from 'lodash-es'; + import { isEmpty } from '/@/utils/is'; /** 通用变量统一声明区域 */ interface WindowState { @@ -66,7 +67,7 @@ const emit = defineEmits(['success', 'register']); const [genTableFieldTypeRegisterModal, { openModal: genTableFieldTypeOpenModal }] = useModal(); const getDataSource = computed(() => state.dataSource.filter(item => item._action != 'del')); - const [registerForm, { resetFields, setFieldsValue, validate, clearValidate, setProps }] = useForm({ + const [registerForm, { resetFields, setFieldsValue, validate, clearValidate, setProps, updateSchema }] = useForm({ labelWidth: 100, schemas: formSchema, showActionButtonGroup: false, @@ -95,12 +96,34 @@ // 处理清除脏数据 await resetFields(); await clearValidate(); - await setProps({ disabled: false }); // 处理设置数据 state.tag = data._tag; state.dataSource = []; const id = data.record?.id; + const type = data.record?.type; const props: Partial = { confirmLoading: false, showOkBtn: true }; + await updateSchema({ + field: 'type', + componentProps: { + disabled: state.tag != 'add' + }, + rules: [ + { + required: true, + message: '请选择数据库类型' + }, + { + validator: async (rule, value) => { + if (!isEmpty(value)) { + const result = await selectListByType(value); + const list = result.filter(item => item.type != type); + if(list?.length > 0) return Promise.reject('该数据库类型已存在'); + } + return Promise.resolve(); + }, + validateTrigger: 'blur' + }] + }); // 采用tag标签区分操作 switch (state.tag) { case 'add': @@ -108,7 +131,6 @@ break; case 'view': props.title = '查看数据库字段类型'; - await setProps({ disabled: true }); props.showOkBtn = false; const genDatabaseTypeView = await getGenDatabaseType(id); state.dataSource = genDatabaseTypeView?.genTableFieldTypeList || []; @@ -116,7 +138,6 @@ break; case 'edit': props.title = '编辑数据库字段类型'; - await setProps({ disabled: true }); const genDatabaseTypeEdit = await getGenDatabaseType(id); state.dataSource = genDatabaseTypeEdit?.genTableFieldTypeList || []; await setFieldsValue(genDatabaseTypeEdit);