Bladeren bron

更新 代码生成器

18339543638 2 jaren geleden
bovenliggende
commit
fcc69343f7
22 gewijzigde bestanden met toevoegingen van 436 en 80 verwijderingen
  1. 4 1
      tr-modules/tr-module-gen/src/main/java/cn/tr/module/gen/modular/basic/entity/GenBasic.java
  2. 4 1
      tr-modules/tr-module-gen/src/main/java/cn/tr/module/gen/modular/basic/param/GenBasicAddParam.java
  3. 5 2
      tr-modules/tr-module-gen/src/main/java/cn/tr/module/gen/modular/basic/param/GenBasicEditParam.java
  4. 20 12
      tr-modules/tr-module-gen/src/main/java/cn/tr/module/gen/modular/basic/service/impl/GenBasicServiceImpl.java
  5. 17 17
      tr-modules/tr-module-gen/src/main/resources/backend/Controller.java.btl
  6. 2 2
      tr-modules/tr-module-gen/src/main/resources/backend/DTO.java.btl
  7. 3 3
      tr-modules/tr-module-gen/src/main/resources/backend/Mapper.java.btl
  8. 0 5
      tr-modules/tr-module-gen/src/main/resources/backend/Mapper.xml.btl
  9. 1 1
      tr-modules/tr-module-gen/src/main/resources/backend/PO.java.btl
  10. 2 2
      tr-modules/tr-module-gen/src/main/resources/backend/QueryDTO.java.btl
  11. 2 2
      tr-modules/tr-module-gen/src/main/resources/backend/Repository.java.btl
  12. 4 4
      tr-modules/tr-module-gen/src/main/resources/backend/Service.java.btl
  13. 8 8
      tr-modules/tr-module-gen/src/main/resources/backend/ServiceImpl.java.btl
  14. 99 0
      tr-modules/tr-module-gen/src/main/resources/frontend/Api.js.btl
  15. 126 0
      tr-modules/tr-module-gen/src/main/resources/frontend/data.ts.btl
  16. 71 0
      tr-modules/tr-module-gen/src/main/resources/frontend/formDrawer.vue.btl
  17. 57 0
      tr-modules/tr-module-gen/src/main/resources/frontend/viewDrawer.vue.btl
  18. 4 0
      tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/config/FileClientConfig.java
  19. 1 1
      tr-plugins/tr-spring-boot-starter-plugin-mp-enhance-actable/src/main/java/cn/tr/plugin/mp/enhance/actable/proxy/MybatisConfigurationProxy.java
  20. 1 15
      tr-plugins/tr-spring-boot-starter-plugin-mybatis/src/main/java/cn/tr/plugin/mybatis/TrMybatisAutoConfiguration.java
  21. 4 4
      tr-test/pom.xml
  22. 1 0
      tr-test/src/main/resources/application.yml

+ 4 - 1
tr-modules/tr-module-gen/src/main/java/cn/tr/module/gen/modular/basic/entity/GenBasic.java

