Commit 9a5d7c864673b043e08934349e02a8c87e0f3d8a
1 parent
0e3904b6
Vue3 CRUD Schema 模版,部分提交
Showing
4 changed files
with
125 additions
and
140 deletions
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java
| ... | ... | @@ -110,8 +110,8 @@ public class CodegenEngine { |
| 110 | 110 | .put(CodegenFrontTypeEnum.VUE3.getType(), vue3TemplatePath("api/api.ts"), |
| 111 | 111 | vue3FilePath("api/${table.moduleName}/${classNameVar}/index.ts")) |
| 112 | 112 | // Vue3 Schema 模版 |
| 113 | -// .put(CodegenFrontTypeEnum.VUE3.getType(), vue3TemplatePath("views/data.ts"), | |
| 114 | -// vue3FilePath("views/${table.moduleName}/${classNameVar}/${classNameVar}.data.ts")) | |
| 113 | + .put(CodegenFrontTypeEnum.VUE3_SCHEMA.getType(), vue3SchemaTemplatePath("views/data.ts"), | |
| 114 | + vue3FilePath("views/${table.moduleName}/${classNameVar}/${classNameVar}.data.ts")) | |
| 115 | 115 | .build(); |
| 116 | 116 | |
| 117 | 117 | @Resource |
| ... | ... | @@ -264,6 +264,7 @@ public class CodegenEngine { |
| 264 | 264 | return "yudao-ui-${sceneEnum.basePackage}/" + // 顶级目录 |
| 265 | 265 | "src/" + path; |
| 266 | 266 | } |
| 267 | + | |
| 267 | 268 | private static String vue3TemplatePath(String path) { |
| 268 | 269 | return "codegen/vue3/" + path + ".vm"; |
| 269 | 270 | } |
| ... | ... | @@ -272,4 +273,8 @@ public class CodegenEngine { |
| 272 | 273 | return "yudao-ui-${sceneEnum.basePackage}-vue3/" + // 顶级目录 |
| 273 | 274 | "src/" + path; |
| 274 | 275 | } |
| 276 | + | |
| 277 | + private static String vue3SchemaTemplatePath(String path) { | |
| 278 | + return "codegen/vue3_schema/" + path + ".vm"; | |
| 279 | + } | |
| 275 | 280 | } | ... | ... |
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vxe/api/api.ts.vm renamed to yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_schema/api/api.ts.vm
| 1 | 1 | import request from '@/config/axios' |
| 2 | 2 | |
| 3 | 3 | export interface ${simpleClassName}VO { |
| 4 | -#foreach ($column in $columns) | |
| 5 | -#if ($column.createOperation || $column.updateOperation) | |
| 6 | -#if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer" || ${column.javaType.toLowerCase()} == "double" || ${column.javaType.toLowerCase()} == "bigdecimal") | |
| 7 | - ${column.javaField}: number | |
| 8 | -#elseif(${column.javaType.toLowerCase()} == "date" || ${column.javaType.toLowerCase()} == "localdatetime") | |
| 9 | - ${column.javaField}: Date | |
| 10 | -#else | |
| 11 | - ${column.javaField}: ${column.javaType.toLowerCase()} | |
| 12 | -#end | |
| 13 | -#end | |
| 14 | -#end | |
| 4 | + #foreach ($column in $columns) | |
| 5 | + #if ($column.createOperation || $column.updateOperation) | |
| 6 | + #if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer" || ${column.javaType.toLowerCase()} == "double" || ${column.javaType.toLowerCase()} == "bigdecimal") | |
| 7 | + ${column.javaField}: number | |
| 8 | + #elseif(${column.javaType.toLowerCase()} == "date" || ${column.javaType.toLowerCase()} == "localdatetime") | |
| 9 | + ${column.javaField}: Date | |
| 10 | + #else | |
| 11 | + ${column.javaField}: ${column.javaType.toLowerCase()} | |
| 12 | + #end | |
| 13 | + #end | |
| 14 | + #end | |
| 15 | 15 | } |
| 16 | 16 | |
| 17 | -export interface ${simpleClassName}PageReqVO extends PageParam { | |
| 18 | -#foreach ($column in $columns) | |
| 19 | -#if (${column.listOperation})##查询操作 | |
| 20 | -#if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer" || ${column.javaType.toLowerCase()} == "double" || ${column.javaType.toLowerCase()} == "bigdecimal") | |
| 21 | - ${column.javaField}?: number | |
| 22 | -#elseif(${column.javaType.toLowerCase()} == "date" || ${column.javaType.toLowerCase()} == "localdatetime") | |
| 23 | - ${column.javaField}?: Date[] | |
| 24 | -#else | |
| 25 | - ${column.javaField}?: ${column.javaType.toLowerCase()} | |
| 26 | -#end | |
| 27 | -#end | |
| 28 | -#end | |
| 29 | -} | |
| 30 | - | |
| 31 | -export interface ${simpleClassName}ExcelReqVO { | |
| 32 | -#foreach ($column in $columns) | |
| 33 | -#if (${column.listOperation})##查询操作 | |
| 34 | -#if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer" || ${column.javaType.toLowerCase()} == "double" || ${column.javaType.toLowerCase()} == "bigdecimal") | |
| 35 | - ${column.javaField}?: number | |
| 36 | -#elseif(${column.javaType.toLowerCase()} == "date" || ${column.javaType.toLowerCase()} == "localdatetime") | |
| 37 | - ${column.javaField}?: Date[] | |
| 38 | -#else | |
| 39 | - ${column.javaField}?: ${column.javaType.toLowerCase()} | |
| 40 | -#end | |
| 41 | -#end | |
| 42 | -#end | |
| 43 | -} | |
| 44 | -#set ($baseURL = "/${table.moduleName}/${simpleClassName_strikeCase}") | |
| 45 | - | |
| 46 | 17 | // 查询${table.classComment}列表 |
| 47 | -export const get${simpleClassName}PageApi = async (params: ${simpleClassName}PageReqVO) => { | |
| 18 | +export const get${simpleClassName}Page = async (params: ${simpleClassName}PageReqVO) => { | |
| 48 | 19 | return await request.get({ url: '${baseURL}/page', params }) |
| 49 | 20 | } |
| 50 | 21 | |
| 51 | 22 | // 查询${table.classComment}详情 |
| 52 | -export const get${simpleClassName}Api = async (id: number) => { | |
| 23 | +export const get${simpleClassName} = async (id: number) => { | |
| 53 | 24 | return await request.get({ url: '${baseURL}/get?id=' + id }) |
| 54 | 25 | } |
| 55 | 26 | |
| 56 | 27 | // 新增${table.classComment} |
| 57 | -export const create${simpleClassName}Api = async (data: ${simpleClassName}VO) => { | |
| 28 | +export const create${simpleClassName} = async (data: ${simpleClassName}VO) => { | |
| 58 | 29 | return await request.post({ url: '${baseURL}/create', data }) |
| 59 | 30 | } |
| 60 | 31 | |
| 61 | 32 | // 修改${table.classComment} |
| 62 | -export const update${simpleClassName}Api = async (data: ${simpleClassName}VO) => { | |
| 33 | +export const update${simpleClassName} = async (data: ${simpleClassName}VO) => { | |
| 63 | 34 | return await request.put({ url: '${baseURL}/update', data }) |
| 64 | 35 | } |
| 65 | 36 | |
| 66 | 37 | // 删除${table.classComment} |
| 67 | -export const delete${simpleClassName}Api = async (id: number) => { | |
| 38 | +export const delete${simpleClassName} = async (id: number) => { | |
| 68 | 39 | return await request.delete({ url: '${baseURL}/delete?id=' + id }) |
| 69 | 40 | } |
| 70 | 41 | |
| 71 | 42 | // 导出${table.classComment} Excel |
| 72 | -export const export${simpleClassName}Api = async (params: ${simpleClassName}ExcelReqVO) => { | |
| 43 | +export const export${simpleClassName}Api = async (params) => { | |
| 73 | 44 | return await request.download({ url: '${baseURL}/export-excel', params }) |
| 74 | 45 | } | ... | ... |
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vxe/views/data.ts.vm renamed to yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_schema/views/data.ts.vm
| 1 | -import type { VxeCrudSchema } from '@/hooks/web/useVxeCrudSchemas' | |
| 1 | +import type { CrudSchema } from '@/hooks/web/useCrudSchemas' | |
| 2 | 2 | const { t } = useI18n() // 国际化 |
| 3 | + | |
| 3 | 4 | // 表单校验 |
| 4 | 5 | export const rules = reactive({ |
| 5 | 6 | #foreach ($column in $columns) |
| ... | ... | @@ -9,98 +10,106 @@ export const rules = reactive({ |
| 9 | 10 | #end |
| 10 | 11 | #end |
| 11 | 12 | }) |
| 13 | + | |
| 12 | 14 | // CrudSchema |
| 13 | -const crudSchemas = reactive<VxeCrudSchema>({ | |
| 14 | - primaryKey: 'id', // 默认的主键ID | |
| 15 | - primaryTitle: t('common.index'), // 默认显示的值 | |
| 16 | - primaryType: 'seq', // 默认为seq,序号模式 | |
| 17 | - action: true, | |
| 18 | - actionWidth: '200', // 3个按钮默认200,如有删减对应增减即可 | |
| 19 | - columns: [ | |
| 20 | - #foreach($column in $columns) | |
| 21 | - #if ($column.listOperation || $column.listOperationResult || $column.createOperation || $column.updateOperation) | |
| 22 | - #set ($dictType = $column.dictType) | |
| 23 | - #if(!$column.primaryKey) | |
| 24 | - { | |
| 25 | - title: '${column.columnComment}', | |
| 26 | - field: '${column.javaField}', | |
| 27 | - #if (!$column.listOperationResult) | |
| 28 | - isTable: false, | |
| 29 | - #end | |
| 30 | - #if ("" != $dictType)## 有数据字典 | |
| 31 | - dictType: DICT_TYPE.$dictType.toUpperCase(), | |
| 32 | - #if (${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer") | |
| 33 | - dictClass: 'number', | |
| 34 | - #else | |
| 35 | - dictClass: 'string', | |
| 36 | - #end | |
| 37 | - #end | |
| 38 | - #if (!$column.createOperation && !$column.updateOperation) | |
| 39 | - isForm: false, | |
| 40 | - #elseif(!("" != $column.dictType)) | |
| 41 | - #if (${column.javaType.toLowerCase()} == "date" || ${column.javaType.toLowerCase()} == "localdatetime") | |
| 42 | - form: { | |
| 43 | - component: 'DatePicker', | |
| 44 | - componentProps: { | |
| 45 | - type: 'datetime', | |
| 46 | - valueFormat: 'x' | |
| 47 | - } | |
| 48 | - }, | |
| 49 | - #elseif($column.htmlType == "editor")## 文本编辑器 | |
| 50 | - form: { | |
| 51 | - component: 'Editor', | |
| 52 | - colProps: { | |
| 53 | - span: 24 | |
| 54 | - }, | |
| 55 | - componentProps: { | |
| 56 | - valueHtml: '' | |
| 57 | - } | |
| 58 | - }, | |
| 59 | - #elseif($column.htmlType == "textarea")## 文本框 | |
| 60 | - form: { | |
| 61 | - component: 'Input', | |
| 62 | - componentProps: { | |
| 63 | - type: 'textarea', | |
| 64 | - rows: 4 | |
| 65 | - }, | |
| 66 | - colProps: { | |
| 67 | - span: 24 | |
| 68 | - } | |
| 69 | - }, | |
| 70 | - #elseif(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer")## 数字类型 | |
| 71 | - form: { | |
| 72 | - component: 'InputNumber', | |
| 73 | - value: 0 | |
| 74 | - }, | |
| 75 | - #elseif($column.htmlType == "imageUpload")## 图片上传 | |
| 76 | - form: { | |
| 77 | - component: 'UploadImg' // 单图上传,多图为UploadImgs | |
| 78 | - }, | |
| 79 | - #elseif($column.htmlType == "fileUpload")## 图片上传 | |
| 80 | - form: { | |
| 81 | - component: 'UploadFile' | |
| 82 | - }, | |
| 83 | - #end | |
| 84 | - #end | |
| 85 | - #if ($column.listOperation) | |
| 86 | - #if($column.htmlType == "input") | |
| 87 | - isSearch: true, | |
| 88 | - #elseif("" != $dictType) | |
| 89 | - isSearch: true, | |
| 90 | - #elseif($column.htmlType == "datetime") | |
| 91 | - formatter: 'formatDate', | |
| 92 | - search: { | |
| 93 | - show: true, | |
| 94 | - itemRender: { | |
| 95 | - name: 'XDataTimePicker' | |
| 96 | - } | |
| 97 | - }, | |
| 98 | - #end | |
| 99 | - #end | |
| 15 | +const crudSchemas = reactive<CrudSchema[]>([ | |
| 16 | +#foreach($column in $columns) | |
| 17 | +#if ($column.listOperation || $column.listOperationResult || $column.createOperation || $column.updateOperation) | |
| 18 | +#set ($dictType = $column.dictType) | |
| 19 | +#set ($javaField = $column.javaField) | |
| 20 | +#set ($javaType = $column.javaType) | |
| 21 | + { | |
| 22 | + title: '${column.columnComment}', | |
| 23 | + field: '${column.javaField}', | |
| 24 | + #if (!$column.listOperationResult) | |
| 25 | + isTable: false, | |
| 26 | + #end | |
| 27 | + #if ("" != $dictType)## 有数据字典 | |
| 28 | + dictType: DICT_TYPE.$dictType.toUpperCase(), | |
| 29 | + #if ($javaType == "Integer" || $javaType == "Long" || $javaType == "Byte" || $javaType == "Short") | |
| 30 | + dictClass: 'number', | |
| 31 | + #elseif ($javaType == "String") | |
| 32 | + dictClass: 'string', | |
| 33 | + #elseif ($javaType == "Boolean") | |
| 34 | + dictClass: 'boolean', | |
| 35 | + #end | |
| 36 | + #end | |
| 37 | + #if ((!$column.createOperation && !$column.updateOperation) || $column.primaryKey) | |
| 38 | + isForm: false, | |
| 39 | + #else | |
| 40 | + #if($column.htmlType == "imageUpload")## 图片上传 | |
| 41 | + form: { | |
| 42 | + component: 'UploadImg' | |
| 43 | + }, | |
| 44 | + #elseif($column.htmlType == "fileUpload")## 文件上传 | |
| 45 | + form: { | |
| 46 | + component: 'UploadFile' | |
| 47 | + }, | |
| 48 | + #elseif($column.htmlType == "editor")## 文本编辑器 | |
| 49 | + form: { | |
| 50 | + component: 'Editor', | |
| 51 | + componentProps: { | |
| 52 | + valueHtml: '', | |
| 53 | + height: 200 | |
| 54 | + } | |
| 55 | + }, | |
| 56 | + #elseif($column.htmlType == "select")## 下拉框 | |
| 57 | + form: { | |
| 58 | + component: 'SelectV2' | |
| 59 | + }, | |
| 60 | + #elseif($column.htmlType == "checkbox")## 多选框 | |
| 61 | + form: { | |
| 62 | + component: 'Checkbox' | |
| 63 | + }, | |
| 64 | + #elseif($column.htmlType == "checkbox")## 单选框 | |
| 65 | + form: { | |
| 66 | + component: 'Radio' | |
| 100 | 67 | }, |
| 101 | - #end | |
| 68 | + #end | |
| 102 | 69 | #end |
| 70 | + #elseif(!("" != $column.dictType)) | |
| 71 | + #if (${column.javaType.toLowerCase()} == "date" || ${column.javaType.toLowerCase()} == "localdatetime") | |
| 72 | + form: { | |
| 73 | + component: 'DatePicker', | |
| 74 | + componentProps: { | |
| 75 | + type: 'datetime', | |
| 76 | + valueFormat: 'x' | |
| 77 | + } | |
| 78 | + }, | |
| 79 | + #elseif($column.htmlType == "textarea")## 文本框 | |
| 80 | + form: { | |
| 81 | + component: 'Input', | |
| 82 | + componentProps: { | |
| 83 | + type: 'textarea', | |
| 84 | + rows: 4 | |
| 85 | + }, | |
| 86 | + colProps: { | |
| 87 | + span: 24 | |
| 88 | + } | |
| 89 | + }, | |
| 90 | + #elseif(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer")## 数字类型 | |
| 91 | + form: { | |
| 92 | + component: 'InputNumber', | |
| 93 | + value: 0 | |
| 94 | + }, | |
| 103 | 95 | #end |
| 104 | - ] | |
| 105 | -}) | |
| 106 | -export const { allSchemas } = useVxeCrudSchemas(crudSchemas) | |
| 107 | 96 | \ No newline at end of file |
| 97 | + #end | |
| 98 | + #if ($column.listOperation) | |
| 99 | + #if($column.htmlType == "input") | |
| 100 | + isSearch: true, | |
| 101 | + #elseif("" != $dictType) | |
| 102 | + isSearch: true, | |
| 103 | + #elseif($column.htmlType == "datetime") | |
| 104 | + formatter: 'formatDate', | |
| 105 | + search: { | |
| 106 | + show: true, | |
| 107 | + itemRender: { | |
| 108 | + name: 'XDataTimePicker' | |
| 109 | + } | |
| 110 | + }, | |
| 111 | + #end | |
| 112 | + #end | |
| 113 | + }, | |
| 114 | +#end | |
| 115 | +]) | |
| 116 | +export const { allSchemas } = useCrudSchemas(crudSchemas) | ... | ... |
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vxe/views/index.vue.vm renamed to yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_schema/views/index.vue.vm