Commit 6879fcd94fd8bdec3a2767e08dc44d3a9fdbd578

Authored by YunaiV
Committed by &wxr
1 parent b024c716

改造代码生成器,支持多种前端模版

yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenFrontTypeEnum.java 0 → 100644
  1 +package cn.iocoder.yudao.module.infra.enums.codegen;
  2 +
  3 +import lombok.AllArgsConstructor;
  4 +import lombok.Getter;
  5 +
  6 +/**
  7 + * 代码生成的前端类型枚举
  8 + *
  9 + * @author 芋道源码
  10 + */
  11 +@AllArgsConstructor
  12 +@Getter
  13 +public enum CodegenFrontTypeEnum {
  14 +
  15 + VUE2(10), // Vue2 Element UI 标准模版
  16 + VUE3(20), // Vue3 Element Plus 标准模版
  17 + VUE3_SCHEMA(21), // Vue3 Element Plus Schema 模版
  18 + VUE3_VXE(22), // Vue3 VXE 模版
  19 + ;
  20 +
  21 + /**
  22 + * 类型
  23 + */
  24 + private final Integer type;
  25 +
  26 +}
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/codegen/config/CodegenProperties.java
1 1 package cn.iocoder.yudao.module.infra.framework.codegen.config;
2 2  
  3 +import cn.iocoder.yudao.module.infra.enums.codegen.CodegenFrontTypeEnum;
3 4 import lombok.Data;
4 5 import org.springframework.boot.context.properties.ConfigurationProperties;
5 6 import org.springframework.validation.annotation.Validated;
... ... @@ -25,4 +26,12 @@ public class CodegenProperties {
25 26 @NotEmpty(message = "数据库不能为空")
26 27 private Collection<String> dbSchemas;
27 28  
  29 + /**
  30 + * 代码生成的前端类型
  31 + *
  32 + * 枚举 {@link CodegenFrontTypeEnum#getType()}
  33 + */
  34 + @NotNull(message = "代码生成的前端类型不能为空")
  35 + private Integer frontType;
  36 +
28 37 }
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java
... ... @@ -23,9 +23,12 @@ import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
23 23 import cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum;
24 24 import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenColumnDO;
25 25 import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenTableDO;
  26 +import cn.iocoder.yudao.module.infra.enums.codegen.CodegenFrontTypeEnum;
26 27 import cn.iocoder.yudao.module.infra.enums.codegen.CodegenSceneEnum;
27 28 import cn.iocoder.yudao.module.infra.framework.codegen.config.CodegenProperties;
  29 +import com.google.common.collect.ImmutableTable;
28 30 import com.google.common.collect.Maps;
  31 +import com.google.common.collect.Table;
