diff --git a/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/CodeGenerator.java b/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/CodeGenerator.java index 96cd0483..0d2bfe69 100644 --- a/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/CodeGenerator.java +++ b/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/CodeGenerator.java @@ -49,11 +49,13 @@ public class CodeGenerator { .cache("user:preference:{}:{}", "用户偏好 ${type} ${userId}") .formatKeys("type", "userId") .vue("user", "preference") + .enableDrawerForm() + .enableRowSelection() .enums("type") .names("APP", "HOST") .values("label", "应用", "主机") - .values("value", 1) - .color(null, "green") + .values("value", 1, 2) + .color("blue", "green") .build(), }; // jdbc 配置 - 使用配置文件 diff --git a/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/engine/EnumMeta.java b/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/engine/EnumMeta.java new file mode 100644 index 00000000..c6ede45f --- /dev/null +++ b/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/engine/EnumMeta.java @@ -0,0 +1,35 @@ +package com.orion.ops.launch.generator.engine; + +import com.orion.lang.define.collect.MultiLinkedHashMap; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * vue 枚举 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2023/9/26 16:50 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class EnumMeta { + + /** + * 类名称 + */ + private String className; + + /** + * 备注 + */ + private String comment; + + /** + * 配置 + */ + private MultiLinkedHashMap info; + +} diff --git a/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/engine/VelocityTemplateEngine.java b/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/engine/VelocityTemplateEngine.java index 3b5c55d6..59357f88 100644 --- a/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/engine/VelocityTemplateEngine.java +++ b/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/engine/VelocityTemplateEngine.java @@ -31,8 +31,8 @@ import com.orion.lang.utils.reflect.BeanMap; import com.orion.lang.utils.reflect.Fields; import com.orion.ops.framework.common.constant.Const; import com.orion.ops.framework.common.constant.OrionOpsProConst; -import com.orion.ops.launch.generator.template.EnumMeta; import com.orion.ops.launch.generator.template.Table; +import com.orion.ops.launch.generator.template.VueEnum; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; @@ -325,7 +325,7 @@ public class VelocityTemplateEngine extends AbstractTemplateEngine { // 功能名称常量 beanMap.put("featureConst", VariableStyles.SPINE.toSerpentine(table.getFeature()).toUpperCase()); // 枚举 - this.setEnumMap(beanMap, tableInfo, table); + beanMap.put("enums", this.getEnumMap(beanMap, tableInfo, table)); objectMap.put("vue", beanMap); // 生成文件 @@ -391,34 +391,31 @@ public class VelocityTemplateEngine extends AbstractTemplateEngine { } /** - * 设置枚举 + * 获取枚举 * * @param beanMap beanMap * @param tableInfo tableInfo * @param table table + * @return enumMap */ - private void setEnumMap(BeanMap beanMap, TableInfo tableInfo, Table table) { - // 枚举注解 - Map enumComment = new HashMap<>(); + private Map getEnumMap(BeanMap beanMap, TableInfo tableInfo, Table table) { // 枚举值 - Map> enumMap = new LinkedHashMap<>(); - for (EnumMeta meta : table.getEnums()) { - meta = meta.clone(); + Map enumMap = new LinkedHashMap<>(); + for (VueEnum meta : table.getEnums()) { // 检查字段是否存在 - String originVariable = meta.getVariable(); + String variable = meta.getVariable(); TableField tableField = tableInfo.getFields() .stream() - .filter(s -> originVariable.equals(s.getName()) || originVariable.equals(s.getPropertyName())) + .filter(s -> variable.equals(s.getName()) || variable.equals(s.getPropertyName())) .findFirst() - .orElseThrow(() -> new RuntimeException("未查询到枚举映射字段 " + originVariable)); - // 转为大驼峰 - String enumName = Strings.firstUpper(tableField.getPropertyName()) + "Enum"; + .orElseThrow(() -> new RuntimeException("未查询到枚举映射字段 " + variable)); + // 设置枚举名称 + if (meta.getClassName() == null) { + meta.setClassName(Strings.firstUpper(tableField.getPropertyName()) + "Enum"); + } // 设置枚举注释 if (meta.getComment() == null) { - enumComment.put(enumName, Strings.def(tableField.getComment(), enumName)); - } else { - enumComment.put(enumName, meta.getComment()); - + meta.setComment(Strings.def(tableField.getComment(), meta.getClassName())); } // 设置枚举 MultiLinkedHashMap enumInfo = new MultiLinkedHashMap<>(); @@ -432,11 +429,9 @@ public class VelocityTemplateEngine extends AbstractTemplateEngine { enumInfo.put(name, field, value); } } - enumMap.put(enumName, enumInfo); + enumMap.put(tableField.getPropertyName(), new EnumMeta(meta.getClassName(), meta.getComment(), enumInfo)); } - // 设置到上下文 - beanMap.put("enums", enumMap); - beanMap.put("enumComment", enumComment); + return enumMap; } /** diff --git a/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/template/EnumsTemplate.java b/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/template/EnumsTemplate.java index ec46b874..6ae9cf27 100644 --- a/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/template/EnumsTemplate.java +++ b/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/template/EnumsTemplate.java @@ -16,18 +16,22 @@ import java.util.stream.Collectors; */ public class EnumsTemplate extends VueTemplate { - private final EnumMeta meta; + private final VueEnum vueEnum; public EnumsTemplate(Table table, String variable) { + this(table, variable, (String) null); + } + + public EnumsTemplate(Table table, String variable, String className) { super(table); - this.meta = new EnumMeta(variable); - table.enums.add(meta); + this.vueEnum = new VueEnum(variable, className); + table.enums.add(vueEnum); } public EnumsTemplate(Table table, String variable, Class> enumClass) { super(table); - this.meta = new EnumMeta(variable); - table.enums.add(meta); + this.vueEnum = new VueEnum(variable); + table.enums.add(vueEnum); this.parseEnumMeta(enumClass); } @@ -51,9 +55,21 @@ public class EnumsTemplate extends VueTemplate { .map(enumItem -> Fields.getFieldValue(enumItem, field)) .collect(Collectors.toList())) .collect(Collectors.toList()); - meta.names.addAll(names); - meta.fields.addAll(fields); - meta.values.addAll(values); + vueEnum.className = enumClass.getSimpleName(); + vueEnum.names.addAll(names); + vueEnum.fields.addAll(fields); + vueEnum.values.addAll(values); + } + + /** + * 设置类名 + * + * @param className className + * @return this + */ + public EnumsTemplate className(String className) { + vueEnum.className = className; + return this; } /** @@ -63,7 +79,7 @@ public class EnumsTemplate extends VueTemplate { * @return this */ public EnumsTemplate comment(String comment) { - meta.comment = comment; + vueEnum.comment = comment; return this; } @@ -74,7 +90,7 @@ public class EnumsTemplate extends VueTemplate { * @return this */ public EnumsTemplate names(String... names) { - meta.names.addAll(Lists.of(names)); + vueEnum.names.addAll(Lists.of(names)); return this; } @@ -85,8 +101,8 @@ public class EnumsTemplate extends VueTemplate { * @return this */ public EnumsTemplate values(String field, Object... values) { - meta.fields.add(field); - meta.values.add(Lists.of(values)); + vueEnum.fields.add(field); + vueEnum.values.add(Lists.of(values)); return this; } diff --git a/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/template/Table.java b/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/template/Table.java index 44931fe4..b7df27c7 100644 --- a/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/template/Table.java +++ b/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/template/Table.java @@ -108,7 +108,7 @@ public class Table { /** * 生成的枚举文件 */ - protected List enums; + protected List enums; protected Table() { this.cacheFormatKeys = new ArrayList<>(); diff --git a/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/template/EnumMeta.java b/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/template/VueEnum.java similarity index 63% rename from orion-ops-launch/src/main/java/com/orion/ops/launch/generator/template/EnumMeta.java rename to orion-ops-launch/src/main/java/com/orion/ops/launch/generator/template/VueEnum.java index 8f1ea122..af665f12 100644 --- a/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/template/EnumMeta.java +++ b/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/template/VueEnum.java @@ -13,7 +13,7 @@ import java.util.List; * @since 2023/9/26 13:53 */ @Data -public class EnumMeta { +public class VueEnum { /** * 替换的枚举字段 数据库/小驼峰 @@ -21,7 +21,12 @@ public class EnumMeta { protected String variable; /** - * 枚举注释 没有的话使用 variable.comment || variable + * 枚举类名 如果为空使用 field.propertyName + Enum + */ + protected String className; + + /** + * 枚举注释 如果为空使用 field.comment || className */ protected String comment; @@ -40,24 +45,25 @@ public class EnumMeta { */ protected List> values; - public EnumMeta(String variable) { + public VueEnum(String variable) { + this(variable, null); + } + + public VueEnum(String variable, String className) { + this.className = className; this.variable = variable; this.names = new ArrayList<>(); this.fields = new ArrayList<>(); this.values = new ArrayList<>(); } - public EnumMeta(String variable, String comment, List names, List fields, List> values) { + public VueEnum(String variable, String className, String comment, List names, List fields, List> values) { this.variable = variable; + this.className = className; this.comment = comment; this.names = names; this.fields = fields; this.values = values; } - @Override - public EnumMeta clone() { - return new EnumMeta(variable, comment, names, fields, values); - } - } diff --git a/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/template/VueTemplate.java b/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/template/VueTemplate.java index 77ff3511..f2a059b0 100644 --- a/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/template/VueTemplate.java +++ b/orion-ops-launch/src/main/java/com/orion/ops/launch/generator/template/VueTemplate.java @@ -73,6 +73,17 @@ public class VueTemplate extends Template { return new EnumsTemplate(table, variable); } + /** + * 设置枚举 + * + * @param variable 枚举字段 数据库/小驼峰 + * @param className className + * @return enums + */ + public EnumsTemplate enums(String variable, String className) { + return new EnumsTemplate(table, variable, className); + } + /** * 设置枚举 * diff --git a/orion-ops-launch/src/main/resources/templates/orion-vue-views-components-form-drawer.vue.vm b/orion-ops-launch/src/main/resources/templates/orion-vue-views-components-form-drawer.vue.vm index 70f9f36e..3dc6d7b8 100644 --- a/orion-ops-launch/src/main/resources/templates/orion-vue-views-components-form-drawer.vue.vm +++ b/orion-ops-launch/src/main/resources/templates/orion-vue-views-components-form-drawer.vue.vm @@ -20,18 +20,24 @@ #if("$field.propertyName" != "id") - #if("$field.propertyType" == "Integer" || "$field.propertyType" == "Long") + #if(${vue.enums.containsKey(${field.propertyName})}) + + #else + #if("$field.propertyType" == "Integer" || "$field.propertyType" == "Long") - #elseif("$field.propertyType" == "Date") + #elseif("$field.propertyType" == "Date") - #else - - #end + #else + + #end + #end #end #end diff --git a/orion-ops-launch/src/main/resources/templates/orion-vue-views-components-form-modal.vue.vm b/orion-ops-launch/src/main/resources/templates/orion-vue-views-components-form-modal.vue.vm index 618bb777..5f29285a 100644 --- a/orion-ops-launch/src/main/resources/templates/orion-vue-views-components-form-modal.vue.vm +++ b/orion-ops-launch/src/main/resources/templates/orion-vue-views-components-form-modal.vue.vm @@ -24,18 +24,24 @@ #if("$field.propertyName" != "id") - #if("$field.propertyType" == "Integer" || "$field.propertyType" == "Long") + #if(${vue.enums.containsKey(${field.propertyName})}) + + #else + #if("$field.propertyType" == "Integer" || "$field.propertyType" == "Long") - #elseif("$field.propertyType" == "Date") + #elseif("$field.propertyType" == "Date") - #else - - #end + #else + + #end + #end #end #end diff --git a/orion-ops-launch/src/main/resources/templates/orion-vue-views-components-table.vue.vm b/orion-ops-launch/src/main/resources/templates/orion-vue-views-components-table.vue.vm index 13f276dc..c47f4a6e 100644 --- a/orion-ops-launch/src/main/resources/templates/orion-vue-views-components-table.vue.vm +++ b/orion-ops-launch/src/main/resources/templates/orion-vue-views-components-table.vue.vm @@ -8,20 +8,27 @@ #foreach($field in ${table.fields}) - #if("$field.propertyType" == "Integer" || "$field.propertyType" == "Long") + #if(${vue.enums.containsKey(${field.propertyName})}) + + #else + #if("$field.propertyType" == "Integer" || "$field.propertyType" == "Long") - #elseif("$field.propertyType" == "Date") + #elseif("$field.propertyType" == "Date") - #else - - #end + #else + + #end + #end #end @@ -45,6 +52,7 @@ + #if($vue.enableRowSelection) + #end @@ -70,13 +79,23 @@ label-align="left" :loading="loading" :columns="columns" + #if($vue.enableRowSelection) :selected-keys="selectedKeys" :row-selection="rowSelection" + #end :data="tableRenderData" :pagination="pagination" @page-change="(page) => fetchTableData(page, pagination.pageSize)" @page-size-change="(size) => fetchTableData(pagination.current, size)" :bordered="false"> + #foreach($field in ${table.fields}) + #if(${vue.enums.containsKey(${field.propertyName})}) + + + #end + #end