Compare commits
10 Commits
97041ad515
...
2814a4e655
| Author | SHA1 | Date | |
|---|---|---|---|
| 2814a4e655 | |||
| 8aa814a2a4 | |||
| 7bf80cb179 | |||
| ba6896855a | |||
| 4c7a7e2452 | |||
| c61fe0c3bf | |||
| c2df93faeb | |||
| e65003ddb3 | |||
| d92b81ab55 | |||
| ed6bb2772f |
221
src/main/java/com/gxwebsoft/common/core/web/BaseController.java
Normal file
221
src/main/java/com/gxwebsoft/common/core/web/BaseController.java
Normal file
@@ -0,0 +1,221 @@
|
|||||||
|
package com.gxwebsoft.common.core.web;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.gxwebsoft.common.core.Constants;
|
||||||
|
import org.springframework.beans.propertyeditors.StringTrimmerEditor;
|
||||||
|
import org.springframework.web.bind.WebDataBinder;
|
||||||
|
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||||
|
import org.springframework.web.bind.annotation.InitBinder;
|
||||||
|
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controller基类
|
||||||
|
*
|
||||||
|
* @author WebSoft
|
||||||
|
* @since 2017-06-10 10:10:19
|
||||||
|
*/
|
||||||
|
public class BaseController {
|
||||||
|
@Resource
|
||||||
|
private HttpServletRequest request;
|
||||||
|
@Resource
|
||||||
|
// private RedisUtil redisUtil;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前登录的user
|
||||||
|
*
|
||||||
|
* @return User
|
||||||
|
*/
|
||||||
|
// public User getLoginUser() {
|
||||||
|
// try {
|
||||||
|
// Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||||
|
// if (authentication != null) {
|
||||||
|
// Object object = authentication.getPrincipal();
|
||||||
|
// if (object instanceof User) {
|
||||||
|
// return (User) object;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// } catch (Exception e) {
|
||||||
|
// System.out.println(e.getMessage());
|
||||||
|
// }
|
||||||
|
// return null;
|
||||||
|
// }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前登录的userId
|
||||||
|
*
|
||||||
|
* @return userId
|
||||||
|
*/
|
||||||
|
public Integer getLoginUserId() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前登录的tenantId
|
||||||
|
*
|
||||||
|
* @return tenantId
|
||||||
|
*/
|
||||||
|
public Integer getTenantId() {
|
||||||
|
String tenantId;
|
||||||
|
// 2 从请求头拿ID
|
||||||
|
tenantId = request.getHeader("tenantId");
|
||||||
|
if(StrUtil.isNotBlank(tenantId)){
|
||||||
|
return Integer.valueOf(tenantId);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回成功
|
||||||
|
*
|
||||||
|
* @return ApiResult
|
||||||
|
*/
|
||||||
|
public ApiResult<?> success() {
|
||||||
|
return new ApiResult<>(Constants.RESULT_OK_CODE, Constants.RESULT_OK_MSG);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回成功
|
||||||
|
*
|
||||||
|
* @param message 状态信息
|
||||||
|
* @return ApiResult
|
||||||
|
*/
|
||||||
|
public ApiResult<?> success(String message) {
|
||||||
|
return success().setMessage(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回成功
|
||||||
|
*
|
||||||
|
* @param data 返回数据
|
||||||
|
* @return ApiResult
|
||||||
|
*/
|
||||||
|
public <T> ApiResult<T> success(T data) {
|
||||||
|
return new ApiResult<>(Constants.RESULT_OK_CODE, Constants.RESULT_OK_MSG, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回成功
|
||||||
|
*
|
||||||
|
* @param message 状态信息
|
||||||
|
* @return ApiResult
|
||||||
|
*/
|
||||||
|
public <T> ApiResult<T> success(String message, T data) {
|
||||||
|
return success(data).setMessage(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回分页查询数据
|
||||||
|
*
|
||||||
|
* @param list 当前页数据
|
||||||
|
* @param count 总数量
|
||||||
|
* @return ApiResult
|
||||||
|
*/
|
||||||
|
public <T> ApiResult<PageResult<T>> success(List<T> list, Long count) {
|
||||||
|
return success(new PageResult<>(list, count));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回分页查询数据
|
||||||
|
*
|
||||||
|
* @param iPage IPage
|
||||||
|
* @return ApiResult
|
||||||
|
*/
|
||||||
|
public <T> ApiResult<PageResult<T>> success(IPage<T> iPage) {
|
||||||
|
return success(iPage.getRecords(), iPage.getTotal());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回失败
|
||||||
|
*
|
||||||
|
* @return ApiResult
|
||||||
|
*/
|
||||||
|
public ApiResult<?> fail() {
|
||||||
|
return new ApiResult<>(Constants.RESULT_ERROR_CODE, Constants.RESULT_ERROR_MSG);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回失败
|
||||||
|
*
|
||||||
|
* @param message 状态信息
|
||||||
|
* @return ApiResult
|
||||||
|
*/
|
||||||
|
public ApiResult<?> fail(String message) {
|
||||||
|
return fail().setMessage(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回失败
|
||||||
|
*
|
||||||
|
* @param data 返回数据
|
||||||
|
* @return ApiResult
|
||||||
|
*/
|
||||||
|
public <T> ApiResult<T> fail(T data) {
|
||||||
|
return fail(Constants.RESULT_ERROR_MSG, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回失败
|
||||||
|
*
|
||||||
|
* @param message 状态信息
|
||||||
|
* @param data 返回数据
|
||||||
|
* @return ApiResult
|
||||||
|
*/
|
||||||
|
public <T> ApiResult<T> fail(String message, T data) {
|
||||||
|
return new ApiResult<>(Constants.RESULT_ERROR_CODE, message, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求参数的空字符串转为null
|
||||||
|
*/
|
||||||
|
@InitBinder
|
||||||
|
public void initBinder(WebDataBinder binder) {
|
||||||
|
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 自定义函数
|
||||||
|
public String getAuthorization(){
|
||||||
|
return request.getHeader("Authorization");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAppId() {
|
||||||
|
// 兼容小写
|
||||||
|
if(request.getHeader("appid") != null){
|
||||||
|
return request.getHeader("appid");
|
||||||
|
}
|
||||||
|
return request.getHeader("AppId");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理方法参数类型转换异常
|
||||||
|
* 主要处理URL路径参数中传入"NaN"等无法转换为Integer的情况
|
||||||
|
*
|
||||||
|
* @param ex 方法参数类型不匹配异常
|
||||||
|
* @return ApiResult
|
||||||
|
*/
|
||||||
|
@ExceptionHandler(MethodArgumentTypeMismatchException.class)
|
||||||
|
public ApiResult<?> handleMethodArgumentTypeMismatch(MethodArgumentTypeMismatchException ex) {
|
||||||
|
String parameterName = ex.getName();
|
||||||
|
Object value = ex.getValue();
|
||||||
|
Class<?> requiredType = ex.getRequiredType();
|
||||||
|
|
||||||
|
// 记录错误日志
|
||||||
|
System.err.println("参数类型转换异常: 参数名=" + parameterName +
|
||||||
|
", 传入值=" + value +
|
||||||
|
", 期望类型=" + (requiredType != null ? requiredType.getSimpleName() : "unknown"));
|
||||||
|
|
||||||
|
// 如果是ID参数且传入的是"NaN",返回友好的错误信息
|
||||||
|
if ("id".equals(parameterName) && "NaN".equals(String.valueOf(value))) {
|
||||||
|
return fail("无效的ID参数,请检查传入的ID值");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 其他类型转换错误的通用处理
|
||||||
|
return fail("参数格式错误: " + parameterName + " 的值 '" + value + "' 无法转换为 " +
|
||||||
|
(requiredType != null ? requiredType.getSimpleName() : "目标类型"));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
package com.gxwebsoft.common.core.web;
|
|
||||||
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 简化版控制器基类,用于代码生成
|
|
||||||
* Created by WebSoft on 2019-10-29 15:55
|
|
||||||
*/
|
|
||||||
@RestController
|
|
||||||
public class SimpleBaseController {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 响应成功结果
|
|
||||||
*
|
|
||||||
* @param data 数据内容
|
|
||||||
* @param <T> 数据类型
|
|
||||||
* @return 响应结果
|
|
||||||
*/
|
|
||||||
protected <T> ApiResult<T> success(T data) {
|
|
||||||
return new ApiResult<T>(0, "操作成功", data);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 响应成功结果
|
|
||||||
*
|
|
||||||
* @return 响应结果
|
|
||||||
*/
|
|
||||||
protected ApiResult<String> success(String message) {
|
|
||||||
return new ApiResult<String>(0, message, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 响应失败结果
|
|
||||||
*
|
|
||||||
* @param message 错误信息
|
|
||||||
* @return 响应结果
|
|
||||||
*/
|
|
||||||
protected ApiResult<String> fail(String message) {
|
|
||||||
return new ApiResult<String>(1, message, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 响应失败结果
|
|
||||||
*
|
|
||||||
* @param code 错误码
|
|
||||||
* @param message 错误信息
|
|
||||||
* @return 响应结果
|
|
||||||
*/
|
|
||||||
protected ApiResult<String> fail(int code, String message) {
|
|
||||||
return new ApiResult<String>(code, message, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -7,7 +7,7 @@ server:
|
|||||||
# 数据源配置
|
# 数据源配置
|
||||||
spring:
|
spring:
|
||||||
datasource:
|
datasource:
|
||||||
url: jdbc:mysql://8.134.169.209:13306/modules?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
|
url: jdbc:mysql://47.119.165.234:13308/modules?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
|
||||||
username: modules
|
username: modules
|
||||||
password: P7KsAyDXG8YdLnkA
|
password: P7KsAyDXG8YdLnkA
|
||||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
@@ -16,7 +16,7 @@ spring:
|
|||||||
# redis
|
# redis
|
||||||
redis:
|
redis:
|
||||||
database: 0
|
database: 0
|
||||||
host: 8.134.169.209
|
host: 47.119.165.234
|
||||||
port: 16379
|
port: 16379
|
||||||
password: redis_WSDb88
|
password: redis_WSDb88
|
||||||
|
|
||||||
|
|||||||
@@ -31,9 +31,9 @@ public class ClinicGenerator {
|
|||||||
// JAVA输出目录
|
// JAVA输出目录
|
||||||
private static final String OUTPUT_DIR = "/src/main/java";
|
private static final String OUTPUT_DIR = "/src/main/java";
|
||||||
// Vue文件输出位置
|
// Vue文件输出位置
|
||||||
private static final String OUTPUT_LOCATION_VUE = "/Users/gxwebsoft/VUE/generator-vue";
|
private static final String OUTPUT_LOCATION_VUE = "/Users/gxwebsoft/JAVA/generator/output/admin";
|
||||||
// UniApp文件输出目录
|
// UniApp文件输出目录
|
||||||
private static final String OUTPUT_LOCATION_UNIAPP = "/Users/gxwebsoft/APP/template-10001";
|
private static final String OUTPUT_LOCATION_UNIAPP = "/Users/gxwebsoft/JAVA/generator/output/taro";
|
||||||
// Vue文件输出目录
|
// Vue文件输出目录
|
||||||
private static final String OUTPUT_DIR_VUE = "/src";
|
private static final String OUTPUT_DIR_VUE = "/src";
|
||||||
// 作者名称
|
// 作者名称
|
||||||
@@ -51,7 +51,7 @@ public class ClinicGenerator {
|
|||||||
private static final String MODULE_NAME = "clinic";
|
private static final String MODULE_NAME = "clinic";
|
||||||
// 需要生成的表
|
// 需要生成的表
|
||||||
private static final String[] TABLE_NAMES = new String[]{
|
private static final String[] TABLE_NAMES = new String[]{
|
||||||
"clinic_appointment",
|
// "clinic_appointment",
|
||||||
// "clinic_doctor_apply",
|
// "clinic_doctor_apply",
|
||||||
// "clinic_doctor_medical_record",
|
// "clinic_doctor_medical_record",
|
||||||
// "clinic_doctor_user",
|
// "clinic_doctor_user",
|
||||||
@@ -65,6 +65,7 @@ public class ClinicGenerator {
|
|||||||
// "clinic_prescription_item",
|
// "clinic_prescription_item",
|
||||||
// "clinic_report",
|
// "clinic_report",
|
||||||
// "clinic_visit_record",
|
// "clinic_visit_record",
|
||||||
|
"clinic_",
|
||||||
};
|
};
|
||||||
// 需要去除的表前缀
|
// 需要去除的表前缀
|
||||||
private static final String[] TABLE_PREFIX = new String[]{
|
private static final String[] TABLE_PREFIX = new String[]{
|
||||||
@@ -135,7 +136,7 @@ public class ClinicGenerator {
|
|||||||
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
|
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
|
||||||
strategy.setInclude(TABLE_NAMES);
|
strategy.setInclude(TABLE_NAMES);
|
||||||
strategy.setTablePrefix(TABLE_PREFIX);
|
strategy.setTablePrefix(TABLE_PREFIX);
|
||||||
strategy.setSuperControllerClass(PACKAGE_NAME + ".common.core.web.SimpleBaseController");
|
strategy.setSuperControllerClass(PACKAGE_NAME + ".common.core.web.BaseController");
|
||||||
strategy.setEntityLombokModel(true);
|
strategy.setEntityLombokModel(true);
|
||||||
strategy.setRestControllerStyle(true);
|
strategy.setRestControllerStyle(true);
|
||||||
strategy.setControllerMappingHyphenStyle(true);
|
strategy.setControllerMappingHyphenStyle(true);
|
||||||
|
|||||||
407
src/test/java/com/gxwebsoft/generator/CreditGenerator.java
Normal file
407
src/test/java/com/gxwebsoft/generator/CreditGenerator.java
Normal file
@@ -0,0 +1,407 @@
|
|||||||
|
package com.gxwebsoft.generator;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
||||||
|
import com.baomidou.mybatisplus.generator.AutoGenerator;
|
||||||
|
import com.baomidou.mybatisplus.generator.InjectionConfig;
|
||||||
|
import com.baomidou.mybatisplus.generator.config.*;
|
||||||
|
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
|
||||||
|
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
|
||||||
|
import com.gxwebsoft.generator.engine.BeetlTemplateEnginePlus;
|
||||||
|
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CMS模块-代码生成工具
|
||||||
|
*
|
||||||
|
* @author WebSoft
|
||||||
|
* @since 2021-09-05 00:31:14
|
||||||
|
*/
|
||||||
|
public class CreditGenerator {
|
||||||
|
// 输出位置
|
||||||
|
private static final String OUTPUT_LOCATION = System.getProperty("user.dir");
|
||||||
|
//private static final String OUTPUT_LOCATION = "D:/codegen"; // 不想生成到项目中可以写磁盘路径
|
||||||
|
// JAVA输出目录
|
||||||
|
private static final String OUTPUT_DIR = "/src/main/java";
|
||||||
|
// Vue文件输出位置
|
||||||
|
private static final String OUTPUT_LOCATION_VUE = "/Users/gxwebsoft/JAVA/generator/output/admin";
|
||||||
|
// UniApp文件输出目录
|
||||||
|
private static final String OUTPUT_LOCATION_UNIAPP = "/Users/gxwebsoft/JAVA/generator/output/taro";
|
||||||
|
// Vue文件输出目录
|
||||||
|
private static final String OUTPUT_DIR_VUE = "/src";
|
||||||
|
// 作者名称
|
||||||
|
private static final String AUTHOR = "科技小王子";
|
||||||
|
// 是否在xml中添加二级缓存配置
|
||||||
|
private static final boolean ENABLE_CACHE = false;
|
||||||
|
// 数据库连接配置
|
||||||
|
private static final String DB_URL = "jdbc:mysql://47.119.165.234:13308/modules?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8";
|
||||||
|
private static final String DB_DRIVER = "com.mysql.cj.jdbc.Driver";
|
||||||
|
private static final String DB_USERNAME = "modules";
|
||||||
|
private static final String DB_PASSWORD = "P7KsAyDXG8YdLnkA";
|
||||||
|
// 包名
|
||||||
|
private static final String PACKAGE_NAME = "com.gxwebsoft";
|
||||||
|
// 模块名
|
||||||
|
private static final String MODULE_NAME = "credit";
|
||||||
|
// 需要生成的表
|
||||||
|
private static final String[] TABLE_NAMES = new String[]{
|
||||||
|
// "credit_user",
|
||||||
|
// "credit_judiciary",
|
||||||
|
// "credit_company",
|
||||||
|
// "credit_breach_of_trust",
|
||||||
|
// "credit_case_filing",
|
||||||
|
// "credit_company",
|
||||||
|
// "credit_competitor",
|
||||||
|
// "credit_court_announcement",
|
||||||
|
// "credit_court_session",
|
||||||
|
// "credit_customer",
|
||||||
|
// "credit_delivery_notice",
|
||||||
|
// "credit_external",
|
||||||
|
// "credit_final_version",
|
||||||
|
// "credit_gqdj",
|
||||||
|
// "credit_judgment_debtor",
|
||||||
|
// "credit_judicial_document",
|
||||||
|
// "credit_mediation",
|
||||||
|
// "credit_risk_relation",
|
||||||
|
// "credit_supplier",
|
||||||
|
// "credit_xgxf",
|
||||||
|
"credit_administrative_license",
|
||||||
|
"credit_bankruptcy",
|
||||||
|
"credit_branch",
|
||||||
|
"credit_historical_legal_person",
|
||||||
|
"credit_nearby_company",
|
||||||
|
"credit_patent",
|
||||||
|
"credit_suspected_relationship"
|
||||||
|
};
|
||||||
|
// 需要去除的表前缀
|
||||||
|
private static final String[] TABLE_PREFIX = new String[]{
|
||||||
|
"tb_"
|
||||||
|
};
|
||||||
|
// 不需要作为查询参数的字段
|
||||||
|
private static final String[] PARAM_EXCLUDE_FIELDS = new String[]{
|
||||||
|
"tenant_id",
|
||||||
|
"create_time",
|
||||||
|
"update_time"
|
||||||
|
};
|
||||||
|
// 查询参数使用String的类型
|
||||||
|
private static final String[] PARAM_TO_STRING_TYPE = new String[]{
|
||||||
|
"Date",
|
||||||
|
"LocalDate",
|
||||||
|
"LocalTime",
|
||||||
|
"LocalDateTime"
|
||||||
|
};
|
||||||
|
// 查询参数使用EQ的类型
|
||||||
|
private static final String[] PARAM_EQ_TYPE = new String[]{
|
||||||
|
"Integer",
|
||||||
|
"Boolean",
|
||||||
|
"BigDecimal"
|
||||||
|
};
|
||||||
|
// 是否添加权限注解
|
||||||
|
private static final boolean AUTH_ANNOTATION = true;
|
||||||
|
// 是否添加日志注解
|
||||||
|
private static final boolean LOG_ANNOTATION = true;
|
||||||
|
// controller的mapping前缀
|
||||||
|
private static final String CONTROLLER_MAPPING_PREFIX = "/api";
|
||||||
|
// 模板所在位置
|
||||||
|
private static final String TEMPLATES_DIR = "/src/test/java/com/gxwebsoft/generator/templates";
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
// 代码生成器
|
||||||
|
AutoGenerator mpg = new AutoGenerator();
|
||||||
|
|
||||||
|
// 全局配置
|
||||||
|
GlobalConfig gc = new GlobalConfig();
|
||||||
|
gc.setOutputDir(OUTPUT_LOCATION + OUTPUT_DIR);
|
||||||
|
gc.setAuthor(AUTHOR);
|
||||||
|
gc.setOpen(false);
|
||||||
|
gc.setFileOverride(true);
|
||||||
|
gc.setEnableCache(ENABLE_CACHE);
|
||||||
|
gc.setSwagger2(true);
|
||||||
|
gc.setIdType(IdType.AUTO);
|
||||||
|
gc.setServiceName("%sService");
|
||||||
|
mpg.setGlobalConfig(gc);
|
||||||
|
|
||||||
|
// 数据源配置
|
||||||
|
DataSourceConfig dsc = new DataSourceConfig();
|
||||||
|
dsc.setUrl(DB_URL);
|
||||||
|
// dsc.setSchemaName("public");
|
||||||
|
dsc.setDriverName(DB_DRIVER);
|
||||||
|
dsc.setUsername(DB_USERNAME);
|
||||||
|
dsc.setPassword(DB_PASSWORD);
|
||||||
|
mpg.setDataSource(dsc);
|
||||||
|
|
||||||
|
// 包配置
|
||||||
|
PackageConfig pc = new PackageConfig();
|
||||||
|
pc.setModuleName(MODULE_NAME);
|
||||||
|
pc.setParent(PACKAGE_NAME);
|
||||||
|
mpg.setPackageInfo(pc);
|
||||||
|
|
||||||
|
// 策略配置
|
||||||
|
StrategyConfig strategy = new StrategyConfig();
|
||||||
|
strategy.setNaming(NamingStrategy.underline_to_camel);
|
||||||
|
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
|
||||||
|
strategy.setInclude(TABLE_NAMES);
|
||||||
|
strategy.setTablePrefix(TABLE_PREFIX);
|
||||||
|
strategy.setSuperControllerClass(PACKAGE_NAME + ".common.core.web.BaseController");
|
||||||
|
strategy.setEntityLombokModel(true);
|
||||||
|
strategy.setRestControllerStyle(true);
|
||||||
|
strategy.setControllerMappingHyphenStyle(true);
|
||||||
|
strategy.setLogicDeleteFieldName("deleted");
|
||||||
|
mpg.setStrategy(strategy);
|
||||||
|
|
||||||
|
// 模板配置
|
||||||
|
TemplateConfig templateConfig = new TemplateConfig();
|
||||||
|
templateConfig.setController(TEMPLATES_DIR + "/controller.java");
|
||||||
|
templateConfig.setEntity(TEMPLATES_DIR + "/entity.java");
|
||||||
|
templateConfig.setMapper(TEMPLATES_DIR + "/mapper.java");
|
||||||
|
templateConfig.setXml(TEMPLATES_DIR + "/mapper.xml");
|
||||||
|
templateConfig.setService(TEMPLATES_DIR + "/service.java");
|
||||||
|
templateConfig.setServiceImpl(TEMPLATES_DIR + "/serviceImpl.java");
|
||||||
|
mpg.setTemplate(templateConfig);
|
||||||
|
mpg.setTemplateEngine(new BeetlTemplateEnginePlus());
|
||||||
|
|
||||||
|
// 自定义模板配置
|
||||||
|
InjectionConfig cfg = new InjectionConfig() {
|
||||||
|
@Override
|
||||||
|
public void initMap() {
|
||||||
|
Map<String, Object> map = new HashMap<>();
|
||||||
|
map.put("packageName", PACKAGE_NAME);
|
||||||
|
map.put("paramExcludeFields", PARAM_EXCLUDE_FIELDS);
|
||||||
|
map.put("paramToStringType", PARAM_TO_STRING_TYPE);
|
||||||
|
map.put("paramEqType", PARAM_EQ_TYPE);
|
||||||
|
map.put("authAnnotation", AUTH_ANNOTATION);
|
||||||
|
map.put("logAnnotation", LOG_ANNOTATION);
|
||||||
|
map.put("controllerMappingPrefix", CONTROLLER_MAPPING_PREFIX);
|
||||||
|
// 添加项目类型标识,用于模板中的条件判断
|
||||||
|
map.put("isUniApp", false); // Vue 项目
|
||||||
|
map.put("isVueAdmin", true); // 后台管理项目
|
||||||
|
this.setMap(map);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
String templatePath = TEMPLATES_DIR + "/param.java.btl";
|
||||||
|
List<FileOutConfig> focList = new ArrayList<>();
|
||||||
|
focList.add(new FileOutConfig(templatePath) {
|
||||||
|
@Override
|
||||||
|
public String outputFile(TableInfo tableInfo) {
|
||||||
|
return OUTPUT_LOCATION + OUTPUT_DIR + "/"
|
||||||
|
+ PACKAGE_NAME.replace(".", "/")
|
||||||
|
+ "/" + pc.getModuleName() + "/param/"
|
||||||
|
+ tableInfo.getEntityName() + "Param" + StringPool.DOT_JAVA;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/**
|
||||||
|
* 以下是生成VUE项目代码
|
||||||
|
* 生成文件的路径 /api/shop/goods/index.ts
|
||||||
|
*/
|
||||||
|
templatePath = TEMPLATES_DIR + "/index.ts.btl";
|
||||||
|
|
||||||
|
focList.add(new FileOutConfig(templatePath) {
|
||||||
|
@Override
|
||||||
|
public String outputFile(TableInfo tableInfo) {
|
||||||
|
return OUTPUT_LOCATION_VUE + OUTPUT_DIR_VUE
|
||||||
|
+ "/api/" + pc.getModuleName() + "/"
|
||||||
|
+ tableInfo.getEntityPath() + "/" + "index.ts";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// UniApp 使用专门的模板
|
||||||
|
String uniappTemplatePath = TEMPLATES_DIR + "/index.ts.uniapp.btl";
|
||||||
|
focList.add(new FileOutConfig(uniappTemplatePath) {
|
||||||
|
@Override
|
||||||
|
public String outputFile(TableInfo tableInfo) {
|
||||||
|
return OUTPUT_LOCATION_UNIAPP + OUTPUT_DIR_VUE
|
||||||
|
+ "/api/" + pc.getModuleName() + "/"
|
||||||
|
+ tableInfo.getEntityPath() + "/" + "index.ts";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// 生成TS文件 (/api/shop/goods/model/index.ts)
|
||||||
|
templatePath = TEMPLATES_DIR + "/model.ts.btl";
|
||||||
|
focList.add(new FileOutConfig(templatePath) {
|
||||||
|
@Override
|
||||||
|
public String outputFile(TableInfo tableInfo) {
|
||||||
|
return OUTPUT_LOCATION_VUE + OUTPUT_DIR_VUE
|
||||||
|
+ "/api/" + pc.getModuleName() + "/"
|
||||||
|
+ tableInfo.getEntityPath() + "/model/" + "index.ts";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// UniApp 使用专门的 model 模板
|
||||||
|
String uniappModelTemplatePath = TEMPLATES_DIR + "/model.ts.uniapp.btl";
|
||||||
|
focList.add(new FileOutConfig(uniappModelTemplatePath) {
|
||||||
|
@Override
|
||||||
|
public String outputFile(TableInfo tableInfo) {
|
||||||
|
return OUTPUT_LOCATION_UNIAPP + OUTPUT_DIR_VUE
|
||||||
|
+ "/api/" + pc.getModuleName() + "/"
|
||||||
|
+ tableInfo.getEntityPath() + "/model/" + "index.ts";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// 生成Vue文件(/views/shop/goods/index.vue)
|
||||||
|
templatePath = TEMPLATES_DIR + "/index.vue.btl";
|
||||||
|
focList.add(new FileOutConfig(templatePath) {
|
||||||
|
@Override
|
||||||
|
public String outputFile(TableInfo tableInfo) {
|
||||||
|
return OUTPUT_LOCATION_VUE + OUTPUT_DIR_VUE
|
||||||
|
+ "/views/" + pc.getModuleName() + "/"
|
||||||
|
+ tableInfo.getEntityPath() + "/" + "index.vue";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 生成components文件(/views/shop/goods/components/edit.vue)
|
||||||
|
templatePath = TEMPLATES_DIR + "/components.edit.vue.btl";
|
||||||
|
focList.add(new FileOutConfig(templatePath) {
|
||||||
|
@Override
|
||||||
|
public String outputFile(TableInfo tableInfo) {
|
||||||
|
return OUTPUT_LOCATION_VUE + OUTPUT_DIR_VUE
|
||||||
|
+ "/views/" + pc.getModuleName() + "/"
|
||||||
|
+ tableInfo.getEntityPath() + "/components/" + tableInfo.getEntityPath() + "Edit.vue";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 生成components文件(/views/shop/goods/components/search.vue)
|
||||||
|
templatePath = TEMPLATES_DIR + "/components.search.vue.btl";
|
||||||
|
focList.add(new FileOutConfig(templatePath) {
|
||||||
|
@Override
|
||||||
|
public String outputFile(TableInfo tableInfo) {
|
||||||
|
return OUTPUT_LOCATION_VUE + OUTPUT_DIR_VUE
|
||||||
|
+ "/views/" + pc.getModuleName() + "/"
|
||||||
|
+ tableInfo.getEntityPath() + "/components/" + "search.vue";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// ========== 移动端页面文件生成 ==========
|
||||||
|
// 生成移动端列表页面配置文件 (/src/shop/goods/index.config.ts)
|
||||||
|
templatePath = TEMPLATES_DIR + "/index.config.ts.btl";
|
||||||
|
focList.add(new FileOutConfig(templatePath) {
|
||||||
|
@Override
|
||||||
|
public String outputFile(TableInfo tableInfo) {
|
||||||
|
return OUTPUT_LOCATION_UNIAPP + OUTPUT_DIR_VUE
|
||||||
|
+ "/" + pc.getModuleName() + "/"
|
||||||
|
+ tableInfo.getEntityPath() + "/" + "index.config.ts";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 生成移动端列表页面组件文件 (/src/shop/goods/index.tsx)
|
||||||
|
templatePath = TEMPLATES_DIR + "/index.tsx.btl";
|
||||||
|
focList.add(new FileOutConfig(templatePath) {
|
||||||
|
@Override
|
||||||
|
public String outputFile(TableInfo tableInfo) {
|
||||||
|
return OUTPUT_LOCATION_UNIAPP + OUTPUT_DIR_VUE
|
||||||
|
+ "/" + pc.getModuleName() + "/"
|
||||||
|
+ tableInfo.getEntityPath() + "/" + "index.tsx";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 生成移动端新增/编辑页面配置文件 (/src/shop/goods/add.config.ts)
|
||||||
|
templatePath = TEMPLATES_DIR + "/add.config.ts.btl";
|
||||||
|
focList.add(new FileOutConfig(templatePath) {
|
||||||
|
@Override
|
||||||
|
public String outputFile(TableInfo tableInfo) {
|
||||||
|
return OUTPUT_LOCATION_UNIAPP + OUTPUT_DIR_VUE
|
||||||
|
+ "/" + pc.getModuleName() + "/"
|
||||||
|
+ tableInfo.getEntityPath() + "/" + "add.config.ts";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 生成移动端新增/编辑页面组件文件 (/src/shop/goods/add.tsx)
|
||||||
|
templatePath = TEMPLATES_DIR + "/add.tsx.btl";
|
||||||
|
focList.add(new FileOutConfig(templatePath) {
|
||||||
|
@Override
|
||||||
|
public String outputFile(TableInfo tableInfo) {
|
||||||
|
return OUTPUT_LOCATION_UNIAPP + OUTPUT_DIR_VUE
|
||||||
|
+ "/" + pc.getModuleName() + "/"
|
||||||
|
+ tableInfo.getEntityPath() + "/" + "add.tsx";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
cfg.setFileOutConfigList(focList);
|
||||||
|
mpg.setCfg(cfg);
|
||||||
|
|
||||||
|
mpg.execute();
|
||||||
|
|
||||||
|
// 自动更新 app.config.ts
|
||||||
|
updateAppConfig(TABLE_NAMES, MODULE_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自动更新 app.config.ts 文件,添加新生成的页面路径
|
||||||
|
*/
|
||||||
|
private static void updateAppConfig(String[] tableNames, String moduleName) {
|
||||||
|
String appConfigPath = OUTPUT_LOCATION_UNIAPP + OUTPUT_DIR_VUE + "/app.config.ts";
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 读取原文件内容
|
||||||
|
String content = new String(Files.readAllBytes(Paths.get(appConfigPath)));
|
||||||
|
|
||||||
|
// 为每个表生成页面路径
|
||||||
|
StringBuilder newPages = new StringBuilder();
|
||||||
|
for (String tableName : tableNames) {
|
||||||
|
String entityPath = tableName.replaceAll("_", "");
|
||||||
|
// 转换为驼峰命名
|
||||||
|
String[] parts = tableName.split("_");
|
||||||
|
StringBuilder camelCase = new StringBuilder(parts[0]);
|
||||||
|
for (int i = 1; i < parts.length; i++) {
|
||||||
|
camelCase.append(parts[i].substring(0, 1).toUpperCase()).append(parts[i].substring(1));
|
||||||
|
}
|
||||||
|
entityPath = camelCase.toString();
|
||||||
|
|
||||||
|
newPages.append(" '").append(entityPath).append("/index',\n");
|
||||||
|
newPages.append(" '").append(entityPath).append("/add',\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查找对应模块的子包配置
|
||||||
|
String modulePattern = "\"root\":\\s*\"" + moduleName + "\",\\s*\"pages\":\\s*\\[([^\\]]*)]";
|
||||||
|
Pattern pattern = Pattern.compile(modulePattern, Pattern.DOTALL);
|
||||||
|
Matcher matcher = pattern.matcher(content);
|
||||||
|
|
||||||
|
if (matcher.find()) {
|
||||||
|
String existingPages = matcher.group(1);
|
||||||
|
|
||||||
|
// 检查页面是否已存在,避免重复添加
|
||||||
|
boolean needUpdate = false;
|
||||||
|
String[] newPageArray = newPages.toString().split("\n");
|
||||||
|
for (String newPage : newPageArray) {
|
||||||
|
if (!newPage.trim().isEmpty() && !existingPages.contains(newPage.trim().replace(" ", "").replace(",", ""))) {
|
||||||
|
needUpdate = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (needUpdate) {
|
||||||
|
// 备份原文件
|
||||||
|
String backupPath = appConfigPath + ".backup." + System.currentTimeMillis();
|
||||||
|
Files.copy(Paths.get(appConfigPath), Paths.get(backupPath));
|
||||||
|
System.out.println("已备份原文件到: " + backupPath);
|
||||||
|
|
||||||
|
// 在现有页面列表末尾添加新页面
|
||||||
|
String updatedPages = existingPages.trim();
|
||||||
|
if (!updatedPages.endsWith(",")) {
|
||||||
|
updatedPages += ",";
|
||||||
|
}
|
||||||
|
updatedPages += "\n" + newPages.toString().trim();
|
||||||
|
|
||||||
|
// 替换内容
|
||||||
|
String updatedContent = content.replace(matcher.group(1), updatedPages);
|
||||||
|
|
||||||
|
// 写入更新后的内容
|
||||||
|
Files.write(Paths.get(appConfigPath), updatedContent.getBytes());
|
||||||
|
|
||||||
|
System.out.println("✅ 已自动更新 app.config.ts,添加了以下页面路径:");
|
||||||
|
System.out.println(newPages.toString());
|
||||||
|
} else {
|
||||||
|
System.out.println("ℹ️ app.config.ts 中已包含所有页面路径,无需更新");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
System.out.println("⚠️ 未找到 " + moduleName + " 模块的子包配置,请手动添加页面路径");
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.err.println("❌ 更新 app.config.ts 失败: " + e.getMessage());
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -13,6 +13,8 @@ import lombok.EqualsAndHashCode;
|
|||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
<% } %>
|
<% } %>
|
||||||
<% } %>
|
<% } %>
|
||||||
|
<% /* 为时间类型字段添加日期格式化注解的导入 */ %>
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ${table.comment!}
|
* ${table.comment!}
|
||||||
@@ -48,63 +50,33 @@ public class ${entity} implements Serializable {
|
|||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
<% } %>
|
<% } %>
|
||||||
<% /** -----------BEGIN 字段循环遍历----------- **/ %>
|
<% /** -----------BEGIN 字段循环遍历----------- **/ %>
|
||||||
<% for(field in table.fields) { %>
|
<% for(field in table.fields) {
|
||||||
<%
|
var keyPropertyName = field.keyFlag ? field.propertyName : null;
|
||||||
var keyPropertyName;
|
|
||||||
if(field.keyFlag) {
|
|
||||||
keyPropertyName = field.propertyName;
|
|
||||||
}
|
|
||||||
%>
|
%>
|
||||||
|
|
||||||
<% if(isNotEmpty(field.comment)) { %>
|
<% if(isNotEmpty(field.comment)) { %><% if(swagger2) { %> @Schema(description = "${field.comment}")
|
||||||
<% if(swagger2) { %>
|
<% }else{ %> /**
|
||||||
@Schema(description = "${field.comment}")
|
|
||||||
<% }else{ %>
|
|
||||||
/**
|
|
||||||
* ${field.comment}
|
* ${field.comment}
|
||||||
*/
|
*/
|
||||||
<% } %>
|
<% } %><% } %><% /* 为时间类型字段添加日期格式化注解 */ %><% if(field.propertyType == 'LocalDateTime' || field.propertyType == 'LocalDate' || field.propertyType == 'LocalTime' || field.propertyType == 'Date') { %><% if(field.propertyType == 'LocalDateTime') { %> @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
<% } %>
|
<% } else if(field.propertyType == 'LocalDate') { %> @JsonFormat(pattern = "yyyy-MM-dd")
|
||||||
<% /* 主键 */ %>
|
<% } else if(field.propertyType == 'LocalTime') { %> @JsonFormat(pattern = "HH:mm:ss")
|
||||||
<% if(field.keyFlag) { %>
|
<% } else if(field.propertyType == 'Date') { %> @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
<% if(field.keyIdentityFlag) { %>
|
<% } %><% } %><% /* 添加其他注解(主键、字段填充等) */ %><% if(field.keyFlag) { %><% if(field.keyIdentityFlag) { %> @TableId(value = "${field.annotationColumnName}", type = IdType.AUTO)
|
||||||
@TableId(value = "${field.annotationColumnName}", type = IdType.AUTO)
|
<% } else if(isNotEmpty(idType)) { %> @TableId(value = "${field.annotationColumnName}", type = IdType.${idType})
|
||||||
<% } else if(isNotEmpty(idType)) { %>
|
<% } else if(field.convert) { %> @TableId("${field.annotationColumnName}")
|
||||||
@TableId(value = "${field.annotationColumnName}", type = IdType.${idType})
|
<% } %><% } else if(isNotEmpty(field.fill)) { %><% if(field.convert){ %> @TableField(value = "${field.annotationColumnName}", fill = FieldFill.${field.fill})
|
||||||
<% } else if(field.convert) { %>
|
<% }else{ %> @TableField(fill = FieldFill.${field.fill})
|
||||||
@TableId("${field.annotationColumnName}")
|
<% } %><% } else if(field.convert) { %> @TableField("${field.annotationColumnName}")
|
||||||
<% } %>
|
<% } %><% if(versionFieldName!'' == field.name) { %> @Version
|
||||||
<% /* 普通字段 */ %>
|
<% } %><% if(logicDeleteFieldName!'' == field.name) { %> @TableLogic
|
||||||
<% } else if(isNotEmpty(field.fill)) { %>
|
<% } %> private ${field.propertyType} ${field.propertyName};
|
||||||
<% if(field.convert){ %>
|
|
||||||
@TableField(value = "${field.annotationColumnName}", fill = FieldFill.${field.fill})
|
|
||||||
<% }else{ %>
|
|
||||||
@TableField(fill = FieldFill.${field.fill})
|
|
||||||
<% } %>
|
|
||||||
<% } else if(field.convert) { %>
|
|
||||||
@TableField("${field.annotationColumnName}")
|
|
||||||
<% } %>
|
|
||||||
<% /* 乐观锁注解 */ %>
|
|
||||||
<% if(versionFieldName!'' == field.name) { %>
|
|
||||||
@Version
|
|
||||||
<% } %>
|
|
||||||
<% /* 逻辑删除注解 */ %>
|
|
||||||
<% if(logicDeleteFieldName!'' == field.name) { %>
|
|
||||||
@TableLogic
|
|
||||||
<% } %>
|
|
||||||
private ${field.propertyType} ${field.propertyName};
|
|
||||||
<% } %>
|
<% } %>
|
||||||
<% /** -----------END 字段循环遍历----------- **/ %>
|
<% /** -----------END 字段循环遍历----------- **/ %>
|
||||||
|
|
||||||
<% if(!entityLombokModel) { %>
|
<% if(!entityLombokModel) { %>
|
||||||
<% for(field in table.fields) { %>
|
<% for(field in table.fields) {
|
||||||
<%
|
var getprefix = field.propertyType == 'boolean' ? 'is' : 'get';
|
||||||
var getprefix = '';
|
|
||||||
if(field.propertyType == 'boolean') {
|
|
||||||
getprefix = 'is';
|
|
||||||
} else {
|
|
||||||
getprefix = 'get';
|
|
||||||
}
|
|
||||||
%>
|
%>
|
||||||
public ${field.propertyType} ${getprefix}${field.capitalName}() {
|
public ${field.propertyType} ${getprefix}${field.capitalName}() {
|
||||||
return ${field.propertyName};
|
return ${field.propertyName};
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<a-card :bordered="false" :body-style="{ padding: '16px' }">
|
<a-card :bordered="false" :body-style="{ padding: '16px' }">
|
||||||
<ele-pro-table
|
<ele-pro-table
|
||||||
ref="tableRef"
|
ref="tableRef"
|
||||||
row-key="${table.entityPath}Id"
|
row-key="id"
|
||||||
:columns="columns"
|
:columns="columns"
|
||||||
:datasource="datasource"
|
:datasource="datasource"
|
||||||
:customRow="customRow"
|
:customRow="customRow"
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
// 完整的列配置(包含所有字段)
|
// 完整的列配置(包含所有字段)
|
||||||
const allColumns = ref<ColumnItem[]>([
|
const columns = ref<ColumnItem[]>([
|
||||||
<% for(field in table.fields) { %>
|
<% for(field in table.fields) { %>
|
||||||
<% if(field.propertyName != 'tenantId'){ %>
|
<% if(field.propertyName != 'tenantId'){ %>
|
||||||
{
|
{
|
||||||
@@ -133,26 +133,6 @@
|
|||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// 默认显示的核心列(最多5个主要字段)
|
|
||||||
const defaultVisibleColumns = [
|
|
||||||
<% var count = 0; %>
|
|
||||||
<% for(field in table.fields) { %>
|
|
||||||
<% if(field.keyFlag || field.propertyName == 'name' || field.propertyName == 'title' || field.propertyName == 'status' || field.propertyName == 'createTime'){ %>
|
|
||||||
'${field.propertyName}',
|
|
||||||
<% count = count + 1; %>
|
|
||||||
<% if(count >= 5) break; %>
|
|
||||||
<% } %>
|
|
||||||
<% } %>
|
|
||||||
'action'
|
|
||||||
];
|
|
||||||
|
|
||||||
// 根据默认可见列过滤显示的列
|
|
||||||
const columns = computed(() => {
|
|
||||||
return allColumns.value.filter(col =>
|
|
||||||
defaultVisibleColumns.includes(col.dataIndex) || col.key === 'action'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
/* 搜索 */
|
/* 搜索 */
|
||||||
const reload = (where?: ${entity}Param) => {
|
const reload = (where?: ${entity}Param) => {
|
||||||
selection.value = [];
|
selection.value = [];
|
||||||
@@ -173,7 +153,7 @@
|
|||||||
/* 删除单个 */
|
/* 删除单个 */
|
||||||
const remove = (row: ${entity}) => {
|
const remove = (row: ${entity}) => {
|
||||||
const hide = message.loading('请求中..', 0);
|
const hide = message.loading('请求中..', 0);
|
||||||
remove${entity}(row.${table.entityPath}Id)
|
remove${entity}(row.id)
|
||||||
.then((msg) => {
|
.then((msg) => {
|
||||||
hide();
|
hide();
|
||||||
message.success(msg);
|
message.success(msg);
|
||||||
@@ -198,7 +178,7 @@
|
|||||||
maskClosable: true,
|
maskClosable: true,
|
||||||
onOk: () => {
|
onOk: () => {
|
||||||
const hide = message.loading('请求中..', 0);
|
const hide = message.loading('请求中..', 0);
|
||||||
removeBatch${entity}(selection.value.map((d) => d.${table.entityPath}Id))
|
removeBatch${entity}(selection.value.map((d) => d.id))
|
||||||
.then((msg) => {
|
.then((msg) => {
|
||||||
hide();
|
hide();
|
||||||
message.success(msg);
|
message.success(msg);
|
||||||
|
|||||||
Reference in New Issue
Block a user