@@ -51,7 +51,10 @@ public class GenBasic extends BasePO {
 
     /** 所属模块 */
     @ApiModelProperty(value = "所属模块", position = 6)
-    private String moduleName;
+    private String backendModuleName;
+
+    @ApiModelProperty(value = "前端所属模块", position = 5)
+    private String frontModuleName;
 
     /** 上级目录 */
     @ApiModelProperty(value = "上级目录", position = 7)

+ 4 - 1
tr-modules/tr-module-gen/src/main/java/cn/tr/module/gen/modular/basic/param/GenBasicAddParam.java

@@ -50,7 +50,10 @@ public class GenBasicAddParam {
 
     /** 所属模块 */
     @ApiModelProperty(value = "所属模块", required = true, position = 5)
-    private String module;
+    private String backendModuleName;
+
+    @ApiModelProperty(value = "前端所属模块", position = 5)
+    private String frontModuleName;
 
     /** 上级目录 */
     @ApiModelProperty(value = "上级目录", required = true, position = 6)

+ 5 - 2
tr-modules/tr-module-gen/src/main/java/cn/tr/module/gen/modular/basic/param/GenBasicEditParam.java

@@ -55,8 +55,11 @@ public class GenBasicEditParam {
 
     /** 所属模块 */
     @ApiModelProperty(value = "所属模块", position = 6)
-    @NotNull(message = "module不能为空")
-    private String moduleName;
+    @NotNull(message = "backendModuleName不能为空")
+    private String backendModuleName;
+
+    @ApiModelProperty(value = "所属模块", position = 6)
+    private String frontModuleName;
 
     /** 功能名 */
     @ApiModelProperty(value = "功能名", position = 8)

+ 20 - 12
tr-modules/tr-module-gen/src/main/java/cn/tr/module/gen/modular/basic/service/impl/GenBasicServiceImpl.java

@@ -64,7 +64,6 @@ import java.io.IOException;
 import java.sql.*;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
 /**
@@ -98,16 +97,17 @@ public class GenBasicServiceImpl extends ServiceImpl<GenBasicMapper, GenBasic> i
             JSONUtil.createObj().set("name", "Oracle.sql.btl"));
 
     private static final List<JSONObject> GEN_FRONT_FILE_LIST = CollectionUtil.newArrayList(
-            JSONUtil.createObj().set("name", "Api.js.btl").set("path", "api" + File.separator + MODULE_KEY),
-            JSONUtil.createObj().set("name", "form.vue.btl").set("path",  "views" + File.separator + MODULE_KEY),
-            JSONUtil.createObj().set("name", "index.vue.btl").set("path",  "views" + File.separator + MODULE_KEY));
+            JSONUtil.createObj().set("name", "Api.js.btl").set("path", "api" + File.separator ),
+            JSONUtil.createObj().set("name", "data.ts.btl").set("path",  "views" + File.separator ),
+            JSONUtil.createObj().set("name", "index.vue.btl").set("path",  "views" + File.separator ),
+            JSONUtil.createObj().set("name", "formDrawer.vue.btl").set("path",  "views" + File.separator),
+            JSONUtil.createObj().set("name", "viewDrawer.vue.btl").set("path",  "views" + File.separator));
 
     private static final List<JSONObject> GEN_BACKEND_FILE_LIST = CollectionUtil.newArrayList(
             JSONUtil.createObj().set("name", "Controller.java.btl").set("path", "controller"),
             JSONUtil.createObj().set("name", "PO.java.btl").set("path", "po"),
             JSONUtil.createObj().set("name", "Mapper.java.btl").set("path", "mapper"),
             JSONUtil.createObj().set("name", "Repository.java.btl").set("path", "repository"),
-            JSONUtil.createObj().set("name", "Mapper.xml.btl").set("path", "mapper" + File.separator + "mapping"),
             JSONUtil.createObj().set("name", "DTO.java.btl").set("path", "dto"),
             JSONUtil.createObj().set("name", "QueryDTO.java.btl").set("path", "dto"),
             JSONUtil.createObj().set("name", "Service.java.btl").set("path", "service"),
@@ -115,11 +115,11 @@ public class GenBasicServiceImpl extends ServiceImpl<GenBasicMapper, GenBasic> i
 
     private static final String SORT_CODE_KEY = "SORT_CODE";
 
-    private static final String CREATE_USER_KEY = "CREATE_USER";
+    private static final String CREATE_USER_KEY = "CREATE_BY";
 
     private static final String CREATE_TIME_KEY = "CREATE_TIME";
 
-    private static final String UPDATE_USER_KEY = "UPDATE_USER";
+    private static final String UPDATE_USER_KEY = "UPDATE_BY";
 
     private static final String UPDATE_TIME_KEY = "UPDATE_TIME";
 
@@ -424,7 +424,7 @@ public class GenBasicServiceImpl extends ServiceImpl<GenBasicMapper, GenBasic> i
                 templateFront.binding(bindingJsonObject);
                 String resultName = StrUtil.removeSuffix(fileTemplateName, ".btl");
                 if(fileTemplateName.equalsIgnoreCase("Api.js.btl")) {
-                    resultName = StrUtil.lowerFirst(genBasic.getClassName()) + resultName;
+                    resultName =genBasic.getFrontModuleName()+ StrUtil.upperFirst(genBasic.getBusName())+ resultName;
                     genBasicCodeFrontResult.setCodeFileName(resultName);
                     genBasicCodeFrontResult.setCodeFileWithPathName(genFrontBasicPath + fileTemplatePath + File.separator + resultName);
                 } else {
@@ -450,10 +450,10 @@ public class GenBasicServiceImpl extends ServiceImpl<GenBasicMapper, GenBasic> i
                 String genBackendBasicPath =null;
                 if (StrUtil.equals("Mapper.java.btl",fileTemplateName)) {
                     genBackendBasicPath = StrUtil.replace(genBasic.getPackageName(), StrUtil.DOT, File.separator) +
-                            File.separator + genBasic.getModuleName()+File.separator;
+                            File.separator + genBasic.getBackendModuleName()+File.separator;
                 }else {
                     genBackendBasicPath = StrUtil.replace(genBasic.getPackageName(), StrUtil.DOT, File.separator) +
-                            File.separator + genBasic.getModuleName() +
+                            File.separator + genBasic.getBackendModuleName() +
                             File.separator + genBasic.getBusName()+File.separator;
                 }
                 GenBasicPreviewResult.GenBasicCodeResult genBasicCodeBackendResult = new GenBasicPreviewResult.GenBasicCodeResult();
@@ -482,11 +482,15 @@ public class GenBasicServiceImpl extends ServiceImpl<GenBasicMapper, GenBasic> i
     public JSONObject getBindingJsonObject(GenBasic genBasic) {
         JSONObject bindingJsonObject = JSONUtil.createObj();
         // 代码模块名
-        bindingJsonObject.set("moduleName", genBasic.getModuleName());
+        bindingJsonObject.set("backendModuleName", genBasic.getBackendModuleName());
+        //前端代码模块
+        bindingJsonObject.set("frontModuleName", genBasic.getFrontModuleName());
         // 功能名
         bindingJsonObject.set("functionName", genBasic.getFunctionName());
         // 业务名
         bindingJsonObject.set("busName", genBasic.getBusName());
+        // 业务名
+        bindingJsonObject.set("busNameFirstUpper", StrUtil.upperFirst(genBasic.getBusName()));
         // 包名
         bindingJsonObject.set("packageName", genBasic.getPackageName());
         // 库名
@@ -520,7 +524,7 @@ public class GenBasicServiceImpl extends ServiceImpl<GenBasicMapper, GenBasic> i
         // 菜单组件
         bindingJsonObject.set("menuComponent", MODULE_KEY + StrUtil.SLASH + genBasic.getBusName() + StrUtil.SLASH + "index");
         // 模块ID
-        bindingJsonObject.set("moduleId", genBasic.getModuleName());
+        bindingJsonObject.set("moduleId", genBasic.getBackendModuleName());
         // 添加按钮ID
         bindingJsonObject.set("addButtonId", IdWorker.getIdStr());
         // 编辑按钮ID
@@ -602,6 +606,10 @@ public class GenBasicServiceImpl extends ServiceImpl<GenBasicMapper, GenBasic> i
                     configItem.set("fieldNameCamelCaseFirstUpper", StrUtil.upperFirst(StrUtil.toCamelCase(genConfig.getFieldName().toLowerCase())));
                     // 字段注释
                     configItem.set("fieldRemark", genConfig.getFieldRemark());
+                    //主键
+                    if (GenYesNoEnum.Y.getValue().equals(genConfig.getIsTableKey())) {
+                        bindingJsonObject.set("id", StrUtil.toCamelCase(genConfig.getFieldName().toLowerCase()));
+                    }
                     // 是否需要自动插入
                     configItem.set("needAutoInsert", CREATE_USER_KEY.equalsIgnoreCase(genConfig.getFieldName()) ||
                             CREATE_TIME_KEY.equalsIgnoreCase(genConfig.getFieldName()));

+ 17 - 17
tr-modules/tr-module-gen/src/main/resources/backend/Controller.java.btl

@@ -1,4 +1,4 @@
-package ${packageName}.${moduleName}.${busName}.controller;
+package ${packageName}.${backendModuleName}.${busName}.controller;
 
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import cn.dev33.satoken.annotation.SaCheckPermission;
@@ -13,9 +13,9 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
-import ${packageName}.${moduleName}.${busName}.dto.${className}DTO;
-import ${packageName}.${moduleName}.${busName}.service.${className}Service;
-import ${packageName}.${moduleName}.${busName}.dto.${className}QueryDTO;
+import ${packageName}.${backendModuleName}.${busName}.dto.${className}DTO;
+import ${packageName}.${backendModuleName}.${busName}.service.${className}Service;
+import ${packageName}.${backendModuleName}.${busName}.dto.${className}QueryDTO;
 import java.util.*;
 import cn.tr.plugin.mybatis.base.BaseController;
 import org.springframework.web.bind.annotation.*;
@@ -26,50 +26,50 @@ import org.springframework.web.bind.annotation.*;
  * @date ${genTime}
  */
 @Api(tags = "${functionName}控制器")
-@RestController("/${moduleName}/${busName}")
+@RestController("/${backendModuleName}/${busName}")
 @AllArgsConstructor
 public class ${className}Controller extends BaseController{
 
     private final ${className}Service ${classNameFirstLower}Service;
 
     @ApiOperationSupport(author = "${authorName}",order = 1)
-    @ApiOperation(value="根据条件查询${functionName}",notes = "权限: ${moduleName}:${busName}:query")
+    @ApiOperation(value="根据条件查询${functionName}",notes = "权限: ${backendModuleName}:${busName}:query")
     @GetMapping("/query/page")
-    @SaCheckPermission("${moduleName}:${busName}:query")
+    @SaCheckPermission("${backendModuleName}:${busName}:query")
     public CommonResult<List<${className}DTO>> selectList(${className}QueryDTO query) {
         startPage();
         return CommonResult.success(${classNameFirstLower}Service.select${className}List(query));
     }
 
     @ApiOperationSupport(author = "${authorName}",order = 2)
-    @ApiOperation(value = "根据id查询${functionName}",notes = "权限: ${moduleName}:${busName}:query")
+    @ApiOperation(value = "根据id查询${functionName}",notes = "权限: ${backendModuleName}:${busName}:query")
     @GetMapping("/detail/{id}")
-    @SaCheckPermission("${moduleName}:${busName}:query")
+    @SaCheckPermission("${backendModuleName}:${busName}:query")
     public CommonResult<${className}DTO> findById(@PathVariable("id") String id){
         return CommonResult.success(${classNameFirstLower}Service.select${className}ById(id));
     }
 
     @ApiOperationSupport(author = "${authorName}",order = 3)
-    @ApiOperation(value="添加${functionName}",notes = "权限: ${moduleName}:${busName}:add")
+    @ApiOperation(value="添加${functionName}",notes = "权限: ${backendModuleName}:${busName}:add")
     @PostMapping("/add")
-    @SaCheckPermission("${moduleName}:${busName}:add")
+    @SaCheckPermission("${backendModuleName}:${busName}:add")
     public CommonResult<Boolean> add(@RequestBody@Validated(Insert.class) ${className}DTO source) {
         return CommonResult.success(${classNameFirstLower}Service.insert${className}(source));
     }
 
     @ApiOperationSupport(author = "${authorName}",order = 4)
-    @ApiOperation(value="编辑${functionName}",notes = "权限: ${moduleName}:${busName}:edit")
+    @ApiOperation(value="通过主键id编辑${functionName}",notes = "权限: ${backendModuleName}:${busName}:edit")
     @PostMapping("/edit")
-    @SaCheckPermission("${moduleName}:${busName}:edit")
+    @SaCheckPermission("${backendModuleName}:${busName}:edit")
     public CommonResult<Boolean> edit(@RequestBody@Validated(Update.class) ${className}DTO source) {
         return CommonResult.success(${classNameFirstLower}Service.update${className}ById(source));
     }
 
     @ApiOperationSupport(author = "${authorName}",order = 5)
-    @ApiOperation(value="删除${functionName}",notes = "权限: ${moduleName}:${busName}:del")
-    @PostMapping("/deleteByIds")
-    @SaCheckPermission("${moduleName}:${busName}:del")
+    @ApiOperation(value="删除${functionName}",notes = "权限: ${backendModuleName}:${busName}:remove")
+    @PostMapping("/removeByIds")
+    @SaCheckPermission("${backendModuleName}:${busName}:remove")
     public CommonResult<Integer> delete(@RequestBody Collection<String> ids) {
-        return CommonResult.success(${classNameFirstLower}Service.delete${className}ByIds(ids));
+        return CommonResult.success(${classNameFirstLower}Service.remove{className}ByIds(ids));
     }
 }

+ 2 - 2
tr-modules/tr-module-gen/src/main/resources/backend/DTO.java.btl

@@ -1,4 +1,4 @@
-package ${packageName}.${moduleName}.${busName}.dto;
+package ${packageName}.${backendModuleName}.${busName}.dto;
 
 import cn.tr.plugin.mybatis.pojo.BaseDTO;
 import lombok.EqualsAndHashCode;
@@ -17,7 +17,7 @@ import java.util.*;
  * @date ${genTime}
  **/
 @Data
-@ApiModel("${functionName}")
+@ApiModel("${functionName}传输对象")
 @EqualsAndHashCode(callSuper = true)
 @ToString
 public class ${className}DTO extends BaseDTO  {

+ 3 - 3
tr-modules/tr-module-gen/src/main/resources/backend/Mapper.java.btl

@@ -1,7 +1,7 @@
-package  ${packageName}.${moduleName}.mapper.${busName};
+package  ${packageName}.${backendModuleName}.mapper.${busName};
 
-import ${packageName}.${moduleName}.${busName}.po.${className}PO;
-import ${packageName}.${moduleName}.${busName}.dto.${className}DTO;
+import ${packageName}.${backendModuleName}.${busName}.po.${className}PO;
+import ${packageName}.${backendModuleName}.${busName}.dto.${className}DTO;
 import org.mapstruct.Mapper;
 import org.mapstruct.factory.Mappers;
 

+ 0 - 5
tr-modules/tr-module-gen/src/main/resources/backend/Mapper.xml.btl

@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="${packageName}.${moduleName}.modular.${busName}.mapper.${className}Mapper">
-
-</mapper>

+ 1 - 1
tr-modules/tr-module-gen/src/main/resources/backend/PO.java.btl

@@ -1,4 +1,4 @@
-package ${packageName}.${moduleName}.${busName}.po;
+package ${packageName}.${backendModuleName}.${busName}.po;
 
 <% if(isTenant) { %>
 import cn.tr.plugin.mybatis.pojo.TenantPO;   <% } else { %>

+ 2 - 2
tr-modules/tr-module-gen/src/main/resources/backend/QueryDTO.java.btl

@@ -1,4 +1,4 @@
-package ${packageName}.${moduleName}.${busName}.dto;
+package ${packageName}.${backendModuleName}.${busName}.dto;
 
 import lombok.ToString;
 import io.swagger.annotations.ApiModel;
@@ -13,7 +13,7 @@ import java.util.*;
  * @date ${genTime}
  **/
 @Data
-@ApiModel("${functionName}")
+@ApiModel("${functionName}查询参数")
 @ToString
 public class ${className}QueryDTO  {
     private static final long serialVersionUID = 1L;

+ 2 - 2
tr-modules/tr-module-gen/src/main/resources/backend/Repository.java.btl

@@ -1,11 +1,11 @@
-package ${packageName}.${moduleName}.${busName}.repository;
+package ${packageName}.${backendModuleName}.${busName}.repository;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 import java.util.*;
-import ${packageName}.${moduleName}.${busName}.po.${className}PO;
+import ${packageName}.${backendModuleName}.${busName}.po.${className}PO;
 /**
  * ${functionName}Mapper接口
  *

+ 4 - 4
tr-modules/tr-module-gen/src/main/resources/backend/Service.java.btl

@@ -1,7 +1,7 @@
-package ${packageName}.${moduleName}.${busName}.service;
+package ${packageName}.${backendModuleName}.${busName}.service;
 
-import ${packageName}.${moduleName}.${busName}.dto.${className}DTO;
-import ${packageName}.${moduleName}.${busName}.dto.${className}QueryDTO;
+import ${packageName}.${backendModuleName}.${busName}.dto.${className}DTO;
+import ${packageName}.${backendModuleName}.${busName}.dto.${className}QueryDTO;
 import java.util.*;
 
 /**
@@ -50,5 +50,5 @@ public interface ${className}Service{
      * @author ${authorName}
      * @date   ${genTime}
      */
-    int delete${className}ByIds(Collection<String> ids);
+    int remove{className}ByIds(Collection<String> ids);
 }

+ 8 - 8
tr-modules/tr-module-gen/src/main/resources/backend/ServiceImpl.java.btl

@@ -1,4 +1,4 @@
-package ${packageName}.${moduleName}.${busName}.service.impl;
+package ${packageName}.${backendModuleName}.${busName}.service.impl;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -7,13 +7,13 @@ import cn.hutool.core.util.*;
 import cn.tr.plugin.mybatis.pojo.BetweenQuery;
 import org.springframework.transaction.annotation.Transactional;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import ${packageName}.${moduleName}.${busName}.repository.${className}Repository;
-import ${packageName}.${moduleName}.${busName}.po.${className}PO;
-import ${packageName}.${moduleName}.${busName}.dto.${className}DTO;
-import ${packageName}.${moduleName}.${busName}.dto.${className}QueryDTO;
+import ${packageName}.${backendModuleName}.${busName}.repository.${className}Repository;
+import ${packageName}.${backendModuleName}.${busName}.po.${className}PO;
+import ${packageName}.${backendModuleName}.${busName}.dto.${className}DTO;
+import ${packageName}.${backendModuleName}.${busName}.dto.${className}QueryDTO;
 import java.util.*;
-import ${packageName}.${moduleName}.${busName}.service.${className}Service;
-import ${packageName}.${moduleName}.mapper.${className}Mapper;
+import ${packageName}.${backendModuleName}.${busName}.service.${className}Service;
+import ${packageName}.${backendModuleName}.mapper.${className}Mapper;
 /**
  * ${functionName}Service接口实现类
  *
@@ -116,7 +116,7 @@ query.get${configList[i].fieldNameCamelCaseFirstUpper}())
     */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public int delete${className}ByIds(Collection<String> ids){
+    public int remove${className}ByIds(Collection<String> ids){
         return baseRepository.deleteBatchIds(ids);
     };
 }

+ 99 - 0
tr-modules/tr-module-gen/src/main/resources/frontend/Api.js.btl

@@ -0,0 +1,99 @@
+import { defHttp } from '/@/utils/http/axios';
+import { setParams } from '/@/utils/index';
+
+enum Api {
+${frontModuleName}${busNameFirstUpper}QueryPage = '/${backendModuleName}/${busName}/query/page',
+${frontModuleName}${busNameFirstUpper}Detail = '/${backendModuleName}/${busName}/detail',
+${frontModuleName}${busNameFirstUpper}Add = '/${backendModuleName}/${busName}/add',
+${frontModuleName}${busNameFirstUpper}Edit = '/${backendModuleName}/${busName}/edit',
+${frontModuleName}${busNameFirstUpper}Remove = '/${backendModuleName}/${busName}/removeByIds',
+}
+
+/**
+*
+* @author ${authorName}
+* @date ${genTime}
+* @description: 根据条件查询${functionName}列表,权限 - ${backendModuleName}:${busName}:query
+* @method: POST
+* @param:
+<% for(var i = 0; i < configList.~size; i++) { %>
+<% if(configList[i].queryWhether!=null && configList[i].queryWhether ) { %>
+*       {${configList[i].fieldJavaType}}  ${configList[i].fieldNameCamelCase}  ${configList[i].queryType}   ${configList[i].fieldRemark}
+<% } %>
+<% } %>
+* @return:
+<% for(var i = 0; i < configList.~size; i++) { %>
+<% if(configList[i].fieldNameCamelCase!= "createTime" && configList[i].fieldNameCamelCase != "createBy" && configList[i].fieldNameCamelCase != "updateTime" &&configList[i].fieldNameCamelCase != "updateBy" && configList[i].fieldNameCamelCase != "tenantId"  && configList[i].fieldNameCamelCase!= "deleted" && configList[i].whetherTable) {%>
+*       {${configList[i].fieldJavaType}}  ${configList[i].fieldNameCamelCase}  ${configList[i].fieldRemark}
+<% } %>
+<% } %>
+*/
+
+export const ${frontModuleName}${busNameFirstUpper}QueryPage = (params?: object) => {
+return defHttp.post({ url: Api.${frontModuleName}${busNameFirstUpper}QueryPage, params: setParams(params) });
+};
+/**
+*
+* @author ${authorName}
+* @date ${genTime}
+* @description: 根据id查询${functionName}详细信息,权限 - ${backendModuleName}:${busName}:query
+* @method: GET
+* @param:  id ${functionName}主键id
+* @return:
+<% for(var i = 0; i < configList.~size; i++) { %>
+<% if(configList[i].fieldNameCamelCase!= "createTime" && configList[i].fieldNameCamelCase != "createBy" && configList[i].fieldNameCamelCase != "updateTime" &&configList[i].fieldNameCamelCase != "updateBy" && configList[i].fieldNameCamelCase != "tenantId"  && configList[i].fieldNameCamelCase!= "deleted" && configList[i].whetherTable) {%>
+*       {${configList[i].fieldJavaType}}  ${configList[i].fieldNameCamelCase}  ${configList[i].fieldRemark}
+<% } %>
+<% } %>
+*/
+export const ${frontModuleName}${busNameFirstUpper}Detail = (id: string) => {
+return defHttp.get({ url: Api.${frontModuleName}${busNameFirstUpper}Detail + '/' + id });
+};
+
+/**
+*
+* @author ${authorName}
+* @date ${genTime}
+* @description: 添加${functionName},权限 - ${backendModuleName}:${busName}:add
+* @method: POST
+* @param:
+<% for(var i = 0; i < configList.~size; i++) { %>
+<% if(configList[i].fieldNameCamelCase!= "createTime" && configList[i].fieldNameCamelCase != "createBy" && configList[i].fieldNameCamelCase != "updateTime" &&configList[i].fieldNameCamelCase != "updateBy" && configList[i].fieldNameCamelCase != "tenantId"  && configList[i].fieldNameCamelCase!= "deleted" && configList[i].whetherAddUpdate) {%>
+*       {${configList[i].fieldJavaType}}  ${configList[i].fieldNameCamelCase}  ${configList[i].fieldRemark}
+<% } %>
+<% } %>
+* @return:
+*       0 添加失败
+*       1 添加成功
+*/
+export const ${frontModuleName}${busNameFirstUpper}Add = (params?: object) => {
+return defHttp.post({ url: Api.${frontModuleName}${busNameFirstUpper}Add, params: params });
+};
+
+/**
+*
+* @author ${authorName}
+* @date ${genTime}
+* @description: 通过主键id编辑${functionName},权限 - ${backendModuleName}:${busName}:edit
+* @method: POST
+* @param:
+<% for(var i = 0; i < configList.~size; i++) { %>
+<% if(configList[i].fieldNameCamelCase!= "createTime" && configList[i].fieldNameCamelCase != "createBy" && configList[i].fieldNameCamelCase != "updateTime" &&configList[i].fieldNameCamelCase != "updateBy" && configList[i].fieldNameCamelCase != "tenantId"  && configList[i].fieldNameCamelCase!= "deleted" && configList[i].whetherAddUpdate) {%>
+*       {${configList[i].fieldJavaType}}  ${configList[i].fieldNameCamelCase}  ${configList[i].fieldRemark}
+<% } %>
+<% } %>
+* @return:
+*       0 编辑失败
+*       1 编辑成功
+*/
+export const /${backendModuleName}/${busName}/edit = (params?: object) => {
+return defHttp.post({ url: Api.${frontModuleName}${busNameFirstUpper}Edit, params: params });
+};
+
+/**
+* @description: 删除,权限 - ${backendModuleName}:${busName}:remove
+* @method: POST
+*/
+export const ${frontModuleName}${busNameFirstUpper}Remove = (params: Array<string | number>) => {
+    return defHttp.post({ url: Api.${frontModuleName}${busNameFirstUpper}Remove, params: params });
+};

+ 126 - 0
tr-modules/tr-module-gen/src/main/resources/frontend/data.ts.btl

@@ -0,0 +1,126 @@
+import { listDictModel } from '/@/api/common';
+import { DescItem } from '/@/components/Description';
+import { BasicColumn, FormSchema } from '/@/components/Table';
+import { radioBoolean } from '/@/utils/filters';
+
+export const columns: BasicColumn[] = [
+<% for(var i = 0; i < configList.~size; i++) { %>
+<% if(configList[i].fieldNameCamelCase != "createBy" &&configList[i].fieldNameCamelCase != "updateBy" && configList[i].fieldNameCamelCase != "tenantId"  && configList[i].fieldNameCamelCase!= "deleted"  && configList[i].whetherTable) {%>
+    {
+    title: '${configList[i].fieldRemark}',
+    dataIndex: '${configList[i].fieldNameCamelCase}',
+    },
+<% } %>
+<% } %>
+];
+
+// 表单列定义
+export const searchFormSchema: FormSchema[] = [
+<% for(var i = 0; i < configList.~size; i++) { %>
+<% if(configList[i].fieldNameCamelCase != "createBy" &&configList[i].fieldNameCamelCase != "updateBy" && configList[i].fieldNameCamelCase != "tenantId"  && configList[i].fieldNameCamelCase!= "deleted"  && configList[i].queryWhether) {%>
+    {
+    label: '${configList[i].fieldRemark}',
+    field: '${configList[i].fieldNameCamelCase}',
+    <% if(configList[i].effectType == "input"){  %>
+    component: 'Input',
+    componentProps: {
+    placeholder: '请输入${configList[i].fieldRemark}',
+    }
+    <% }  %>
+    <% if(configList[i].effectType == "inputTextArea"){  %>
+    component: 'InputTextArea',
+    componentProps: {
+    placeholder: '请输入${configList[i].fieldRemark}',
+    }
+    <% }  %>
+    <% if(configList[i].effectType == "inputNumber"){  %>
+    component: 'InputNumber',
+    componentProps: {
+    placeholder: '请输入${configList[i].fieldRemark}',
+    }
+    <% }  %>
+    <% if(configList[i].effectType == "select"){  %>
+    component: 'Select',
+    componentProps: {
+        options: [{ label: '', value: '' }],
+    },
+    <% }  %>
+    <% if(configList[i].effectType == "apiSelect"){  %>
+    component: 'ApiSelect',
+    componentProps: {
+    api: listDictModel,
+    params: {
+        dictCode: '${configList[i].dictTypeCode}',
+        },
+    }
+    <% }  %>
+    <% if(configList[i].effectType == "switch"){  %>
+    component: 'Switch',
+    componentProps: {
+        options: radioBoolean,
+    }
+    <% }  %>
+    <% if(configList[i].effectType == "radioGroup"){  %>
+    component: 'RadioGroup',
+    required: true,
+    componentProps: {
+        options: radioBoolean,
+    }
+    <% }  %>
+    <% if(configList[i].effectType == "apiRadioGroup"){  %>
+    component: 'ApiRadioGroup',
+    componentProps: {
+        api: listDictModel,
+        params: {
+            dictCode: '${configList[i].dictTypeCode}',
+        }
+    }
+    <% }  %>
+    <% if(configList[i].effectType == "checkboxGroup"){  %>
+    component: 'CheckboxGroup',
+    componentProps: {
+        options: [{label: '选项1',value: '1',}]
+    }
+    <% }  %>
+    <% if(configList[i].effectType == "datePicker"){  %>
+    component: 'DatePicker',
+    componentProps: {
+        placeholder: '请选择时间',
+        format: 'YYYY-MM-DD HH:mm:ss',
+        showTime: { format: 'YYYY-MM-DD HH:mm:ss' },
+    }
+    <% }  %>
+    <% if(configList[i].effectType == "upload"){  %>
+    component: 'Input',
+    slot: 'upload',
+    componentProps: {
+        placeholder: '请上传图片',
+    },
+    <% }  %>
+    <% if(configList[i].effectType == "textEditor"){  %>
+    component: 'textEditor',
+    componentProps: ({ formModel }) => {
+    return {
+        height: 300,
+        onChange: (e) => {
+        formModel.${configList[i].fieldNameCamelCase} = e;
+            },
+        };
+    }
+    <% }  %>
+    },
+<% }  %>
+<% }  %>
+];
+
+// 表单详情查看
+export const viewSchema: DescItem[] = [
+<% for(var i = 0; i < configList.~size; i++) { %>
+<% if(configList[i].fieldNameCamelCase != "createBy" &&configList[i].fieldNameCamelCase != "updateBy" && configList[i].fieldNameCamelCase != "tenantId"  && configList[i].fieldNameCamelCase!= "deleted" ) {%>
+    {
+        label: '${configList[i].fieldRemark}',
+        field: '${configList[i].fieldNameCamelCase}',
+    },
+<% } %>
+<% } %>
+];

+ 71 - 0
tr-modules/tr-module-gen/src/main/resources/frontend/formDrawer.vue.btl

@@ -0,0 +1,71 @@
+<template>
+    <BasicDrawer
+            v-bind="$attrs"
+            destroyOnClose
+            @register="registerDrawer"
+            :title="getTitle"
+            :width="width"
+            @ok="handleSubmit"
+            :showFooter="true"
+    >
+        <BasicForm @register="registerForm" layout="vertical" />
+    </BasicDrawer>
+</template>
+<script lang="ts" setup>
+    import { ref, computed, unref } from 'vue';
+    import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
+    import { BasicForm, useForm } from '/@/components/Form';
+    import { useMessage } from '/@/hooks/web/useMessage';
+    import { dataFormSchema } from './data';
+
+    import { ${frontModuleName}${busNameFirstUpper}dd, ${frontModuleName}${busNameFirstUpper}Edit, ${frontModuleName}${busNameFirstUpper}Detail } from '/@/api/${frontModuleName}/${frontModuleName}${busNameFirstUpper}Api';
+
+    const emit = defineEmits(['success', 'register']);
+
+    const getTitle = computed(() => (!unref(isUpdate) ? '新增${functionName}' : '编辑${functionName}'));
+    const width = '45%';
+    const isUpdate = ref(false);
+    const rowId = ref();
+
+    const { createMessage } = useMessage();
+    const [registerForm, { setFieldsValue, resetFields, validate }] = useForm({
+        labelWidth: 100,
+        schemas: dataFormSchema,
+        showActionButtonGroup: false,
+        actionColOptions: {
+            span: 23,
+        },
+    });
+    const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async data => {
+        await resetFields();
+        setDrawerProps({ confirmLoading: false });
+        isUpdate.value = !!data?.isUpdate;
+
+        if (unref(isUpdate)) {
+            const resData = await ${frontModuleName}${busNameFirstUpper}Detail(data.record.id);
+            rowId.value = resData.id;
+            await setFieldsValue({
+                ...resData,
+            });
+        }
+    });
+
+    // 提交按钮事件
+    async function handleSubmit() {
+        try {
+            const values = await validate();
+            setDrawerProps({ confirmLoading: true });
+            !unref(isUpdate)
+                ? await ${frontModuleName}${busNameFirstUpper}Add({ ...values })
+        : await ${frontModuleName}${busNameFirstUpper}Edit({ ...values, id: rowId.value });
+            !unref(isUpdate) ? createMessage.success('新增成功!') : createMessage.success('编辑成功!');
+            closeDrawer();
+            emit('success', {
+                isUpdate: unref(isUpdate),
+                values: { ...values, id: rowId.value },
+            });
+        } finally {
+            setDrawerProps({ confirmLoading: false });
+        }
+    }
+</script>

+ 57 - 0
tr-modules/tr-module-gen/src/main/resources/frontend/viewDrawer.vue.btl

@@ -0,0 +1,57 @@
+<template>
+    <BasicDrawer
+            v-bind="$attrs"
+            destroyOnClose
+            @register="registerDrawer"
+            :title="getTitle"
+            :width="width"
+        <Description @register="registerDesc" :data="descData" />
+    </BasicDrawer>
+</template>
+<script lang="ts" setup>
+    import { onBeforeMount, ref } from 'vue'; // onBeforeMount,
+    import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
+    import { Description, useDescription } from '/@/components/Description';
+    import { viewSchema } from './data';
+
+    import { ${frontModuleName}${busNameFirstUpper}Detail,${frontModuleName}${busNameFirstUpper}Remove } from '/@/api/${frontModuleName}/${frontModuleName}${busNameFirstUpper}Api';
+    import { listDictModel } from '/@/api/common';
+    import { formatDictValue } from '/@/utils';
+
+    const descData = ref({});
+    const getTitle = '查看${functionName}';
+    const width = '45%';
+
+    <% for(var i = 0; i < configList.~size; i++) { %>
+    <% if(configList[i].dictTypeCode!=null) {%>
+    const  ${configList[i].fieldNameCamelCase}Options = ref();
+        <% } %>
+    <% } %>
+    onBeforeMount(async () => {
+    <% for(var i = 0; i < configList.~size; i++) { %>
+        <% if(configList[i].dictTypeCode!=null) {%>
+        ${configList[i].fieldNameCamelCase}Options.value = await listDictModel({ dictCode: '${configList[i].dictTypeCode}' });
+            <% } %>
+        <% } %>
+    });
+    const [registerDrawer] = useDrawerInner(async data => {
+        console.log('::::::::::', data.record);
+        const resData = await ${backendModuleName}${busNameFirstUpper}Detail(data.record.id);
+        descData.value = {
+            ...resData,
+            <% for(var i = 0; i < configList.~size; i++) { %>
+            <% if(configList[i].dictTypeCode!=null) {%>
+            ${configList[i].fieldNameCamelCase}: formatDictValue(${configList[i].fieldNameCamelCase}Options.value, resData.${configList[i].fieldNameCamelCase}),
+                <% } %>
+            <% } %>
+        };
+    });
+    const [registerDesc] = useDescription({
+        schema: viewSchema,
+        column: 2,
+        size: 'middle',
+        labelStyle: {
+            width: '120px',
+        },
+    });
+</script>

+ 4 - 0
tr-plugins/tr-spring-boot-starter-plugin-file/src/main/java/cn/tr/plugin/file/config/FileClientConfig.java

@@ -11,4 +11,8 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS)
 public interface FileClientConfig{
 
+    default void validate(){
+        
+    }
+
 }

+ 1 - 1
tr-plugins/tr-spring-boot-starter-plugin-mp-enhance-actable/src/main/java/cn/tr/plugin/mp/enhance/actable/proxy/MybatisConfigurationProxy.java

@@ -1,6 +1,6 @@
 package cn.tr.plugin.mp.enhance.actable.proxy;
 
-import com.baomidou.mybatisplus.core.MybatisConfiguration;
+
 import org.apache.ibatis.binding.MapperRegistry;
 import org.apache.ibatis.cache.Cache;
 import org.apache.ibatis.executor.Executor;

+ 1 - 15
tr-plugins/tr-spring-boot-starter-plugin-mybatis/src/main/java/cn/tr/plugin/mybatis/TrMybatisAutoConfiguration.java

@@ -29,12 +29,7 @@ import org.springframework.context.annotation.Bean;
  * @Author : LF
  * @Date: 2023年02月21日
  */
-public class TrMybatisAutoConfiguration implements BeanPostProcessor {
-
-    @Override
-    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
-        return bean;
-    }
+public class TrMybatisAutoConfiguration {
 
     @Bean
     public ISqlInjector sqlInjector(){
@@ -87,15 +82,6 @@ public class TrMybatisAutoConfiguration implements BeanPostProcessor {
         return interceptor;
     }
 
-
-    /**
-     * 分页插件
-     */
-    @Bean
-    public Interceptor paginationInnerInterceptor() {
-        return new PageInterceptor();
-    }
-
     /**
      * 禁止全表更新
      */

+ 4 - 4
tr-test/pom.xml

@@ -18,10 +18,10 @@
             <artifactId>tr-spring-boot-starter-plugin-web</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>cn.tr</groupId>
-            <artifactId>tr-spring-boot-starter-plugin-mp-enhance-actable</artifactId>
-        </dependency>
+        <!--<dependency>-->
+            <!--<groupId>cn.tr</groupId>-->
+            <!--<artifactId>tr-spring-boot-starter-plugin-mp-enhance-actable</artifactId>-->
+        <!--</dependency>-->
 
         <dependency>
             <groupId>cn.tr</groupId>

+ 1 - 0
tr-test/src/main/resources/application.yml

@@ -83,6 +83,7 @@ tr:
       - sys_role_menu
       - sys_user_role
       - sys_portal_menu
+      - sys_user_portal
 
 sa-token:
   is-read-header: true