29 32 import org.springframework.stereotype.Component;
30 33  
31 34 import javax.annotation.PostConstruct;
... ... @@ -50,11 +53,12 @@ import static cn.hutool.core.text.CharSequenceUtil.*;
50 53 public class CodegenEngine {
51 54  
52 55 /**
53   - * 模板配置
  56 + * 后端的模板配置
  57 + *
54 58 * key:模板在 resources 的地址
55 59 * value:生成的路径
56 60 */
57   - private static final Map<String, String> TEMPLATES = MapUtil.<String, String>builder(new LinkedHashMap<>()) // 有序
  61 + private static final Map<String, String> SERVER_TEMPLATES = MapUtil.<String, String>builder(new LinkedHashMap<>()) // 有序
58 62 // Java module-biz Main
59 63 .put(javaTemplatePath("controller/vo/baseVO"), javaModuleImplVOFilePath("BaseVO"))
60 64 .put(javaTemplatePath("controller/vo/createReqVO"), javaModuleImplVOFilePath("CreateReqVO"))
... ... @@ -80,21 +84,31 @@ public class CodegenEngine {
80 84 javaModuleImplTestFilePath("service/${table.businessName}/${table.className}ServiceImplTest"))
81 85 // Java module-api Main
82 86 .put(javaTemplatePath("enums/errorcode"), javaModuleApiMainFilePath("enums/ErrorCodeConstants_手动操作"))
  87 + // SQL
  88 + .put("codegen/sql/sql.vm", "sql/sql.sql")
  89 + .put("codegen/sql/h2.vm", "sql/h2.sql")
  90 + .build();
  91 +
  92 + /**
  93 + * 后端的配置模版
  94 + *
  95 + * key1:UI 模版的类型 {@link CodegenFrontTypeEnum#getType()}
  96 + * key2:模板在 resources 的地址
  97 + * value:生成的路径
  98 + */
  99 + private static final Table<Integer, String, String> FRONT_TEMPLATES = ImmutableTable.<Integer, String, String>builder()
83 100 // Vue2
84   - .put(vueTemplatePath("views/index.vue"),
  101 + .put(CodegenFrontTypeEnum.VUE2.getType(), vueTemplatePath("views/index.vue"),
85 102 vueFilePath("views/${table.moduleName}/${classNameVar}/index.vue"))
86   - .put(vueTemplatePath("api/api.js"),
  103 + .put(CodegenFrontTypeEnum.VUE2.getType(), vueTemplatePath("api/api.js"),
87 104 vueFilePath("api/${table.moduleName}/${classNameVar}.js"))
88 105 // Vue3
89   - .put(vue3TemplatePath("views/index.vue"),
  106 + .put(CodegenFrontTypeEnum.VUE3.getType(), vue3TemplatePath("views/index.vue"),
90 107 vue3FilePath("views/${table.moduleName}/${classNameVar}/index.vue"))
91   - .put(vue3TemplatePath("views/data.ts"),
  108 + .put(CodegenFrontTypeEnum.VUE3.getType(), vue3TemplatePath("views/data.ts"),
92 109 vue3FilePath("views/${table.moduleName}/${classNameVar}/${classNameVar}.data.ts"))
93   - .put(vue3TemplatePath("api/api.ts"),
  110 + .put(CodegenFrontTypeEnum.VUE3.getType(), vue3TemplatePath("api/api.ts"),
94 111 vue3FilePath("api/${table.moduleName}/${classNameVar}/index.ts"))
95   - // SQL
96   - .put("codegen/sql/sql.vm", "sql/sql.sql")
97   - .put("codegen/sql/h2.vm", "sql/h2.sql")
98 112 .build();
99 113  
100 114 @Resource
... ... @@ -165,8 +179,9 @@ public class CodegenEngine {
165 179 bindingMap.put("permissionPrefix", table.getModuleName() + ":" + simpleClassNameStrikeCase);
166 180  
167 181 // 执行生成
168   - final Map<String, String> result = Maps.newLinkedHashMapWithExpectedSize(TEMPLATES.size()); // 有序
169   - TEMPLATES.forEach((vmPath, filePath) -> {
  182 + Map<String, String> templates = getTemplates();
  183 + Map<String, String> result = Maps.newLinkedHashMapWithExpectedSize(templates.size()); // 有序
  184 + templates.forEach((vmPath, filePath) -> {
170 185 filePath = formatFilePath(filePath, bindingMap);
171 186 String content = templateEngine.getTemplate(vmPath).render(bindingMap);
172 187 result.put(filePath, content);
... ... @@ -174,6 +189,13 @@ public class CodegenEngine {
174 189 return result;
175 190 }
176 191  
  192 + private Map<String, String> getTemplates() {
  193 + Map<String, String> templates = new LinkedHashMap<>();
  194 + templates.putAll(SERVER_TEMPLATES);
  195 + templates.putAll(FRONT_TEMPLATES.row(codegenProperties.getFrontType()));
  196 + return templates;
  197 + }
  198 +
177 199 private String formatFilePath(String filePath, Map<String, Object> bindingMap) {
178 200 filePath = StrUtil.replace(filePath, "${basePackage}",
179 201 getStr(bindingMap, "basePackage").replaceAll("\\.", "/"));
... ...
yudao-server/src/main/resources/application.yaml
... ... @@ -125,6 +125,7 @@ yudao:
125 125 codegen:
126 126 base-package: ${yudao.info.base-package}
127 127 db-schemas: ${spring.datasource.dynamic.datasource.master.name}
  128 + front-type: 20
128 129 error-code: # 错误码相关配置项
129 130 constants-class-list:
130 131 - cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants
... ...