ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-generator/src/main/resources/vm/java/sub-domain.java.vm | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-generator/src/main/resources/vm/vue/index.vue.vm | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-generator/src/main/resources/vm/vue/v3/index.vue.vm | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-ui/src/views/tool/gen/genInfoForm.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java
@@ -17,11 +17,6 @@ String TPL_TREE = "tree"; /** * 主å表ï¼å¢å æ¹æ¥ï¼ */ String TPL_SUB = "sub"; /** * æ ç¼ç åæ®µ */ String TREE_CODE = "treeCode"; ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java
@@ -1,15 +1,18 @@ package com.ruoyi.generator.domain; import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.common.constant.GenConstants; import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.utils.StringUtils; import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; import lombok.Data; import lombok.EqualsAndHashCode; import org.apache.commons.lang3.ArrayUtils; import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; import java.util.List; /** @@ -110,12 +113,6 @@ private GenTableColumn pkColumn; /** * åè¡¨ä¿¡æ¯ */ @TableField(exist = false) private GenTable subTable; /** * 表åä¿¡æ¯ */ @Valid @@ -167,14 +164,6 @@ */ @TableField(exist = false) private String parentMenuName; public boolean isSub() { return isSub(this.tplCategory); } public static boolean isSub(String tplCategory) { return tplCategory != null && StringUtils.equals(GenConstants.TPL_SUB, tplCategory); } public boolean isTree() { return isTree(this.tplCategory); ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java
@@ -210,8 +210,6 @@ menuIds.add(identifierGenerator.nextId(null).longValue()); } table.setMenuIds(menuIds); // 设置主åè¡¨ä¿¡æ¯ setSubTable(table); // 设置主é®åä¿¡æ¯ setPkColumn(table); VelocityInitializer.initVelocity(); @@ -254,8 +252,6 @@ public void generatorCode(String tableName) { // æ¥è¯¢è¡¨ä¿¡æ¯ GenTable table = baseMapper.selectGenTableByName(tableName); // 设置主åè¡¨ä¿¡æ¯ setSubTable(table); // 设置主é®åä¿¡æ¯ setPkColumn(table); @@ -360,8 +356,6 @@ menuIds.add(identifierGenerator.nextId(null).longValue()); } table.setMenuIds(menuIds); // 设置主åè¡¨ä¿¡æ¯ setSubTable(table); // 设置主é®åä¿¡æ¯ setPkColumn(table); @@ -405,12 +399,6 @@ throw new ServiceException("æ ç¶ç¼ç åæ®µä¸è½ä¸ºç©º"); } else if (StringUtils.isEmpty(paramsObj.getStr(GenConstants.TREE_NAME))) { throw new ServiceException("æ åç§°åæ®µä¸è½ä¸ºç©º"); } else if (GenConstants.TPL_SUB.equals(genTable.getTplCategory())) { if (StringUtils.isEmpty(genTable.getSubTableName())) { throw new ServiceException("å ³èå表ç表åä¸è½ä¸ºç©º"); } else if (StringUtils.isEmpty(genTable.getSubTableFkName())) { throw new ServiceException("åè¡¨å ³èçå¤é®åä¸è½ä¸ºç©º"); } } } } @@ -430,29 +418,7 @@ if (ObjectUtil.isNull(table.getPkColumn())) { table.setPkColumn(table.getColumns().get(0)); } if (GenConstants.TPL_SUB.equals(table.getTplCategory())) { for (GenTableColumn column : table.getSubTable().getColumns()) { if (column.isPk()) { table.getSubTable().setPkColumn(column); break; } } if (ObjectUtil.isNull(table.getSubTable().getPkColumn())) { table.getSubTable().setPkColumn(table.getSubTable().getColumns().get(0)); } } } /** * 设置主åè¡¨ä¿¡æ¯ * * @param table ä¸å¡è¡¨ä¿¡æ¯ */ public void setSubTable(GenTable table) { String subTableName = table.getSubTableName(); if (StringUtils.isNotEmpty(subTableName)) { table.setSubTable(baseMapper.selectGenTableByName(subTableName)); } } /** ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java
@@ -3,7 +3,6 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.Dict; import cn.hutool.core.util.ObjectUtil; import com.ruoyi.common.constant.GenConstants; import com.ruoyi.common.helper.DataBaseHelper; import com.ruoyi.common.utils.DateUtils; @@ -75,9 +74,6 @@ if (GenConstants.TPL_TREE.equals(tplCategory)) { setTreeVelocityContext(velocityContext, genTable); } if (GenConstants.TPL_SUB.equals(tplCategory)) { setSubVelocityContext(velocityContext, genTable); } return velocityContext; } @@ -105,23 +101,6 @@ if (paramsObj.containsKey(GenConstants.TREE_NAME)) { context.put("tree_name", paramsObj.get(GenConstants.TREE_NAME)); } } public static void setSubVelocityContext(VelocityContext context, GenTable genTable) { GenTable subTable = genTable.getSubTable(); String subTableName = genTable.getSubTableName(); String subTableFkName = genTable.getSubTableFkName(); String subClassName = genTable.getSubTable().getClassName(); String subTableFkClassName = StringUtils.convertToCamelCase(subTableFkName); context.put("subTable", subTable); context.put("subTableName", subTableName); context.put("subTableFkName", subTableFkName); context.put("subTableFkClassName", subTableFkClassName); context.put("subTableFkclassName", StringUtils.uncapitalize(subTableFkClassName)); context.put("subClassName", subClassName); context.put("subclassName", StringUtils.uncapitalize(subClassName)); context.put("subImportList", getImportList(genTable.getSubTable())); } /** @@ -153,9 +132,6 @@ templates.add("vm/vue/index.vue.vm"); } else if (GenConstants.TPL_TREE.equals(tplCategory)) { templates.add("vm/vue/index-tree.vue.vm"); } else if (GenConstants.TPL_SUB.equals(tplCategory)) { templates.add("vm/vue/index.vue.vm"); templates.add("vm/java/sub-domain.java.vm"); } return templates; } @@ -188,9 +164,7 @@ if (template.contains("bo.java.vm")) { fileName = StringUtils.format("{}/domain/bo/{}Bo.java", javaPath, className); } if (template.contains("sub-domain.java.vm") && StringUtils.equals(GenConstants.TPL_SUB, genTable.getTplCategory())) { fileName = StringUtils.format("{}/domain/{}.java", javaPath, genTable.getSubTable().getClassName()); } else if (template.contains("mapper.java.vm")) { if (template.contains("mapper.java.vm")) { fileName = StringUtils.format("{}/mapper/{}Mapper.java", javaPath, className); } else if (template.contains("service.java.vm")) { fileName = StringUtils.format("{}/service/I{}Service.java", javaPath, className); @@ -231,11 +205,7 @@ */ public static HashSet<String> getImportList(GenTable genTable) { List<GenTableColumn> columns = genTable.getColumns(); GenTable subGenTable = genTable.getSubTable(); HashSet<String> importList = new HashSet<String>(); if (ObjectUtil.isNotNull(subGenTable)) { importList.add("java.util.List"); } for (GenTableColumn column : columns) { if (!column.isSuperColumn() && GenConstants.TYPE_DATE.equals(column.getJavaType())) { importList.add("java.util.Date"); @@ -257,10 +227,6 @@ List<GenTableColumn> columns = genTable.getColumns(); Set<String> dicts = new HashSet<String>(); addDicts(dicts, columns); if (ObjectUtil.isNotNull(genTable.getSubTable())) { List<GenTableColumn> subColumns = genTable.getSubTable().getColumns(); addDicts(dicts, subColumns); } return StringUtils.join(dicts, ", "); } ruoyi-generator/src/main/resources/vm/java/sub-domain.java.vm
ÎļþÒÑɾ³ý ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
@@ -282,65 +282,6 @@ #end #end #end #if($table.sub) <el-divider content-position="center">${subTable.functionName}ä¿¡æ¯</el-divider> <el-row :gutter="10" class="mb8"> <el-col :span="1.5"> <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd${subClassName}">æ·»å </el-button> </el-col> <el-col :span="1.5"> <el-button type="danger" icon="el-icon-delete" size="mini" @click="handleDelete${subClassName}">å é¤</el-button> </el-col> </el-row> <el-table :data="${subclassName}List" :row-class-name="row${subClassName}Index" @selection-change="handle${subClassName}SelectionChange" ref="${subclassName}"> <el-table-column type="selection" width="50" align="center" /> <el-table-column label="åºå·" align="center" prop="index" width="50"/> #foreach($column in $subTable.columns) #set($javaField=$column.javaField) #set($parentheseIndex=$column.columnComment.indexOf("ï¼")) #if($parentheseIndex != -1) #set($comment=$column.columnComment.substring(0, $parentheseIndex)) #else #set($comment=$column.columnComment) #end #if($column.pk || $javaField == ${subTableFkclassName}) #elseif($column.list && $column.htmlType == "input") <el-table-column label="$comment" prop="${javaField}" width="150"> <template slot-scope="scope"> <el-input v-model="scope.row.$javaField" placeholder="请è¾å ¥$comment" /> </template> </el-table-column> #elseif($column.list && $column.htmlType == "datetime") <el-table-column label="$comment" prop="${javaField}" width="240"> <template slot-scope="scope"> <el-date-picker clearable v-model="scope.row.$javaField" type="date" value-format="yyyy-MM-dd" placeholder="è¯·éæ©$comment" /> </template> </el-table-column> #elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" != $column.dictType) <el-table-column label="$comment" prop="${javaField}" width="150"> <template slot-scope="scope"> <el-select v-model="scope.row.$javaField" placeholder="è¯·éæ©$comment"> <el-option v-for="dict in dict.type.$column.dictType" :key="dict.value" :label="dict.label" :value="dict.value" ></el-option> </el-select> </template> </el-table-column> #elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" == $column.dictType) <el-table-column label="$comment" prop="${javaField}" width="150"> <template slot-scope="scope"> <el-select v-model="scope.row.$javaField" placeholder="è¯·éæ©$comment"> <el-option label="è¯·éæ©åå ¸çæ" value="" /> </el-select> </template> </el-table-column> #end #end </el-table> #end </el-form> <div slot="footer" class="dialog-footer"> <el-button :loading="buttonLoading" type="primary" @click="submitForm">ç¡® å®</el-button> @@ -366,10 +307,6 @@ loading: true, // é䏿°ç» ids: [], #if($table.sub) // å表é䏿°æ® checked${subClassName}: [], #end // éå个ç¦ç¨ single: true, // éå¤ä¸ªç¦ç¨ @@ -380,10 +317,6 @@ total: 0, // ${functionName}è¡¨æ ¼æ°æ® ${businessName}List: [], #if($table.sub) // ${subTable.functionName}è¡¨æ ¼æ°æ® ${subclassName}List: [], #end // å¼¹åºå±æ é¢ title: "", // æ¯å¦æ¾ç¤ºå¼¹åºå± @@ -469,9 +402,6 @@ #end #end }; #if($table.sub) this.${subclassName}List = []; #end this.resetForm("form"); }, /** æç´¢æé®æä½ */ @@ -515,9 +445,6 @@ this.form.$column.javaField = this.form.${column.javaField}.split(","); #end #end #if($table.sub) this.${subclassName}List = response.data.${subclassName}List; #end this.open = true; this.title = "ä¿®æ¹${functionName}"; }); @@ -531,9 +458,6 @@ #if($column.htmlType == "checkbox") this.form.$column.javaField = this.form.${column.javaField}.join(","); #end #end #if($table.sub) this.form.${subclassName}List = this.${subclassName}List; #end if (this.form.${pkColumn.javaField} != null) { update${BusinessName}(this.form).then(response => { @@ -570,39 +494,6 @@ this.loading = false; }); }, #if($table.sub) /** ${subTable.functionName}åºå· */ row${subClassName}Index({ row, rowIndex }) { row.index = rowIndex + 1; }, /** ${subTable.functionName}æ·»å æé®æä½ */ handleAdd${subClassName}() { let obj = {}; #foreach($column in $subTable.columns) #if($column.pk || $column.javaField == ${subTableFkclassName}) #elseif($column.list && "" != $javaField) obj.$column.javaField = ""; #end #end this.${subclassName}List.push(obj); }, /** ${subTable.functionName}å é¤æé®æä½ */ handleDelete${subClassName}() { if (this.checked${subClassName}.length == 0) { this.#[[$modal]]#.msgError("请å éæ©è¦å é¤ç${subTable.functionName}æ°æ®"); } else { const ${subclassName}List = this.${subclassName}List; const checked${subClassName} = this.checked${subClassName}; this.${subclassName}List = ${subclassName}List.filter(function(item) { return checked${subClassName}.indexOf(item.index) == -1 }); } }, /** å¤éæ¡é䏿°æ® */ handle${subClassName}SelectionChange(selection) { this.checked${subClassName} = selection.map(item => item.index) }, #end /** å¯¼åºæé®æä½ */ handleExport() { this.download('${moduleName}/${businessName}/export', { ruoyi-generator/src/main/resources/vm/vue/v3/index.vue.vm
@@ -265,70 +265,6 @@ #end #end #end #if($table.sub) <el-divider content-position="center">${subTable.functionName}ä¿¡æ¯</el-divider> <el-row :gutter="10" class="mb8"> <el-col :span="1.5"> <el-button type="primary" icon="Plus" @click="handleAdd${subClassName}">æ·»å </el-button> </el-col> <el-col :span="1.5"> <el-button type="danger" icon="Delete" @click="handleDelete${subClassName}">å é¤</el-button> </el-col> </el-row> <el-table :data="${subclassName}List" :row-class-name="row${subClassName}Index" @selection-change="handle${subClassName}SelectionChange" ref="${subclassName}"> <el-table-column type="selection" width="50" align="center" /> <el-table-column label="åºå·" align="center" prop="index" width="50"/> #foreach($column in $subTable.columns) #set($javaField=$column.javaField) #set($parentheseIndex=$column.columnComment.indexOf("ï¼")) #if($parentheseIndex != -1) #set($comment=$column.columnComment.substring(0, $parentheseIndex)) #else #set($comment=$column.columnComment) #end #if($column.pk || $javaField == ${subTableFkclassName}) #elseif($column.list && $column.htmlType == "input") <el-table-column label="$comment" prop="${javaField}" width="150"> <template #default="scope"> <el-input v-model="scope.row.$javaField" placeholder="请è¾å ¥$comment" /> </template> </el-table-column> #elseif($column.list && $column.htmlType == "datetime") <el-table-column label="$comment" prop="${javaField}" width="240"> <template #default="scope"> <el-date-picker clearable v-model="scope.row.$javaField" type="date" value-format="YYYY-MM-DD" placeholder="è¯·éæ©$comment"> </el-date-picker> </template> </el-table-column> #elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" != $column.dictType) <el-table-column label="$comment" prop="${javaField}" width="150"> <template #default="scope"> <el-select v-model="scope.row.$javaField" placeholder="è¯·éæ©$comment"> <el-option v-for="dict in $column.dictType" :key="dict.value" :label="dict.label" :value="dict.value" ></el-option> </el-select> </template> </el-table-column> #elseif($column.list && ($column.htmlType == "select" || $column.htmlType == "radio") && "" == $column.dictType) <el-table-column label="$comment" prop="${javaField}" width="150"> <template #default="scope"> <el-select v-model="scope.row.$javaField" placeholder="è¯·éæ©$comment"> <el-option label="è¯·éæ©åå ¸çæ" value="" /> </el-select> </template> </el-table-column> #end #end </el-table> #end </el-form> <template #footer> <div class="dialog-footer"> @@ -350,17 +286,11 @@ #end const ${businessName}List = ref([]); #if($table.sub) const ${subclassName}List = ref([]); #end const open = ref(false); const buttonLoading = ref(false); const loading = ref(true); const showSearch = ref(true); const ids = ref([]); #if($table.sub) const checked${subClassName} = ref([]); #end const single = ref(true); const multiple = ref(true); const total = ref(0); @@ -444,9 +374,6 @@ #end #end }; #if($table.sub) ${subclassName}List.value = []; #end proxy.resetForm("${businessName}Ref"); } @@ -495,9 +422,6 @@ form.value.$column.javaField = form.value.${column.javaField}.split(","); #end #end #if($table.sub) ${subclassName}List.value = response.data.${subclassName}List; #end open.value = true; title.value = "ä¿®æ¹${functionName}"; }); @@ -512,9 +436,6 @@ #if($column.htmlType == "checkbox") form.value.$column.javaField = form.value.${column.javaField}.join(","); #end #end #if($table.sub) form.value.${subclassName}List = ${subclassName}List.value; #end if (form.value.${pkColumn.javaField} != null) { update${BusinessName}(form.value).then(response => { @@ -553,43 +474,6 @@ }); } #if($table.sub) /** ${subTable.functionName}åºå· */ function row${subClassName}Index({ row, rowIndex }) { row.index = rowIndex + 1; } /** ${subTable.functionName}æ·»å æé®æä½ */ function handleAdd${subClassName}() { let obj = {}; #foreach($column in $subTable.columns) #if($column.pk || $column.javaField == ${subTableFkclassName}) #elseif($column.list && "" != $javaField) obj.$column.javaField = ""; #end #end ${subclassName}List.value.push(obj); } /** ${subTable.functionName}å é¤æé®æä½ */ function handleDelete${subClassName}() { if (checked${subClassName}.value.length == 0) { proxy.#[[$modal]]#.msgError("请å éæ©è¦å é¤ç${subTable.functionName}æ°æ®"); } else { const ${subclassName}s = ${subclassName}List.value; const checked${subClassName}s = checked${subClassName}.value; ${subclassName}List.value = ${subclassName}s.filter(function(item) { return checked${subClassName}s.indexOf(item.index) == -1 }); } } /** å¤éæ¡é䏿°æ® */ function handle${subClassName}SelectionChange(selection) { checked${subClassName}.value = selection.map(item => item.index) } #end /** å¯¼åºæé®æä½ */ function handleExport() { proxy.download('${moduleName}/${businessName}/export', { ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm
@@ -4,11 +4,4 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="${packageName}.mapper.${ClassName}Mapper"> <resultMap type="${packageName}.domain.${ClassName}" id="${ClassName}Result"> #foreach ($column in $columns) <result property="${column.javaField}" column="${column.columnName}"/> #end </resultMap> </mapper> ruoyi-ui/src/views/tool/gen/genInfoForm.vue
@@ -7,7 +7,6 @@ <el-select v-model="info.tplCategory" @change="tplSelectChange"> <el-option label="å表ï¼å¢å æ¹æ¥ï¼" value="crud" /> <el-option label="æ 表ï¼å¢å æ¹æ¥ï¼" value="tree" /> <!-- <el-option label="主å表ï¼å¢å æ¹æ¥ï¼" value="sub" />--> </el-select> </el-form-item> </el-col>