diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/string/StrUtils.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/string/StrUtils.java index d236d1817..47a53a595 100644 --- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/string/StrUtils.java +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/string/StrUtils.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.common.util.string; import cn.hutool.core.text.StrPool; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.StrUtil; +import org.aspectj.lang.JoinPoint; import java.util.Arrays; import java.util.Collection; @@ -77,4 +78,30 @@ public class StrUtils { .collect(Collectors.joining("\n")); } + /** + * 拼接方法的参数 + * + * 特殊:排除一些无法序列化的参数,如 ServletRequest、ServletResponse、MultipartFile + * + * @param joinPoint 连接点 + * @return 拼接后的参数 + */ + public static String joinMethodArgs(JoinPoint joinPoint) { + Object[] args = joinPoint.getArgs(); + if (ArrayUtil.isEmpty(args)) { + return ""; + } + return ArrayUtil.join(args, ",", item -> { + if (item == null) { + return ""; + } + // 讨论可见:https://t.zsxq.com/XUJVk、https://t.zsxq.com/MnKcL + String clazzName = item.getClass().getName(); + if (StrUtil.startWithAny(clazzName, "javax.servlet", "jakarta.servlet", "org.springframework.web")) { + return ""; + } + return item; + }); + } + } diff --git a/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/model/tool/UserProfileQueryToolFunction.java b/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/model/tool/UserProfileQueryToolFunction.java index 08dbed9d8..70b28d6de 100644 --- a/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/model/tool/UserProfileQueryToolFunction.java +++ b/yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/model/tool/UserProfileQueryToolFunction.java @@ -60,7 +60,7 @@ public class UserProfileQueryToolFunction } @Override - public Response apply(Request request, ToolContext toolContext) { + public UserProfileQueryToolFunction.Response apply(UserProfileQueryToolFunction.Request request, ToolContext toolContext) { LoginUser loginUser = (LoginUser) toolContext.getContext().get(AiUtils.TOOL_CONTEXT_LOGIN_USER); Long tenantId = (Long) toolContext.getContext().get(AiUtils.TOOL_CONTEXT_TENANT_ID); if (loginUser == null | tenantId == null) { diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java index cb645f42b..6e4b0f62b 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java @@ -164,8 +164,6 @@ public class CodegenEngine { .put(CodegenFrontTypeEnum.VUE3_VBEN5_ANTD_SCHEMA.getType(), vue3Vben5AntdSchemaTemplatePath("views/modules/list_sub_erp.vue"), // 特殊:主子表专属逻辑 vue3FilePath("views/${table.moduleName}/${table.businessName}/modules/${subSimpleClassName_strikeCase}-list.vue")) // VUE3_VBEN5_ANTD - .put(CodegenFrontTypeEnum.VUE3_VBEN5_ANTD_GENERAL.getType(), vue3Vben5AntdGeneralTemplatePath("views/data.ts"), - vue3FilePath("views/${table.moduleName}/${table.businessName}/data.ts")) .put(CodegenFrontTypeEnum.VUE3_VBEN5_ANTD_GENERAL.getType(), vue3Vben5AntdGeneralTemplatePath("views/index.vue"), vue3FilePath("views/${table.moduleName}/${table.businessName}/index.vue")) .put(CodegenFrontTypeEnum.VUE3_VBEN5_ANTD_GENERAL.getType(), vue3Vben5AntdGeneralTemplatePath("views/form.vue"), diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben5_antd/general/api/api.ts.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben5_antd/general/api/api.ts.vm new file mode 100644 index 000000000..d3342f1fc --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben5_antd/general/api/api.ts.vm @@ -0,0 +1,153 @@ +import type { PageParam, PageResult } from '@vben/request'; +import type { Dayjs } from 'dayjs'; + +import { requestClient } from '#/api/request'; +#set ($baseURL = "/${table.moduleName}/${simpleClassName_strikeCase}") + +export namespace ${simpleClassName}Api { +## 特殊:主子表专属逻辑 +#foreach ($subTable in $subTables) + #set ($index = $foreach.count - 1) + #set ($subSimpleClassName = $subSimpleClassNames.get($index)) + #set ($subColumns = $subColumnsList.get($index))##当前字段数组 + /** ${subTable.classComment}信息 */ + export interface ${subSimpleClassName} { + #foreach ($column in $subColumns) + #if ($column.createOperation || $column.updateOperation) + #if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer" || ${column.javaType.toLowerCase()} == "short" || ${column.javaType.toLowerCase()} == "double" || ${column.javaType.toLowerCase()} == "bigdecimal") + ${column.javaField}#if($column.updateOperation && !$column.primaryKey && !$column.nullable)?#end: number; // ${column.columnComment} + #elseif(${column.javaType.toLowerCase()} == "date" || ${column.javaType.toLowerCase()} == "localdate" || ${column.javaType.toLowerCase()} == "localdatetime") + ${column.javaField}#if($column.updateOperation && !$column.primaryKey && !$column.nullable)?#end: string | Dayjs; // ${column.columnComment} + #else + ${column.javaField}#if($column.updateOperation && !$column.primaryKey && !$column.nullable)?#end: ${column.javaType.toLowerCase()}; // ${column.columnComment} + #end + #end + #end + } + +#end + /** ${table.classComment}信息 */ + export interface ${simpleClassName} { +#foreach ($column in $columns) +#if ($column.createOperation || $column.updateOperation) +#if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer" || ${column.javaType.toLowerCase()} == "short" || ${column.javaType.toLowerCase()} == "double" || ${column.javaType.toLowerCase()} == "bigdecimal") + ${column.javaField}#if($column.updateOperation && !$column.primaryKey && !$column.nullable)?#end: number; // ${column.columnComment} +#elseif(${column.javaType.toLowerCase()} == "date" || ${column.javaType.toLowerCase()} == "localdate" || ${column.javaType.toLowerCase()} == "localdatetime") + ${column.javaField}#if($column.updateOperation && !$column.primaryKey && !$column.nullable)?#end: string | Dayjs; // ${column.columnComment} +#else + ${column.javaField}#if($column.updateOperation && !$column.primaryKey && !$column.nullable)?#end: ${column.javaType.toLowerCase()}; // ${column.columnComment} +#end +#end +#end +#if ( $table.templateType == 2 ) + children?: ${simpleClassName}[]; +#end +## 特殊:主子表专属逻辑 +#if ( $table.templateType == 10 || $table.templateType == 12 ) + #foreach ($subTable in $subTables) + #set ($index = $foreach.count - 1) + #set ($subSimpleClassName = $subSimpleClassNames.get($index)) + #if ( $subTable.subJoinMany ) + ${subSimpleClassName.toLowerCase()}s?: ${subSimpleClassName}[] + #else + ${subSimpleClassName.toLowerCase()}?: ${subSimpleClassName} + #end + #end +#end + } +} + +#if ( $table.templateType != 2 ) +/** 查询${table.classComment}分页 */ +export function get${simpleClassName}Page(params: PageParam) { + return requestClient.get>('${baseURL}/page', { params }); +} +#else +/** 查询${table.classComment}列表 */ +export function get${simpleClassName}List(params: any) { + return requestClient.get<${simpleClassName}Api.${simpleClassName}[]>('${baseURL}/list', { params }); +} +#end + +/** 查询${table.classComment}详情 */ +export function get${simpleClassName}(id: number) { + return requestClient.get<${simpleClassName}Api.${simpleClassName}>(`${baseURL}/get?id=${id}`); +} + +/** 新增${table.classComment} */ +export function create${simpleClassName}(data: ${simpleClassName}Api.${simpleClassName}) { + return requestClient.post('${baseURL}/create', data); +} + +/** 修改${table.classComment} */ +export function update${simpleClassName}(data: ${simpleClassName}Api.${simpleClassName}) { + return requestClient.put('${baseURL}/update', data); +} + +/** 删除${table.classComment} */ +export function delete${simpleClassName}(id: number) { + return requestClient.delete(`${baseURL}/delete?id=${id}`); +} + +/** 导出${table.classComment} */ +export function export${simpleClassName}(params: any) { + return requestClient.download('${baseURL}/export-excel', params); +} + +## 特殊:主子表专属逻辑 +#foreach ($subTable in $subTables) +#set ($index = $foreach.count - 1) +#set ($subSimpleClassName = $subSimpleClassNames.get($index)) +#set ($subPrimaryColumn = $subPrimaryColumns.get($index))##当前 primary 字段 +#set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 +#set ($subSimpleClassName_strikeCase = $subSimpleClassName_strikeCases.get($index)) +#set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index)) +#set ($subClassNameVar = $subClassNameVars.get($index)) + +// ==================== 子表($subTable.classComment) ==================== + +## 情况一:MASTER_ERP 时,需要分查询页子表 +#if ( $table.templateType == 11 ) +/** 获得${subTable.classComment}分页 */ +export function get${subSimpleClassName}Page(params: PageParam) { + return requestClient.get>(`${baseURL}/${subSimpleClassName_strikeCase}/page`, { params }); +} +## 情况二:非 MASTER_ERP 时,需要列表查询子表 +#else + #if ( $subTable.subJoinMany ) +/** 获得${subTable.classComment}列表 */ +export function get${subSimpleClassName}ListBy${SubJoinColumnName}(${subJoinColumn.javaField}: number) { + return requestClient.get<${simpleClassName}Api.${subSimpleClassName}[]>(`${baseURL}/${subSimpleClassName_strikeCase}/list-by-${subJoinColumn_strikeCase}?${subJoinColumn.javaField}=${${subJoinColumn.javaField}}`); +} + #else +/** 获得${subTable.classComment} */ +export function get${subSimpleClassName}By${SubJoinColumnName}(${subJoinColumn.javaField}: number) { + return requestClient.get<${simpleClassName}Api.${subSimpleClassName}>(`${baseURL}/${subSimpleClassName_strikeCase}/get-by-${subJoinColumn_strikeCase}?${subJoinColumn.javaField}=${${subJoinColumn.javaField}}`); +} + #end +#end +## 特殊:MASTER_ERP 时,支持单个的新增、修改、删除操作 +#if ( $table.templateType == 11 ) +/** 新增${subTable.classComment} */ +export function create${subSimpleClassName}(data: ${simpleClassName}Api.${subSimpleClassName}) { + return requestClient.post(`${baseURL}/${subSimpleClassName_strikeCase}/create`, data); +} + +/** 修改${subTable.classComment} */ +export function update${subSimpleClassName}(data: ${simpleClassName}Api.${subSimpleClassName}) { + return requestClient.put(`${baseURL}/${subSimpleClassName_strikeCase}/update`, data); +} + +/** 删除${subTable.classComment} */ +export function delete${subSimpleClassName}(id: number) { + return requestClient.delete(`${baseURL}/${subSimpleClassName_strikeCase}/delete?id=${id}`); +} + +/** 获得${subTable.classComment} */ +export function get${subSimpleClassName}(id: number) { + return requestClient.get<${simpleClassName}Api.${subSimpleClassName}>(`${baseURL}/${subSimpleClassName_strikeCase}/get?id=${id}`); +} +#end +#end + diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben5_antd/general/views/data.ts.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben5_antd/general/views/data.ts.vm deleted file mode 100644 index 9f356f684..000000000 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben5_antd/general/views/data.ts.vm +++ /dev/null @@ -1,349 +0,0 @@ -import type { VxeTableGridOptions } from '@vben/plugins/vxe-table'; -import type { VbenFormSchema } from '#/adapter/form'; -import type { OnActionClickFn } from '#/adapter/vxe-table'; -import type { ${simpleClassName}Api } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; - -import { z } from '#/adapter/form'; -#if(${table.templateType} == 2)## 树表需要导入这些 -import { get${simpleClassName}List } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; -import { handleTree } from '#/utils/tree'; -#end -import { DICT_TYPE, getDictOptions } from '#/utils/dict'; -import { getRangePickerDefaultProps } from '#/utils/date'; -import { useAccess } from '@vben/access'; - -const { hasAccessByCodes } = useAccess(); - -/** 列表的搜索表单 */ -export function useGridFormSchema(): VbenFormSchema[] { - return [ -#foreach($column in $columns) -#if ($column.listOperation) - #set ($dictType = $column.dictType) - #set ($javaType = $column.javaType) - #set ($javaField = $column.javaField) - #set ($comment = $column.columnComment) - #if ($javaType == "Integer" || $javaType == "Long" || $javaType == "Byte" || $javaType == "Short") - #set ($dictMethod = "number") - #elseif ($javaType == "String") - #set ($dictMethod = "string") - #elseif ($javaType == "Boolean") - #set ($dictMethod = "boolean") - #end - { - fieldName: '${javaField}', - label: '${comment}', - #if ($column.htmlType == "input" || $column.htmlType == "textarea" || $column.htmlType == "editor") - component: 'Input', - componentProps: { - allowClear: true, - placeholder: '请输入${comment}', - }, - #elseif ($column.htmlType == "select" || $column.htmlType == "radio") - component: 'Select', - componentProps: { - allowClear: true, - #if ("" != $dictType)## 设置了 dictType 数据字典的情况 - options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod'), - #else## 未设置 dictType 数据字典的情况 - options: [], - #end - placeholder: '请选择${comment}', - }, - #elseif($column.htmlType == "datetime") - component: 'RangePicker', - componentProps: { - ...getRangePickerDefaultProps(), - allowClear: true, - }, - #end - }, -#end -#end - ]; -} - -/** 列表的字段 */ -export function useGridColumns( - onActionClick?: OnActionClickFn<${simpleClassName}Api.${simpleClassName}>, -): VxeTableGridOptions<${simpleClassName}Api.${simpleClassName}>['columns'] { - return [ -#if ($table.templateType == 12) ## 内嵌情况 - { type: 'expand', width: 80, slots: { content: 'expand_content' } }, -#end -#foreach($column in $columns) -#if ($column.listOperationResult) - #set ($dictType = $column.dictType) - #set ($javaField = $column.javaField) - #set ($comment = $column.columnComment) - { - field: '${javaField}', - title: '${comment}', - minWidth: 120, - #if ($column.javaType == "LocalDateTime")## 时间类型 - formatter: 'formatDateTime', - #elseif("" != $dictType)## 数据字典 - cellRender: { - name: 'CellDict', - props: { type: DICT_TYPE.$dictType.toUpperCase() }, - }, - #end - #if (${table.templateType} == 2 && $column.id == $treeNameColumn.id)## 树表特有:标记树节点列 - treeNode: true, - #end - }, -#end -#end - { - field: 'operation', - title: '操作', - minWidth: 200, - align: 'center', - fixed: 'right', - headerAlign: 'center', - showOverflow: false, - cellRender: { - attrs: { - nameField: '${columns[0].javaField}', - nameTitle: '${table.classComment}', - onClick: onActionClick, - }, - name: 'CellOperation', - options: [ -#if (${table.templateType} == 2)## 树表特有操作 - { - code: 'append', - text: '新增下级', - show: hasAccessByCodes(['${table.moduleName}:${simpleClassName_strikeCase}:create']), - }, -#end - { - code: 'edit', - show: hasAccessByCodes(['${table.moduleName}:${simpleClassName_strikeCase}:update']), - }, - { - code: 'delete', - show: hasAccessByCodes(['${table.moduleName}:${simpleClassName_strikeCase}:delete']), -#if (${table.templateType} == 2)## 树表禁止删除带有子节点的数据 - disabled: (row: ${simpleClassName}Api.${simpleClassName}) => { - return !!(row.children && row.children.length > 0); - }, -#end - }, - ], - }, - }, - ]; -} - -## 标准模式和内嵌模式时,主子关系一对一则生成表单schema,一对多则生成列表schema(内嵌模式时表单schema也要生成)。erp 模式时都生成 -## 特殊:主子表专属逻辑 -#foreach ($subTable in $subTables) - #set ($index = $foreach.count - 1) - #set ($subColumns = $subColumnsList.get($index))##当前字段数组 - #set ($subSimpleClassName = $subSimpleClassNames.get($index)) - #set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 - #set ($subSimpleClassName_strikeCase = $subSimpleClassName_strikeCases.get($index)) -// ==================== 子表($subTable.classComment) ==================== - -#if ($table.templateType == 11) ## erp 情况 -/** 列表的搜索表单 */ -export function use${subSimpleClassName}GridFormSchema(): VbenFormSchema[] { - return [ - #foreach($column in $subColumns) - #if ($column.listOperation) - #set ($dictType = $column.dictType) - #set ($javaType = $column.javaType) - #set ($javaField = $column.javaField) - #set ($comment = $column.columnComment) - #if ($javaType == "Integer" || $javaType == "Long" || $javaType == "Byte" || $javaType == "Short") - #set ($dictMethod = "number") - #elseif ($javaType == "String") - #set ($dictMethod = "string") - #elseif ($javaType == "Boolean") - #set ($dictMethod = "boolean") - #end - { - fieldName: '${javaField}', - label: '${comment}', - #if ($column.htmlType == "input" || $column.htmlType == "textarea" || $column.htmlType == "editor") - component: 'Input', - componentProps: { - allowClear: true, - placeholder: '请输入${comment}', - }, - #elseif ($column.htmlType == "select" || $column.htmlType == "radio") - component: 'Select', - componentProps: { - allowClear: true, - #if ("" != $dictType)## 设置了 dictType 数据字典的情况 - options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod'), - #else## 未设置 dictType 数据字典的情况 - options: [], - #end - placeholder: '请选择${comment}', - }, - #elseif($column.htmlType == "datetime") - component: 'RangePicker', - componentProps: { - ...getRangePickerDefaultProps(), - allowClear: true, - }, - #end - }, - #end - #end - ]; -} - -/** 列表的字段 */ -export function use${subSimpleClassName}GridColumns( - onActionClick?: OnActionClickFn<${simpleClassName}Api.${subSimpleClassName}>, -): VxeTableGridOptions<${simpleClassName}Api.${subSimpleClassName}>['columns'] { - return [ - #foreach($column in $subColumns) - #if ($column.listOperationResult) - #set ($dictType = $column.dictType) - #set ($javaField = $column.javaField) - #set ($comment = $column.columnComment) - { - field: '${javaField}', - title: '${comment}', - minWidth: 120, - #if ($column.javaType == "LocalDateTime")## 时间类型 - formatter: 'formatDateTime', - #elseif("" != $dictType)## 数据字典 - cellRender: { - name: 'CellDict', - props: { type: DICT_TYPE.$dictType.toUpperCase() }, - }, - #end - }, - #end - #end - { - field: 'operation', - title: '操作', - minWidth: 200, - align: 'center', - fixed: 'right', - headerAlign: 'center', - showOverflow: false, - cellRender: { - attrs: { - nameField: '${columns[0].javaField}', - nameTitle: '${subTable.classComment}', - onClick: onActionClick, - }, - name: 'CellOperation', - options: [ - { - code: 'edit', - show: hasAccessByCodes(['${table.moduleName}:${simpleClassName_strikeCase}:update']), - }, - { - code: 'delete', - show: hasAccessByCodes(['${table.moduleName}:${simpleClassName_strikeCase}:delete']), - }, - ], - }, - }, - ]; -} - -#else - #if ($subTable.subJoinMany) ## 一对多 - /** 新增/修改列表的字段 */ - export function use${subSimpleClassName}GridEditColumns( - onActionClick?: OnActionClickFn<${simpleClassName}Api.${subSimpleClassName}>, - ): VxeTableGridOptions<${simpleClassName}Api.${subSimpleClassName}>['columns'] { - return [ - #foreach($column in $subColumns) - #if ($column.createOperation || $column.updateOperation) - #if (!$column.primaryKey && $column.listOperationResult && $column.id != $subJoinColumn.id) ## 特殊:忽略主子表的 join 字段,不用填写 - #set ($dictType = $column.dictType) - #set ($javaField = $column.javaField) - #set ($comment = $column.columnComment) - #if ($javaType == "Integer" || $javaType == "Long" || $javaType == "Byte" || $javaType == "Short") - #set ($dictMethod = "number") - #elseif ($javaType == "String") - #set ($dictMethod = "string") - #elseif ($javaType == "Boolean") - #set ($dictMethod = "boolean") - #end - { - field: '${javaField}', - title: '${comment}', - minWidth: 120, - slots: { default: '${javaField}' }, - #if ($column.htmlType == "select" || $column.htmlType == "checkbox" || $column.htmlType == "radio") - #if ("" != $dictType)## 有数据字典 - params: { - options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod'), - }, - #else - params: { - options: [], - }, - #end - #end - }, - #end - #end - #end - { - field: 'operation', - title: '操作', - minWidth: 60, - align: 'center', - fixed: 'right', - headerAlign: 'center', - showOverflow: false, - cellRender: { - attrs: { - nameField: '${columns[0].javaField}', - nameTitle: '${table.classComment}', - onClick: onActionClick, - }, - name: 'CellOperation', - options: [ - { - code: 'delete', - show: hasAccessByCodes(['${table.moduleName}:${simpleClassName_strikeCase}:delete']), - }, - ], - }, - }, - ]; - } - #end - #if ($table.templateType == 12) ## 内嵌情况 - /** 列表的字段 */ - export function use${subSimpleClassName}GridColumns(): VxeTableGridOptions<${simpleClassName}Api.${subSimpleClassName}>['columns'] { - return [ - #foreach($column in $subColumns) - #if ($column.listOperationResult) - #set ($dictType = $column.dictType) - #set ($javaField = $column.javaField) - #set ($comment = $column.columnComment) - { - field: '${javaField}', - title: '${comment}', - minWidth: 120, - #if ($column.javaType == "LocalDateTime")## 时间类型 - formatter: 'formatDateTime', - #elseif("" != $dictType)## 数据字典 - cellRender: { - name: 'CellDict', - props: { type: DICT_TYPE.$dictType.toUpperCase() }, - }, - #end - }, - #end - #end - ]; - } - - #end -#end -#end \ No newline at end of file diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben5_antd/general/views/form.vue.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben5_antd/general/views/form.vue.vm index 281df2479..187f66c14 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben5_antd/general/views/form.vue.vm +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben5_antd/general/views/form.vue.vm @@ -5,11 +5,11 @@ import type { Rule } from 'ant-design-vue/es/form'; import { useVbenModal } from '@vben/common-ui'; import { Tinymce as RichTextarea } from '#/components/tinymce'; import { ImageUpload, FileUpload } from "#/components/upload"; -import { message, Tabs, Form, Input, Textarea, Select, RadioGroup, Radio, CheckboxGroup, Checkbox, DatePicker } from 'ant-design-vue'; +import { message, Tabs, Form, Input, Textarea, Select, RadioGroup, Radio, CheckboxGroup, Checkbox, DatePicker, TreeSelect } from 'ant-design-vue'; import { DICT_TYPE, getDictOptions } from '#/utils/dict'; #if($table.templateType == 2)## 树表需要导入这些 import { get${simpleClassName}List } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; -import { handleTree } from '#/utils/tree'; +import { handleTree } from '@vben/utils' #end ## 特殊:主子表专属逻辑 #if ( $table.templateType == 10 || $table.templateType == 12 ) @@ -25,9 +25,8 @@ import { $t } from '#/locales'; import { get${simpleClassName}, create${simpleClassName}, update${simpleClassName} } from '#/api/${table.moduleName}/${simpleClassName_strikeCase}'; const emit = defineEmits(['success']); + const formRef = ref(); -const labelCol = { span: 5 }; -const wrapperCol = { span: 13 }; const formData = ref>({ #foreach ($column in $columns) #if ($column.createOperation || $column.updateOperation) @@ -91,10 +90,12 @@ const resetForm = () => { /** 获得${table.classComment}树 */ const get${simpleClassName}Tree = async () => { ${classNameVar}Tree.value = [] - const data = await get${simpleClassName}List() - const root: Tree = { id: 0, name: '顶级${table.classComment}', children: [] } - root.children = handleTree(data, 'id', '${treeParentColumn.javaField}') - ${classNameVar}Tree.value.push(root) + const data = await get${simpleClassName}List({}); + data.unshift({ + id: 0, + name: '顶级${table.classComment}', + }); + ${classNameVar}Tree.value = handleTree(data); } #end @@ -111,10 +112,11 @@ const [Modal, modalApi] = useVbenModal({ #if ($subTable.subJoinMany) ## 一对多 ## TODO 列表值校验? #else - const ${subClassNameVar}Valid = await ${subClassNameVar}FormRef.value?.validate(); - if (!${subClassNameVar}Valid) { - subTabsName.value = '${subClassNameVar}'; - return; + try { + await ${subClassNameVar}FormRef.value?.validate() + } catch (e) { + subTabsName.value = '${subClassNameVar}' + return } #end #end @@ -133,7 +135,7 @@ const [Modal, modalApi] = useVbenModal({ #if ($subTable.subJoinMany) data.${subClassNameVar}s = ${subClassNameVar}FormRef.value?.getData(); #else - data.${subClassNameVar} = await ${subClassNameVar}FormRef.value?.getValues(); + data.${subClassNameVar} = ${subClassNameVar}FormRef.value?.getValues(); #end #end #end @@ -156,7 +158,6 @@ const [Modal, modalApi] = useVbenModal({ resetForm() return; } - // 加载数据 let data = modalApi.getData<${simpleClassName}Api.${simpleClassName}>(); if (!data) { @@ -185,8 +186,8 @@ const [Modal, modalApi] = useVbenModal({ ref="formRef" :model="formData" :rules="rules" - :label-col="labelCol" - :wrapper-col="wrapperCol" + :label-col="{ span: 5 }" + :wrapper-col="{ span: 18 }" > #foreach($column in $columns) #if ($column.createOperation || $column.updateOperation) @@ -207,9 +208,17 @@ const [Modal, modalApi] = useVbenModal({ v-model:value="formData.${javaField}" :treeData="${classNameVar}Tree" #if ($treeNameColumn.javaField == "name") - :fieldNames="defaultProps" + :fieldNames="{ + label: 'name', + value: 'id', + children: 'children', + }" #else - :fieldNames="{...defaultProps, label: '$treeNameColumn.javaField'}" + :fieldNames="{ + label: '$treeNameColumn.javaField', + value: 'id', + children: 'children', + }" #end checkable treeDefaultExpandAll @@ -239,9 +248,10 @@ const [Modal, modalApi] = useVbenModal({ + > + {{ dict.label }} + #else##没数据字典 #end @@ -254,9 +264,10 @@ const [Modal, modalApi] = useVbenModal({ + > + {{ dict.label }} + #else##没数据字典 #end diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben5_antd/general/views/index.vue.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben5_antd/general/views/index.vue.vm index aaaad6b1d..c7f482268 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben5_antd/general/views/index.vue.vm +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben5_antd/general/views/index.vue.vm @@ -1,8 +1,9 @@ + #elseif ($table.templateType == 2 && $javaField == $treeNameColumn.javaField) + #else #end @@ -305,6 +385,16 @@ onMounted(() => { #end +#if ( $table.templateType != 2 )
{ @change="getList" />
+#end #if ($table.templateType == 11) ## erp情况 diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben5_antd/general/views/modules/form_sub_erp.vue.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben5_antd/general/views/modules/form_sub_erp.vue.vm index e114b7dae..77b9d11dd 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben5_antd/general/views/modules/form_sub_erp.vue.vm +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben5_antd/general/views/modules/form_sub_erp.vue.vm @@ -4,49 +4,54 @@ #set ($subSimpleClassName = $subSimpleClassNames.get($subIndex))