fix(codegen): 修复 CURD 模板已知问题
This commit is contained in:
@@ -6,33 +6,56 @@
|
||||
:search-config="searchConfig"
|
||||
@query-click="handleQueryClick"
|
||||
@reset-click="handleResetClick"
|
||||
/>
|
||||
>
|
||||
#foreach($fieldConfig in $fieldConfigs)
|
||||
#if($fieldConfig.isShowInQuery == 1 && $fieldConfig.dictType && $fieldConfig.dictType.trim() != "")
|
||||
<template #$fieldConfig.fieldName="scope">
|
||||
<Dict v-model="scope.formData[scope.prop]" code="$fieldConfig.dictType" v-bind="scope.attrs" />
|
||||
</template>
|
||||
#end
|
||||
#end
|
||||
</page-search>
|
||||
|
||||
<!-- 列表 -->
|
||||
<page-content
|
||||
ref="contentRef"
|
||||
:content-config="contentConfig"
|
||||
@add-click="handleAddClick"
|
||||
@export-click="handleExportClick"
|
||||
@search-click="handleSearchClick"
|
||||
@toolbar-click="handleToolbarClick"
|
||||
@operate-click="handleOperateClick"
|
||||
@filter-change="handleFilterChange"
|
||||
>
|
||||
#foreach($fieldConfig in $fieldConfigs)
|
||||
#if($fieldConfig.isShowInList == 1 && $fieldConfig.dictType && $fieldConfig.dictType.trim() != "")
|
||||
<template #$fieldConfig.fieldName="scope">
|
||||
<DictLabel v-model="scope.row[scope.prop]" code="$fieldConfig.dictType" />
|
||||
</template>
|
||||
#end
|
||||
#end
|
||||
#foreach($fieldConfig in $fieldConfigs)
|
||||
#if($fieldConfig.isShowInList == 1 && $fieldConfig.dictType && $fieldConfig.dictType.trim() != "")
|
||||
<template #$fieldConfig.fieldName="scope">
|
||||
<DictLabel v-model="scope.row[scope.prop]" code="$fieldConfig.dictType" />
|
||||
</template>
|
||||
#end
|
||||
#end
|
||||
</page-content>
|
||||
|
||||
<!-- 新增/编辑 -->
|
||||
<page-modal ref="modalRef" :modal-config="modalConfig" @submit-click="handleSubmitClick">
|
||||
#foreach($fieldConfig in $fieldConfigs)
|
||||
#if($fieldConfig.isShowInForm == 1 && $fieldConfig.formType != "HIDDEN" && $fieldConfig.dictType && $fieldConfig.dictType.trim() != "")
|
||||
<template #$fieldConfig.fieldName="scope">
|
||||
<Dict v-model="scope.formData[scope.prop]" code="$fieldConfig.dictType" v-bind="scope.attrs" />
|
||||
</template>
|
||||
#end
|
||||
#end
|
||||
<!-- 新增 -->
|
||||
<page-modal ref="addModalRef" :modal-config="addModalConfig" @submit-click="handleSubmitClick">
|
||||
#foreach($fieldConfig in $fieldConfigs)
|
||||
#if($fieldConfig.isShowInForm == 1 && $fieldConfig.formType != "HIDDEN" && $fieldConfig.dictType && $fieldConfig.dictType.trim() != "")
|
||||
<template #$fieldConfig.fieldName="scope">
|
||||
<Dict v-model="scope.formData[scope.prop]" code="$fieldConfig.dictType" v-bind="scope.attrs" />
|
||||
</template>
|
||||
#end
|
||||
#end
|
||||
</page-modal>
|
||||
|
||||
<!-- 编辑 -->
|
||||
<page-modal ref="editModalRef" :modal-config="editModalConfig" @submit-click="handleSubmitClick">
|
||||
#foreach($fieldConfig in $fieldConfigs)
|
||||
#if($fieldConfig.isShowInForm == 1 && $fieldConfig.formType != "HIDDEN" && $fieldConfig.dictType && $fieldConfig.dictType.trim() != "")
|
||||
<template #$fieldConfig.fieldName="scope">
|
||||
<Dict v-model="scope.formData[scope.prop]" code="$fieldConfig.dictType" v-bind="scope.attrs" />
|
||||
</template>
|
||||
#end
|
||||
#end
|
||||
</page-modal>
|
||||
</div>
|
||||
</template>
|
||||
@@ -40,44 +63,84 @@
|
||||
<script setup lang="ts">
|
||||
defineOptions({ name: "$entityName" });
|
||||
|
||||
import ${entityName}API, { ${entityName}PageVO, ${entityName}Form, ${entityName}PageQuery } from "@/api/${moduleName}/${kebabCaseEntityName}-api";
|
||||
import type { IObject, PageModalInstance } from "@/components/CURD/types";
|
||||
import ${entityName}API, { ${entityName}Form, ${entityName}PageQuery } from "@/api/${moduleName}/${kebabCaseEntityName}-api";
|
||||
import type { IObject, IModalConfig, IContentConfig, ISearchConfig } from "@/components/CURD/types";
|
||||
import usePage from "@/components/CURD/usePage";
|
||||
|
||||
// 组合式 CRUD
|
||||
const {
|
||||
searchRef,
|
||||
contentRef,
|
||||
addModalRef: modalRef,
|
||||
addModalRef,
|
||||
editModalRef,
|
||||
handleQueryClick,
|
||||
handleResetClick,
|
||||
handleAddClick,
|
||||
handleEditClick,
|
||||
handleSubmitClick,
|
||||
} = usePage<${entityName}PageQuery, ${entityName}PageVO, ${entityName}Form>();
|
||||
handleExportClick,
|
||||
handleSearchClick,
|
||||
handleFilterChange,
|
||||
} = usePage();
|
||||
|
||||
// 搜索配置
|
||||
const searchConfig = {
|
||||
const searchConfig: ISearchConfig = reactive({
|
||||
permPrefix: "${moduleName}:${kebabCaseEntityName}",
|
||||
formItems: [
|
||||
#foreach($fieldConfig in $fieldConfigs)
|
||||
#if($fieldConfig.isShowInQuery == 1)
|
||||
{
|
||||
type: "$!{fieldConfig.formType.toLowerCase()}",
|
||||
label: "$fieldConfig.fieldComment",
|
||||
prop: "$fieldConfig.fieldName",
|
||||
attrs: {
|
||||
placeholder: "$fieldConfig.fieldComment",
|
||||
},
|
||||
#foreach($fieldConfig in $fieldConfigs)
|
||||
#if($fieldConfig.isShowInQuery == 1)
|
||||
#if($fieldConfig.dictType && $fieldConfig.dictType.trim() != "")
|
||||
{
|
||||
type: "custom",
|
||||
slotName: "$fieldConfig.fieldName",
|
||||
label: "$fieldConfig.fieldComment",
|
||||
prop: "$fieldConfig.fieldName",
|
||||
attrs: {
|
||||
placeholder: "$fieldConfig.fieldComment",
|
||||
clearable: true,
|
||||
style: { width: "200px" },
|
||||
},
|
||||
#end
|
||||
#end
|
||||
},
|
||||
#else
|
||||
{
|
||||
#if($fieldConfig.javaType == "String")
|
||||
type: "input",
|
||||
#elseif($fieldConfig.javaType == "Integer" || $fieldConfig.javaType == "Long")
|
||||
type: "input-number",
|
||||
#elseif($fieldConfig.javaType == "Date" || $fieldConfig.javaType == "LocalDateTime")
|
||||
type: "date-picker",
|
||||
#else
|
||||
type: "input",
|
||||
#end
|
||||
label: "$fieldConfig.fieldComment",
|
||||
prop: "$fieldConfig.fieldName",
|
||||
attrs: {
|
||||
placeholder: "$fieldConfig.fieldComment",
|
||||
#if($fieldConfig.javaType == "Date" || $fieldConfig.javaType == "LocalDateTime")
|
||||
type: "daterange",
|
||||
"range-separator": "~",
|
||||
"start-placeholder": "开始时间",
|
||||
"end-placeholder": "截止时间",
|
||||
"value-format": "YYYY-MM-DD",
|
||||
#end
|
||||
clearable: true,
|
||||
style: { width: "200px" },
|
||||
},
|
||||
},
|
||||
#end
|
||||
#end
|
||||
#end
|
||||
],
|
||||
};
|
||||
});
|
||||
|
||||
// 列表配置
|
||||
const contentConfig = {
|
||||
const contentConfig: IContentConfig<${entityName}PageQuery> = reactive({
|
||||
// 权限前缀
|
||||
permPrefix: "${moduleName}:${kebabCaseEntityName}",
|
||||
table: {
|
||||
border: true,
|
||||
highlightCurrentRow: true,
|
||||
},
|
||||
// 主键
|
||||
pk: "id",
|
||||
// 列表查询接口
|
||||
@@ -104,78 +167,164 @@ const contentConfig = {
|
||||
// 表格列配置
|
||||
cols: [
|
||||
{ type: "selection", width: 55, align: "center" },
|
||||
#foreach($fieldConfig in $fieldConfigs)
|
||||
#if($fieldConfig.isShowInList == 1)
|
||||
#if($fieldConfig.dictType && $fieldConfig.dictType.trim() != "")
|
||||
{
|
||||
label: "$fieldConfig.fieldComment",
|
||||
prop: "$fieldConfig.fieldName",
|
||||
#foreach($fieldConfig in $fieldConfigs)
|
||||
#if($fieldConfig.isShowInList == 1)
|
||||
#if($fieldConfig.dictType && $fieldConfig.dictType.trim() != "")
|
||||
{
|
||||
label: "$fieldConfig.fieldComment",
|
||||
prop: "$fieldConfig.fieldName",
|
||||
templet: "custom",
|
||||
slotName: "$fieldConfig.fieldName"
|
||||
slotName: "$fieldConfig.fieldName"
|
||||
},
|
||||
#else
|
||||
#else
|
||||
{ label: "$fieldConfig.fieldComment", prop: "$fieldConfig.fieldName" },
|
||||
#end
|
||||
#end
|
||||
#end
|
||||
{
|
||||
label: "操作",
|
||||
prop: "operation",
|
||||
#end
|
||||
#end
|
||||
#end
|
||||
{
|
||||
label: "操作",
|
||||
prop: "operation",
|
||||
width: 220,
|
||||
templet: "tool",
|
||||
operat: [
|
||||
{ name: "edit", text: "编辑", attrs: { type: "primary", icon: "edit" } },
|
||||
{ name: "delete", text: "删除", attrs: { type: "danger", icon: "delete" } },
|
||||
],
|
||||
}
|
||||
operat: ["edit", "delete"],
|
||||
},
|
||||
],
|
||||
};
|
||||
});
|
||||
|
||||
// 弹窗配置
|
||||
const modalConfig = {
|
||||
// 新增配置
|
||||
const addModalConfig: IModalConfig<${entityName}Form> = reactive({
|
||||
// 权限前缀
|
||||
permPrefix: "${moduleName}:${kebabCaseEntityName}",
|
||||
// 主键
|
||||
pk: "id",
|
||||
// 弹窗配置
|
||||
dialog: {
|
||||
title: "新增${entityComment}",
|
||||
title: "新增$!{entityComment}",
|
||||
width: 800,
|
||||
draggable: true,
|
||||
},
|
||||
form: {
|
||||
labelWidth: 100,
|
||||
},
|
||||
// 表单项配置
|
||||
formItems: [
|
||||
#foreach($fieldConfig in $fieldConfigs)
|
||||
#if($fieldConfig.isShowInForm == 1 && $fieldConfig.formType != "HIDDEN")
|
||||
#if($fieldConfig.dictType && $fieldConfig.dictType.trim() != "")
|
||||
#foreach($fieldConfig in $fieldConfigs)
|
||||
#if($fieldConfig.isShowInForm == 1 && $fieldConfig.formType != "HIDDEN")
|
||||
#if($fieldConfig.dictType && $fieldConfig.dictType.trim() != "")
|
||||
{
|
||||
type: "custom",
|
||||
label: "$fieldConfig.fieldComment",
|
||||
prop: "$fieldConfig.fieldName",
|
||||
slotName: "$fieldConfig.fieldName",
|
||||
attrs: {
|
||||
attrs: {
|
||||
placeholder: "$fieldConfig.fieldComment",
|
||||
style: { width: "100%" }
|
||||
},
|
||||
#if($fieldConfig.isRequired == 1)
|
||||
#if($fieldConfig.isRequired == 1)
|
||||
rules: [{ required: true, message: "$fieldConfig.fieldComment不能为空", trigger: "change" }],
|
||||
#end
|
||||
#end
|
||||
},
|
||||
#else
|
||||
#else
|
||||
{
|
||||
type: "$!{fieldConfig.formType.toLowerCase()}",
|
||||
#if($fieldConfig.javaType == "String")
|
||||
#if($fieldConfig.fieldName.contains("password") || $fieldConfig.fieldName.contains("pwd"))
|
||||
type: "input",
|
||||
attrs: {
|
||||
type: "password",
|
||||
placeholder: "$fieldConfig.fieldComment",
|
||||
showPassword: true
|
||||
},
|
||||
#if($fieldConfig.isRequired == 1)
|
||||
rules: [{ required: true, message: "$fieldConfig.fieldComment不能为空", trigger: "blur" }],
|
||||
#end
|
||||
#elseif($fieldConfig.fieldName.contains("email"))
|
||||
type: "input",
|
||||
attrs: {
|
||||
placeholder: "$fieldConfig.fieldComment",
|
||||
maxlength: 50
|
||||
},
|
||||
rules: [
|
||||
#if($fieldConfig.isRequired == 1)
|
||||
{ required: true, message: "$fieldConfig.fieldComment不能为空", trigger: "blur" },
|
||||
#end
|
||||
{ pattern: /\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/, message: "请输入正确的邮箱地址", trigger: "blur" }
|
||||
],
|
||||
#elseif($fieldConfig.fieldName.contains("mobile") || $fieldConfig.fieldName.contains("phone"))
|
||||
type: "input",
|
||||
attrs: {
|
||||
placeholder: "$fieldConfig.fieldComment",
|
||||
maxlength: 11
|
||||
},
|
||||
rules: [
|
||||
#if($fieldConfig.isRequired == 1)
|
||||
{ required: true, message: "$fieldConfig.fieldComment不能为空", trigger: "blur" },
|
||||
#end
|
||||
{ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }
|
||||
],
|
||||
#else
|
||||
type: "input",
|
||||
attrs: {
|
||||
placeholder: "$fieldConfig.fieldComment"
|
||||
},
|
||||
#if($fieldConfig.isRequired == 1)
|
||||
rules: [{ required: true, message: "$fieldConfig.fieldComment不能为空", trigger: "blur" }],
|
||||
#end
|
||||
#end
|
||||
#elseif($fieldConfig.javaType == "Integer" || $fieldConfig.javaType == "Long")
|
||||
type: "input-number",
|
||||
attrs: {
|
||||
placeholder: "$fieldConfig.fieldComment",
|
||||
style: { width: "100%" }
|
||||
},
|
||||
#if($fieldConfig.isRequired == 1)
|
||||
rules: [{ required: true, message: "$fieldConfig.fieldComment不能为空", trigger: "blur" }],
|
||||
#end
|
||||
#elseif($fieldConfig.javaType == "BigDecimal" || $fieldConfig.javaType == "Double")
|
||||
type: "input-number",
|
||||
attrs: {
|
||||
placeholder: "$fieldConfig.fieldComment",
|
||||
precision: 2,
|
||||
style: { width: "100%" }
|
||||
},
|
||||
#if($fieldConfig.isRequired == 1)
|
||||
rules: [{ required: true, message: "$fieldConfig.fieldComment不能为空", trigger: "blur" }],
|
||||
#end
|
||||
#elseif($fieldConfig.javaType == "Date" || $fieldConfig.javaType == "LocalDateTime")
|
||||
type: "date-picker",
|
||||
attrs: {
|
||||
type: "datetime",
|
||||
placeholder: "$fieldConfig.fieldComment",
|
||||
format: "YYYY-MM-DD HH:mm:ss",
|
||||
"value-format": "YYYY-MM-DD HH:mm:ss",
|
||||
style: { width: "100%" }
|
||||
},
|
||||
#if($fieldConfig.isRequired == 1)
|
||||
rules: [{ required: true, message: "$fieldConfig.fieldComment不能为空", trigger: "change" }],
|
||||
#end
|
||||
#elseif($fieldConfig.javaType == "Boolean" || $fieldConfig.fieldName.contains("status"))
|
||||
type: "switch",
|
||||
attrs: {
|
||||
activeText: "启用",
|
||||
inactiveText: "禁用",
|
||||
activeValue: 1,
|
||||
inactiveValue: 0
|
||||
},
|
||||
initialValue: 1,
|
||||
#else
|
||||
type: "input",
|
||||
attrs: {
|
||||
placeholder: "$fieldConfig.fieldComment"
|
||||
},
|
||||
#if($fieldConfig.isRequired == 1)
|
||||
rules: [{ required: true, message: "$fieldConfig.fieldComment不能为空", trigger: "blur" }],
|
||||
#end
|
||||
#end
|
||||
label: "$fieldConfig.fieldComment",
|
||||
prop: "$fieldConfig.fieldName",
|
||||
attrs: {
|
||||
placeholder: "$fieldConfig.fieldComment"
|
||||
},
|
||||
#if($fieldConfig.isRequired == 1)
|
||||
rules: [{ required: true, message: "$fieldConfig.fieldComment不能为空", trigger: "blur" }],
|
||||
#end
|
||||
},
|
||||
#end
|
||||
#end
|
||||
#end
|
||||
#end
|
||||
#end
|
||||
#end
|
||||
],
|
||||
// 提交函数
|
||||
formAction: (data: ${entityName}Form) => {
|
||||
@@ -187,7 +336,22 @@ const modalConfig = {
|
||||
return ${entityName}API.create(data);
|
||||
}
|
||||
},
|
||||
};
|
||||
});
|
||||
|
||||
// 编辑配置
|
||||
const editModalConfig: IModalConfig<${entityName}Form> = reactive({
|
||||
permPrefix: "${moduleName}:${kebabCaseEntityName}",
|
||||
component: "drawer",
|
||||
drawer: {
|
||||
title: "编辑$!{entityComment}",
|
||||
size: 500,
|
||||
},
|
||||
pk: "id",
|
||||
formAction(data: any) {
|
||||
return ${entityName}API.update(data.id as string, data);
|
||||
},
|
||||
formItems: addModalConfig.formItems, // 复用新增的表单项
|
||||
});
|
||||
|
||||
// 处理操作按钮点击
|
||||
const handleOperateClick = (data: IObject) => {
|
||||
@@ -198,4 +362,9 @@ const handleOperateClick = (data: IObject) => {
|
||||
}
|
||||
};
|
||||
|
||||
// 处理工具栏按钮点击(删除等)
|
||||
const handleToolbarClick = (name: string) => {
|
||||
console.log(name);
|
||||
};
|
||||
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user