From 3cc9adc5b3d123245dbd4f0b99424db2222d3269 Mon Sep 17 00:00:00 2001 From: puhui999 Date: Tue, 15 Apr 2025 18:19:29 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BB=A3=E7=A0=81=E7=94=9F?= =?UTF-8?q?=E6=88=90=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/router/routes/modules/infra.ts | 2 +- apps/web-antd/src/views/infra/codegen/data.ts | 65 ++++++++++--------- .../codegen/{edit.vue => edit/index.vue} | 13 +--- .../src/views/infra/codegen/index.vue | 22 +++---- .../infra/codegen/modules/generation-info.vue | 10 ++- .../infra/codegen/modules/import-table.vue | 35 ++-------- .../infra/codegen/modules/preview-code.vue | 2 +- 7 files changed, 60 insertions(+), 89 deletions(-) rename apps/web-antd/src/views/infra/codegen/{edit.vue => edit/index.vue} (89%) diff --git a/apps/web-antd/src/router/routes/modules/infra.ts b/apps/web-antd/src/router/routes/modules/infra.ts index 0f32b8db6..1ff47cb3e 100644 --- a/apps/web-antd/src/router/routes/modules/infra.ts +++ b/apps/web-antd/src/router/routes/modules/infra.ts @@ -27,7 +27,7 @@ const routes: RouteRecordRaw[] = [ { path: '/codegen/edit', name: 'InfraCodegenEdit', - component: () => import('#/views/infra/codegen/edit.vue'), + component: () => import('#/views/infra/codegen/edit/index.vue'), meta: { title: '修改生成配置', activeMenu: '/infra/codegen', diff --git a/apps/web-antd/src/views/infra/codegen/data.ts b/apps/web-antd/src/views/infra/codegen/data.ts index 3952aee81..7086bbc64 100644 --- a/apps/web-antd/src/views/infra/codegen/data.ts +++ b/apps/web-antd/src/views/infra/codegen/data.ts @@ -1,13 +1,13 @@ import type { VbenFormSchema } from '#/adapter/form'; import type { OnActionClickFn, VxeTableGridOptions } from '#/adapter/vxe-table'; import type { InfraCodegenApi } from '#/api/infra/codegen'; -import type { InfraDataSourceConfigApi } from '#/api/infra/data-source-config'; import type { SystemMenuApi } from '#/api/system/menu'; import type { Recordable } from '@vben/types'; +import type { ComputedRef } from 'vue'; import { IconifyIcon } from '@vben/icons'; -import { z } from '#/adapter/form'; +import { getDataSourceConfigList } from '#/api/infra/data-source-config'; import { getMenuList } from '#/api/system/menu'; import { getRangePickerDefaultProps } from '#/utils/date'; import { DICT_TYPE, getDictOptions } from '#/utils/dict'; @@ -20,24 +20,33 @@ import { $t } from '@vben/locales'; const { hasAccessByCodes } = useAccess(); /** 导入数据库表的表单 */ -export function useImportTableFormSchema( - dataSourceConfigList: InfraDataSourceConfigApi.InfraDataSourceConfig[], -): VbenFormSchema[] { +export function useImportTableFormSchema(): VbenFormSchema[] { return [ { fieldName: 'dataSourceConfigId', label: '数据源', - // TODO @puhui999:不确定使用 ApiSelect 的话,使用 afterEach,可以设置默认 defaultValue 不 - component: 'Select', + component: 'ApiSelect', componentProps: { - options: dataSourceConfigList.map((item) => ({ - label: item.name, - value: item.id, - })), + api: async () => { + const data = await getDataSourceConfigList(); + return data.map((item) => ({ + label: item.name, + value: item.id, + })); + }, + autoSelect: 'first', placeholder: '请选择数据源', }, - defaultValue: dataSourceConfigList[0]?.id, - rules: 'required', + dependencies: { + triggerFields: ['dataSourceConfigId'], + trigger(values, formApi) { + if (values.dataSourceConfigId === undefined) { + return; + } + formApi.submitForm(values); + }, + }, + rules: 'selectRequired', }, { fieldName: 'name', @@ -124,7 +133,7 @@ export function useGenerationInfoBaseFormSchema(): VbenFormSchema[] { options: getDictOptions(DICT_TYPE.INFRA_CODEGEN_TEMPLATE_TYPE, 'number'), class: 'w-full', }, - rules: z.number().min(1, { message: '生成模板不能为空' }), + rules: 'selectRequired', }, { component: 'Select', @@ -134,8 +143,7 @@ export function useGenerationInfoBaseFormSchema(): VbenFormSchema[] { options: getDictOptions(DICT_TYPE.INFRA_CODEGEN_FRONT_TYPE, 'number'), class: 'w-full', }, - // todo @puhui999:1 可以是枚举么 - rules: z.number().min(1, { message: '前端类型不能为空' }), + rules: 'selectRequired', }, { component: 'Select', @@ -145,8 +153,7 @@ export function useGenerationInfoBaseFormSchema(): VbenFormSchema[] { options: getDictOptions(DICT_TYPE.INFRA_CODEGEN_SCENE, 'number'), class: 'w-full', }, - // todo @puhui999:1 可以是枚举么 - rules: z.number().min(1, { message: '生成场景不能为空' }), + rules: 'selectRequired', }, { fieldName: 'parentMenuId', @@ -199,36 +206,34 @@ export function useGenerationInfoBaseFormSchema(): VbenFormSchema[] { fieldName: 'moduleName', label: '模块名', help: '模块名,即一级目录,例如 system、infra、tool 等等', - // TODO @puhui999:这种 rules,可以使用 required - rules: z.string().min(1, { message: '模块名不能为空' }), + rules: 'required', }, { component: 'Input', fieldName: 'businessName', label: '业务名', help: '业务名,即二级目录,例如 user、permission、dict 等等', - rules: z.string().min(1, { message: '业务名不能为空' }), + rules: 'required', }, { component: 'Input', fieldName: 'className', label: '类名称', help: '类名称(首字母大写),例如SysUser、SysMenu、SysDictData 等等', - rules: z.string().min(1, { message: '类名称不能为空' }), + rules: 'required', }, { component: 'Input', fieldName: 'classComment', label: '类描述', help: '用作类描述,例如 用户', - rules: z.string().min(1, { message: '类描述不能为空' }), + rules: 'required', }, ]; } -// TODO @puhui999:是不是使用 useGenerationInfoTreeFormSchema,主要考虑对称 /** 树表信息 schema */ -export function useTreeTableFormSchema(columns: InfraCodegenApi.CodegenColumn[] = []): VbenFormSchema[] { +export function useGenerationInfoTreeFormSchema(columns: InfraCodegenApi.CodegenColumn[] = []): VbenFormSchema[] { return [ { component: 'Divider', @@ -276,9 +281,8 @@ export function useTreeTableFormSchema(columns: InfraCodegenApi.CodegenColumn[] ]; } -// TODO @puhui999:【类似】是不是使用 useGenerationInfoTreeFormSchema,主要考虑对称 /** 主子表信息 schema */ -export function useSubTableFormSchema( +export function useGenerationInfoSubTableFormSchema( columns: InfraCodegenApi.CodegenColumn[] = [], tables: InfraCodegenApi.CodegenTable[] = [], ): VbenFormSchema[] { @@ -387,17 +391,14 @@ export function useGridFormSchema(): VbenFormSchema[] { /** 列表的字段 */ export function useGridColumns( onActionClick: OnActionClickFn, - dataSourceConfigList: InfraDataSourceConfigApi.InfraDataSourceConfig[], + getDataSourceConfigName: ComputedRef<(cellValue: number) => string>, ): VxeTableGridOptions['columns'] { return [ { field: 'dataSourceConfigId', title: '数据源', minWidth: 120, - formatter: ({ cellValue }) => { - const config = dataSourceConfigList.find((item) => item.id === cellValue); - return config ? config.name : ''; - }, + formatter: ({ cellValue }) => getDataSourceConfigName.value(cellValue), }, { field: 'tableName', diff --git a/apps/web-antd/src/views/infra/codegen/edit.vue b/apps/web-antd/src/views/infra/codegen/edit/index.vue similarity index 89% rename from apps/web-antd/src/views/infra/codegen/edit.vue rename to apps/web-antd/src/views/infra/codegen/edit/index.vue index 1f268e3b7..e5038956a 100644 --- a/apps/web-antd/src/views/infra/codegen/edit.vue +++ b/apps/web-antd/src/views/infra/codegen/edit/index.vue @@ -1,10 +1,9 @@