diff --git a/src/main/java/com/youlai/system/common/base/BaseEntity.java b/src/main/java/com/youlai/system/common/base/BaseEntity.java
index 3e71a021..d6a89e8d 100644
--- a/src/main/java/com/youlai/system/common/base/BaseEntity.java
+++ b/src/main/java/com/youlai/system/common/base/BaseEntity.java
@@ -1,6 +1,8 @@
package com.youlai.system.common.base;
-import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
@@ -12,7 +14,7 @@ import java.time.LocalDateTime;
/**
* 基础实体类
*
- *
实体类的基类,包含了实体类的公共属性,如创建时间、更新时间
+ * 实体类的基类,包含了实体类的公共属性,如创建时间、更新时间、逻辑删除标识等
*
* @author Ray
* @since 2024/6/23
@@ -23,13 +25,6 @@ public class BaseEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
- /**
- * 主键ID
- */
- @TableId(type = IdType.AUTO)
- private Long id;
-
-
/**
* 创建时间
*/
@@ -46,5 +41,9 @@ public class BaseEntity implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
-
+ /**
+ * 逻辑删除标识 (0-未删除 1-已删除)
+ */
+ @TableLogic(value = "0", delval = "1")
+ private Integer isDeleted;
}
diff --git a/src/main/java/com/youlai/system/config/property/GeneratorProperties.java b/src/main/java/com/youlai/system/config/property/GeneratorProperties.java
index 126680b8..b9124b6a 100644
--- a/src/main/java/com/youlai/system/config/property/GeneratorProperties.java
+++ b/src/main/java/com/youlai/system/config/property/GeneratorProperties.java
@@ -1,6 +1,5 @@
package com.youlai.system.config.property;
-import cn.hutool.core.io.file.FileNameUtil;
import cn.hutool.core.map.MapUtil;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -31,11 +30,6 @@ public class GeneratorProperties {
private String packageName;
- /**
- * 文件扩展名,如 .java
- */
- private String extension= FileNameUtil.EXT_JAVA;
-
}
diff --git a/src/main/java/com/youlai/system/controller/GeneratorController.java b/src/main/java/com/youlai/system/controller/GeneratorController.java
index de3db805..de378db5 100644
--- a/src/main/java/com/youlai/system/controller/GeneratorController.java
+++ b/src/main/java/com/youlai/system/controller/GeneratorController.java
@@ -3,15 +3,19 @@ package com.youlai.system.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.system.common.result.PageResult;
import com.youlai.system.common.result.Result;
-import com.youlai.system.model.form.GenConfigForm;
import com.youlai.system.model.query.TablePageQuery;
-import com.youlai.system.model.vo.GeneratorPreviewVO;
+import com.youlai.system.model.vo.TableColumnVO;
+import com.youlai.system.model.vo.TableGeneratePreviewVO;
import com.youlai.system.model.vo.TablePageVO;
import com.youlai.system.service.GeneratorService;
import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@@ -32,26 +36,21 @@ public class GeneratorController {
return PageResult.success(result);
}
- @Operation(summary = "获取预览生成代码")
- @GetMapping("/{tableName}/preview")
- public Result> getTablePreviewData(@PathVariable String tableName) {
- List list = generatorService.getTablePreviewData(tableName);
+ @Operation(summary = "获取数据表字段列表")
+ @GetMapping("/table/{tableName}/columns")
+ public Result> getTableColumns(
+ @Parameter(description = "表名", example = "sys_user") @PathVariable String tableName
+ ) {
+ List list = generatorService.getTableColumns(tableName);
return Result.success(list);
}
- @Operation(summary = "获取代码生成配置")
- @GetMapping("/{tableName}/config")
- public Result getGenConfig(@PathVariable String tableName) {
- GenConfigForm formData = generatorService.getGenConfig(tableName);
- return Result.success(formData);
- }
-
- @Operation(summary = "保存代码生成配置")
- @PostMapping("/{tableName}/config")
- public Result saveGenCodeConfig(@RequestBody GenConfigForm formData) {
- boolean result = generatorService.saveGenCodeConfig(formData);
- return Result.judge(result);
+ @Operation(summary = "获取预览生成代码")
+ @GetMapping("/table/{tableName}/preview")
+ public Result> getTablePreviewData(@PathVariable String tableName) {
+ List list = generatorService.getTablePreviewData(tableName);
+ return Result.success(list);
}
}
diff --git a/src/main/java/com/youlai/system/converter/DeptConverter.java b/src/main/java/com/youlai/system/converter/DeptConverter.java
index 83feca8c..bf165616 100644
--- a/src/main/java/com/youlai/system/converter/DeptConverter.java
+++ b/src/main/java/com/youlai/system/converter/DeptConverter.java
@@ -16,7 +16,7 @@ public interface DeptConverter {
DeptForm toForm(SysDept entity);
- DeptVO toVo(SysDept entity);
+ DeptVO convertToVo(SysDept entity);
SysDept toEntity(DeptForm deptForm);
diff --git a/src/main/java/com/youlai/system/converter/DictConverter.java b/src/main/java/com/youlai/system/converter/DictConverter.java
index 43949ffa..94bbc246 100644
--- a/src/main/java/com/youlai/system/converter/DictConverter.java
+++ b/src/main/java/com/youlai/system/converter/DictConverter.java
@@ -7,7 +7,7 @@ import com.youlai.system.model.vo.DictPageVO;
import org.mapstruct.Mapper;
/**
- * 字典对象转换器
+ * 字典 对象转换器
*
* @author Ray Hao
* @since 2022/6/8
@@ -15,7 +15,7 @@ import org.mapstruct.Mapper;
@Mapper(componentModel = "spring")
public interface DictConverter {
- Page toPageVo(Page page);
+ Page convertToPageVo(Page page);
DictForm toForm(SysDict entity);
diff --git a/src/main/java/com/youlai/system/converter/GenConfigConverter.java b/src/main/java/com/youlai/system/converter/GenConfigConverter.java
deleted file mode 100644
index 738c103e..00000000
--- a/src/main/java/com/youlai/system/converter/GenConfigConverter.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.youlai.system.converter;
-
-import com.youlai.system.model.entity.GenConfig;
-import com.youlai.system.model.entity.GenFieldConfig;
-import com.youlai.system.model.form.GenConfigForm;
-import org.mapstruct.Mapper;
-import org.mapstruct.Mapping;
-
-import java.util.List;
-
-/**
- * 代码生成配置转换器
- *
- * @author Ray
- * @since 2.10.0
- */
-@Mapper(componentModel = "spring")
-public interface GenConfigConverter {
-
- @Mapping(source = "genConfig.tableName", target = "tableName")
- @Mapping(source = "genConfig.comment", target = "comment")
- @Mapping(source = "genConfig.moduleName", target = "moduleName")
- @Mapping(source = "genConfig.packageName", target = "packageName")
- @Mapping(source = "genConfig.entityName", target = "entityName")
- @Mapping(source = "genConfig.author", target = "author")
- @Mapping(source = "fieldConfigs", target = "fieldConfigs")
- GenConfigForm toGenConfigForm(GenConfig genConfig, List fieldConfigs);
-
- List toFieldConfigList(List fieldConfigs);
-
- @Mapping(source = "configId", target = "configId")
- @Mapping(source = "columnName", target = "columnName")
- @Mapping(source = "columnType", target = "columnType")
- @Mapping(source = "fieldName", target = "fieldName")
- @Mapping(source = "fieldType", target = "fieldType")
- @Mapping(source = "comment", target = "comment")
- @Mapping(source = "formType", target = "formType")
- @Mapping(source = "queryType", target = "queryType")
- @Mapping(source = "isShowInList", target = "isShowInList")
- @Mapping(source = "isShowInForm", target = "isShowInForm")
- @Mapping(source = "isShowInQuery", target = "isShowInQuery")
- @Mapping(source = "isRequired", target = "isRequired")
- GenConfigForm.FieldConfig toFieldConfig(GenFieldConfig genFieldConfig);
-
-}
\ No newline at end of file
diff --git a/src/main/java/com/youlai/system/enums/FormTypeEnum.java b/src/main/java/com/youlai/system/enums/FormTypeEnum.java
deleted file mode 100644
index 8a0aa8b8..00000000
--- a/src/main/java/com/youlai/system/enums/FormTypeEnum.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.youlai.system.enums;
-
-import com.baomidou.mybatisplus.annotation.EnumValue;
-import com.youlai.system.common.base.IBaseEnum;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-
-/**
- * 表单类型枚举
- *
- * @author Ray
- * @since 2.10.0
- */
-@Getter
-@RequiredArgsConstructor
-public enum FormTypeEnum implements IBaseEnum {
-
- /**
- * 输入框
- */
- INPUT(1, "输入框"),
-
- /**
- * 下拉框
- */
- SELECT(2, "下拉框"),
-
- /**
- * 单选框
- */
- RADIO(3, "单选框"),
-
- /**
- * 数字输入框
- */
- INPUT_NUMBER(4, "数字输入框"),
-
- /**
- * 开关
- */
- SWITCH(5, "开关"),
-
- /**
- * 复选框
- */
- CHECK_BOX(6, "复选框"),
-
- /**
- * 文本域
- */
- TEXT_AREA(7, "文本域"),
-
- /**
- * 日期时间框
- */
- DATE_TIME(8, "日期时间框"),
-
- /**
- * 日期框
- */
- DATE(9, "日期框"),;
-
-
- // Mybatis-Plus 提供注解表示插入数据库时插入该值
- @EnumValue
- private final Integer value;
-
- // @JsonValue // 表示对枚举序列化时返回此字段
- private final String label;
-}
diff --git a/src/main/java/com/youlai/system/enums/QueryTypeEnum.java b/src/main/java/com/youlai/system/enums/QueryTypeEnum.java
deleted file mode 100644
index 53bae2c7..00000000
--- a/src/main/java/com/youlai/system/enums/QueryTypeEnum.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package com.youlai.system.enums;
-
-import com.baomidou.mybatisplus.annotation.EnumValue;
-import com.youlai.system.common.base.IBaseEnum;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-
-/**
- * 查询类型枚举
- *
- * @author Ray
- * @since 2.10.0
- */
-@Getter
-@RequiredArgsConstructor
-public enum QueryTypeEnum implements IBaseEnum {
-
-
- EQ(1, "="),
-
-
- NE(2, "!="),
-
-
- GT(3, ">"),
-
-
- GE(4, ">="),
-
- LT(5, "<"),
-
- LE(6, "<="),
-
- BETWEEN(7, "BETWEEN"),
-
- LIKE(8, "LIKE '%s%'"),
-
- LIKE_LEFT(9, "LIKE '%s'"),
-
- LIKE_RIGHT(10, "LIKE 's%'"),
-
- IN(11, "IN"),
-
- NOT_IN(12, "NOT IN"),
-
- IS_NULL(13, "IS NULL"),
-
- IS_NOT_NULL(14, "IS NOT NULL")
- ;
-
- // Mybatis-Plus 提供注解表示插入数据库时插入该值
- @EnumValue
- private final Integer value;
-
- // @JsonValue // 表示对枚举序列化时返回此字段
- private final String label;
-
-}
diff --git a/src/main/java/com/youlai/system/mapper/DatabaseMapper.java b/src/main/java/com/youlai/system/mapper/DatabaseMapper.java
index abc91f4a..c478a817 100644
--- a/src/main/java/com/youlai/system/mapper/DatabaseMapper.java
+++ b/src/main/java/com/youlai/system/mapper/DatabaseMapper.java
@@ -11,12 +11,6 @@ import org.apache.ibatis.annotations.Mapper;
import java.util.List;
-/**
- * 数据库 Mapper 接口
- *
- * @author ray
- * @since 2.10.0
- */
@Mapper
public interface DatabaseMapper extends BaseMapper {
diff --git a/src/main/java/com/youlai/system/mapper/GenConfigMapper.java b/src/main/java/com/youlai/system/mapper/GenConfigMapper.java
deleted file mode 100644
index b0e8bd49..00000000
--- a/src/main/java/com/youlai/system/mapper/GenConfigMapper.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.youlai.system.mapper;
-
-import com.youlai.system.model.entity.GenConfig;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 代码生成基础配置访问层
- *
- * @author Ray
- * @since 2.10.0
- */
-@Mapper
-public interface GenConfigMapper extends BaseMapper {
-
-}
-
-
-
-
diff --git a/src/main/java/com/youlai/system/mapper/GenFieldConfigMapper.java b/src/main/java/com/youlai/system/mapper/GenFieldConfigMapper.java
deleted file mode 100644
index 389a7f1c..00000000
--- a/src/main/java/com/youlai/system/mapper/GenFieldConfigMapper.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.youlai.system.mapper;
-
-import com.youlai.system.model.entity.GenFieldConfig;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 代码生成字段配置访问层
- *
- * @author Ray
- * @since 2.10.0
- */
-@Mapper
-public interface GenFieldConfigMapper extends BaseMapper {
-
-}
-
-
-
-
diff --git a/src/main/java/com/youlai/system/model/entity/GenConfig.java b/src/main/java/com/youlai/system/model/entity/GenConfig.java
deleted file mode 100644
index 90a2f844..00000000
--- a/src/main/java/com/youlai/system/model/entity/GenConfig.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.youlai.system.model.entity;
-
-import com.baomidou.mybatisplus.annotation.*;
-
-import com.youlai.system.common.base.BaseEntity;
-import lombok.Data;
-
-/**
- * 代码生成基础配置
- */
-@TableName(value ="gen_config")
-@Data
-public class GenConfig extends BaseEntity {
-
- /**
- * 表名
- */
- private String tableName;
-
- /**
- * 包名
- */
- private String packageName;
-
- /**
- * 模块名
- */
- private String moduleName;
-
- /**
- * 实体名
- */
- private String entityName;
-
- /**
- * 类描述
- */
- private String comment;
-
- /**
- * 上级菜单ID
- */
- private Long parentMenuId;
-
- /**
- * 作者
- */
- private String author;
-
-
- @TableLogic
- private Integer isDeleted;
-}
\ No newline at end of file
diff --git a/src/main/java/com/youlai/system/model/entity/GenFieldConfig.java b/src/main/java/com/youlai/system/model/entity/GenFieldConfig.java
deleted file mode 100644
index 9c789670..00000000
--- a/src/main/java/com/youlai/system/model/entity/GenFieldConfig.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package com.youlai.system.model.entity;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-
-import com.youlai.system.common.base.BaseEntity;
-import com.youlai.system.enums.FormTypeEnum;
-import com.youlai.system.enums.QueryTypeEnum;
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * 字段生成配置实体
- *
- * @author Ray
- * @since 2.10.0
- */
-@TableName(value = "gen_field_config")
-@Getter
-@Setter
-public class GenFieldConfig extends BaseEntity {
-
- /**
- * 关联的配置ID
- */
- private Long configId;
-
- /**
- * 列名
- */
- private String columnName;
-
- /**
- * 列类型
- */
- private String columnType;
-
- /**
- * 字段长度
- */
- private String columnLength;
-
- /**
- * 字段名称
- */
- private String fieldName;
-
- /**
- * 字段类型
- */
- private String fieldType;
-
- /**
- * 字段描述
- */
- private String comment;
-
- /**
- * 表单类型
- */
- private FormTypeEnum formType;
-
- /**
- * 查询方式
- */
- private QueryTypeEnum queryType;
-
- /**
- * 是否在列表显示
- */
- private Integer isShowInList;
-
- /**
- * 是否在表单显示
- */
- private Integer isShowInForm;
-
- /**
- * 是否在查询条件显示
- */
- private Integer isShowInQuery;
-
- /**
- * 是否必填
- */
- private Integer isRequired;
-
-
-}
\ No newline at end of file
diff --git a/src/main/java/com/youlai/system/model/entity/SysDept.java b/src/main/java/com/youlai/system/model/entity/SysDept.java
index 37ec95d0..79be15ff 100644
--- a/src/main/java/com/youlai/system/model/entity/SysDept.java
+++ b/src/main/java/com/youlai/system/model/entity/SysDept.java
@@ -3,7 +3,6 @@ package com.youlai.system.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableLogic;
import com.youlai.system.common.base.BaseEntity;
import lombok.Getter;
import lombok.Setter;
@@ -17,6 +16,11 @@ import lombok.Setter;
@Getter
@Setter
public class SysDept extends BaseEntity {
+ /**
+ * 主键
+ */
+ @TableId(type = IdType.AUTO)
+ private Long id;
/**
* 部门名称
@@ -58,10 +62,4 @@ public class SysDept extends BaseEntity {
*/
private Long updateBy;
- /**
- * 逻辑删除标识 (0-未删除 1-已删除)
- */
- @TableLogic
- private Boolean isDeleted;
-
}
\ No newline at end of file
diff --git a/src/main/java/com/youlai/system/model/entity/SysDict.java b/src/main/java/com/youlai/system/model/entity/SysDict.java
index 655a246a..be28b821 100644
--- a/src/main/java/com/youlai/system/model/entity/SysDict.java
+++ b/src/main/java/com/youlai/system/model/entity/SysDict.java
@@ -2,7 +2,6 @@ package com.youlai.system.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableLogic;
import com.youlai.system.common.base.BaseEntity;
import lombok.Data;
@@ -14,6 +13,11 @@ import lombok.Data;
*/
@Data
public class SysDict extends BaseEntity {
+ /**
+ * 主键
+ */
+ @TableId(type = IdType.AUTO)
+ private Long id;
/**
* 类型名称
@@ -35,10 +39,4 @@ public class SysDict extends BaseEntity {
*/
private String remark;
- /**
- * 逻辑删除标识 (0-未删除 1-已删除)
- */
- @TableLogic(value = "0", delval = "1")
- private Integer isDeleted;
-
}
\ No newline at end of file
diff --git a/src/main/java/com/youlai/system/model/entity/SysRole.java b/src/main/java/com/youlai/system/model/entity/SysRole.java
index 2c8469b6..5f485a0f 100644
--- a/src/main/java/com/youlai/system/model/entity/SysRole.java
+++ b/src/main/java/com/youlai/system/model/entity/SysRole.java
@@ -2,7 +2,6 @@ package com.youlai.system.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableLogic;
import com.youlai.system.common.base.BaseEntity;
import lombok.Getter;
import lombok.Setter;
@@ -56,10 +55,4 @@ public class SysRole extends BaseEntity {
* 更新人 ID
*/
private Long updateBy;
-
- /**
- * 逻辑删除标识 (0-未删除 1-已删除)
- */
- @TableLogic(value = "0", delval = "1")
- private Boolean isDeleted;
}
\ No newline at end of file
diff --git a/src/main/java/com/youlai/system/model/entity/SysUser.java b/src/main/java/com/youlai/system/model/entity/SysUser.java
index 54fa7ae1..3375558f 100644
--- a/src/main/java/com/youlai/system/model/entity/SysUser.java
+++ b/src/main/java/com/youlai/system/model/entity/SysUser.java
@@ -2,7 +2,6 @@ package com.youlai.system.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableLogic;
import com.youlai.system.common.base.BaseEntity;
import lombok.Getter;
import lombok.Setter;
@@ -73,10 +72,4 @@ public class SysUser extends BaseEntity {
* 更新人 ID
*/
private Long updateBy;
-
- /**
- * 逻辑删除标识 (0-未删除 1-已删除)
- */
- @TableLogic(value = "0", delval = "1")
- private Integer isDeleted;
}
\ No newline at end of file
diff --git a/src/main/java/com/youlai/system/model/form/GenConfigForm.java b/src/main/java/com/youlai/system/model/form/GeneratorConfigForm.java
similarity index 51%
rename from src/main/java/com/youlai/system/model/form/GenConfigForm.java
rename to src/main/java/com/youlai/system/model/form/GeneratorConfigForm.java
index b37f1261..aa91d12d 100644
--- a/src/main/java/com/youlai/system/model/form/GenConfigForm.java
+++ b/src/main/java/com/youlai/system/model/form/GeneratorConfigForm.java
@@ -1,7 +1,5 @@
package com.youlai.system.model.form;
-import com.youlai.system.enums.FormTypeEnum;
-import com.youlai.system.enums.QueryTypeEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@@ -9,67 +7,53 @@ import java.util.List;
@Schema(description = "代码生成配置表单")
@Data
-public class GenConfigForm {
+public class GeneratorConfigForm {
@Schema(description = "表名")
private String tableName;
- @Schema(description = "类描述")
- private String comment;
-
- @Schema(description = "模块名")
- private String moduleName;
+ @Schema(description = "实体名")
+ private String entityName;
@Schema(description = "包名")
private String packageName;
- @Schema(description = "实体名")
- private String entityName;
+ @Schema(description = "模块名")
+ private String moduleName;
@Schema(description = "作者")
private String author;
- @Schema(description = "字段配置列表")
+ @Schema(description = "字段配置")
private List fieldConfigs;
@Schema(description = "字段配置")
@Data
public static class FieldConfig {
- @Schema(description = "ID")
- private Long configId;
- @Schema(description = "列名")
- private String columnName;
-
- @Schema(description = "列类型")
- private String columnType;
-
- @Schema(description = "字段名")
- private String fieldName;
+ @Schema(description = "字段名称")
+ private String name;
@Schema(description = "字段类型")
- private String fieldType;
+ private String type;
@Schema(description = "字段描述")
- private String comment;
+ private String description;
@Schema(description = "是否在列表显示")
- private Integer isShowInList;
+ private Boolean showInList;
@Schema(description = "是否在表单显示")
- private Integer isShowInForm;
+ private Boolean showInForm;
@Schema(description = "是否在查询条件显示")
- private Integer isShowInQuery;
-
- @Schema(description = "是否必填")
- private Integer isRequired;
+ private Boolean showInQuery;
@Schema(description = "表单类型")
- private FormTypeEnum formType;
+ private String formType;
- @Schema(description = "查询类型")
- private QueryTypeEnum queryType;
+ @Schema(description = "查询方式")
+ private String queryMethod;
}
}
diff --git a/src/main/java/com/youlai/system/model/vo/GeneratorPreviewVO.java b/src/main/java/com/youlai/system/model/vo/TableGeneratePreviewVO.java
similarity index 91%
rename from src/main/java/com/youlai/system/model/vo/GeneratorPreviewVO.java
rename to src/main/java/com/youlai/system/model/vo/TableGeneratePreviewVO.java
index 5fcdef89..6f0c62c8 100644
--- a/src/main/java/com/youlai/system/model/vo/GeneratorPreviewVO.java
+++ b/src/main/java/com/youlai/system/model/vo/TableGeneratePreviewVO.java
@@ -5,7 +5,7 @@ import lombok.Data;
@Schema(description = "表生成代码预览VO")
@Data
-public class GeneratorPreviewVO {
+public class TableGeneratePreviewVO {
@Schema(description = "生成文件路径")
private String path;
diff --git a/src/main/java/com/youlai/system/service/GeneratorService.java b/src/main/java/com/youlai/system/service/GeneratorService.java
index d009587f..6b96933f 100644
--- a/src/main/java/com/youlai/system/service/GeneratorService.java
+++ b/src/main/java/com/youlai/system/service/GeneratorService.java
@@ -1,16 +1,15 @@
package com.youlai.system.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.youlai.system.model.form.GenConfigForm;
import com.youlai.system.model.query.TablePageQuery;
import com.youlai.system.model.vo.TableColumnVO;
-import com.youlai.system.model.vo.GeneratorPreviewVO;
+import com.youlai.system.model.vo.TableGeneratePreviewVO;
import com.youlai.system.model.vo.TablePageVO;
import java.util.List;
/**
- * 代码生成业务接口
+ * 数据库服务接口
*
* @author haoxr
* @since 2.11.0
@@ -40,21 +39,5 @@ public interface GeneratorService {
* @param tableName 表名
* @return
*/
- List getTablePreviewData(String tableName);
-
- /**
- * 获取代码生成配置
- *
- * @param tableName 表名
- * @return
- */
- GenConfigForm getGenConfig(String tableName);
-
- /**
- * 保存代码生成配置
- *
- * @param formData 表单数据
- * @return
- */
- boolean saveGenCodeConfig(GenConfigForm formData);
+ List getTablePreviewData(String tableName);
}
diff --git a/src/main/java/com/youlai/system/service/impl/GeneratorServiceImpl.java b/src/main/java/com/youlai/system/service/impl/GeneratorServiceImpl.java
index ecbe40a3..36dfc7e3 100644
--- a/src/main/java/com/youlai/system/service/impl/GeneratorServiceImpl.java
+++ b/src/main/java/com/youlai/system/service/impl/GeneratorServiceImpl.java
@@ -1,30 +1,18 @@
package com.youlai.system.service.impl;
-import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.lang.Assert;
-import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.template.Template;
import cn.hutool.extra.template.TemplateConfig;
import cn.hutool.extra.template.TemplateEngine;
import cn.hutool.extra.template.TemplateUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.youlai.system.config.property.GeneratorProperties;
import com.youlai.system.mapper.DatabaseMapper;
-import com.youlai.system.mapper.GenConfigMapper;
-import com.youlai.system.mapper.GenFieldConfigMapper;
-import com.youlai.system.model.entity.GenConfig;
-import com.youlai.system.model.entity.GenFieldConfig;
-import com.youlai.system.model.form.GenConfigForm;
import com.youlai.system.model.query.TablePageQuery;
import com.youlai.system.model.vo.TableColumnVO;
-import com.youlai.system.model.vo.GeneratorPreviewVO;
+import com.youlai.system.model.vo.TableGeneratePreviewVO;
import com.youlai.system.model.vo.TablePageVO;
import com.youlai.system.service.GeneratorService;
import lombok.RequiredArgsConstructor;
-import org.apache.logging.log4j.util.Strings;
-import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import cn.hutool.extra.template.TemplateConfig.ResourceMode;
@@ -43,15 +31,6 @@ public class GeneratorServiceImpl implements GeneratorService {
private final DatabaseMapper databaseMapper;
- private final GeneratorProperties generatorProperties;
-
- private final GenConfigMapper genConfigMapper;
- private final GenFieldConfigMapper genFieldConfigMapper;
-
- // 注入 spring.application.name
- @Value("${spring.application.name}")
- private String applicationName;
-
/**
* 数据表分页列表
*
@@ -74,39 +53,6 @@ public class GeneratorServiceImpl implements GeneratorService {
return databaseMapper.getTableColumns(tableName);
}
- /**
- * 获取代码生成配置
- *
- * @param tableName 表名 eg: sys_user
- * @return 代码生成配置
- */
- @Override
- public GenConfigForm getGenConfig(String tableName) {
- // 查询表生成配置
- GenConfig genConfig = genConfigMapper.selectOne(
- new LambdaQueryWrapper<>(GenConfig.class)
- .eq(GenConfig::getTableName, tableName)
- .last("LIMIT 1")
- );
-
- // 查询字段生成配置
- List fieldConfigs = genFieldConfigMapper.selectList(
- new LambdaQueryWrapper<>(GenFieldConfig.class)
- .eq(GenFieldConfig::getConfigId, genConfig.getId())
- );
-
- GenConfigForm genConfigForm = new GenConfigForm();
-
-
- return null;
- }
-
- @Override
- public boolean saveGenCodeConfig(GenConfigForm formData) {
- return false;
- }
-
-
/**
* 获取预览生成代码
*
@@ -114,133 +60,49 @@ public class GeneratorServiceImpl implements GeneratorService {
* @return 预览数据
*/
@Override
- public List getTablePreviewData(String tableName) {
+ public List getTablePreviewData(String tableName) {
- List list = new ArrayList<>();
+ List list = new ArrayList<>();
- GenConfig genConfig = genConfigMapper.selectOne(new LambdaQueryWrapper()
- .eq(GenConfig::getTableName, tableName)
- );
- Assert.isTrue(genConfig != null, "未找到表生成配置");
-
- List fieldConfigs = genFieldConfigMapper.selectList(new LambdaQueryWrapper()
- .eq(GenFieldConfig::getConfigId, genConfig.getId())
- );
- Assert.isTrue(CollectionUtil.isNotEmpty(fieldConfigs), "未找到字段生成配置");
-
- // 遍历模板配置
- Map templateConfigs = generatorProperties.getTemplateConfigs();
- for (Map.Entry templateConfigEntry : templateConfigs.entrySet()) {
- GeneratorPreviewVO previewVO = new GeneratorPreviewVO();
-
- GeneratorProperties.TemplateConfig templateConfig = templateConfigEntry.getValue();
-
- /* 1. 生成文件名 UserController */
- // User Role Menu Dept
- String entityName = genConfig.getEntityName();
- // Controller Service Mapper Entity
- String templateName = templateConfigEntry.getKey();
- // .java .ts .vue
- String extension = templateConfig.getExtension();
-
- // 文件名 UserController.java
- String fileName = getFileName(entityName, templateName, extension);
- previewVO.setFileName(fileName);
+ TemplateConfig templateConfig = new TemplateConfig("templates" , ResourceMode.CLASSPATH);
+ TemplateEngine templateEngine = TemplateUtil.createEngine(templateConfig);
- /* 2. 生成文件路径 */
- // com.youlai.system
- String packageName = genConfig.getPackageName();
- // controller
- String subPackageName = templateConfig.getPackageName();
- // 文件路径 com.youlai.system.controller
- String filePath = getFilePath(templateName, packageName, subPackageName);
- previewVO.setPath(filePath);
+ Map bindingMap = new HashMap<>();
+ bindingMap.put("tableName", "sys_user");
+ bindingMap.put("author", "Ray");
+ bindingMap.put("date", DateUtil.format(new Date(), "yyyy-MM-dd HH:mm"));
+ bindingMap.put("entityName", "User" );
+ bindingMap.put("lowerFirstEntityName", "user");
+ bindingMap.put("tableComment", "用户");
- /* 3. 生成文件内容 */
+ // 包路径
+ bindingMap.put("package", "com.youlai.system");
- // 生成文件内容
- String content = getCodeContent(templateConfig, genConfig, fieldConfigs);
- previewVO.setContent(content);
+ Template template = templateEngine.getTemplate("generator" + File.separator + "controller.java.vm");
+ String content = template.render(bindingMap);
+ TableGeneratePreviewVO controller = new TableGeneratePreviewVO();
+ controller.setPath("youlai-boot/controller");
+ controller.setContent(content);
+ controller.setFileName("UserController.java");
+ list.add(controller);
+
+ TableGeneratePreviewVO vo = new TableGeneratePreviewVO();
+ vo.setPath("youlai-boot/model/vo");
+ vo.setContent(content);
+ vo.setFileName("UserVO.java");
+
+ list.add(vo);
- list.add(previewVO);
- }
return list;
}
- private String getFileName(String entityName, String templateName, String extension) {
- if (templateName.equals("Entity")) {
- return entityName + extension;
- }
- if (templateName.equals("MapperXml")) {
- return entityName + "Mapper" + extension;
- }
- if (templateName.equals("API") || templateName.equals("VIEW")) {
- return StrUtil.toSymbolCase(entityName, '-') + extension;
- }
- return entityName + templateName + extension;
+ private String generatePath(){
+
}
- private String getFilePath(String templateName, String packageName, String subPackageName) {
- String path;
- if (templateName.equals("MapperXml")) {
- path = (applicationName
- + File.separator
- + "src" + File.separator + "main" + File.separator + "resources"
- + File.separator + subPackageName
- ).replace(".", File.separator);
- } else if (templateName.equals("API") || templateName.equals("VIEW")) {
- path = ("vue3-element-admin"
- + File.separator
- + "src" + File.separator + subPackageName
- ).replace(".", File.separator);
- } else {
- path = (applicationName
- + File.separator
- + "src" + File.separator + "main" + File.separator + "java"
- + File.separator + packageName + File.separator + subPackageName
- ).replace(".", File.separator);
- }
- return path;
- }
- /**
- * 生成代码内容
- *
- * @param templateConfig 模板配置
- * @param genConfig 生成配置
- * @param fieldConfigs 字段配置
- * @return 代码内容
- */
- private String getCodeContent(GeneratorProperties.TemplateConfig templateConfig, GenConfig genConfig, List fieldConfigs) {
-
- Map bindMap = new HashMap<>();
-
- String entityName = genConfig.getEntityName();
-
- bindMap.put("package", genConfig.getPackageName());
- bindMap.put("subPackage", templateConfig.getPackageName());
- bindMap.put("date", DateUtil.format(new Date(), "yyyy-MM-dd HH:mm"));
- bindMap.put("entityName", entityName);
- bindMap.put("tableName", genConfig.getTableName());
- bindMap.put("author", genConfig.getAuthor());
- bindMap.put("lowerFirstEntityName", StrUtil.lowerFirst(entityName));
- bindMap.put("tableComment", StrUtil.replace(genConfig.getComment(), "表", Strings.EMPTY));
- bindMap.put("fieldConfigs", fieldConfigs);
-
- for (GenFieldConfig fieldConfig : fieldConfigs) {
- bindMap.put("hasLocalDateTime", "LocalDateTime".equals(fieldConfig.getFieldType()));
- bindMap.put("hasBigDecimal", "BigDecimal".equals(fieldConfig.getFieldType()));
- bindMap.put("hasRequiredField", Boolean.TRUE.equals(fieldConfig.getIsRequired()));
- }
-
- TemplateEngine templateEngine = TemplateUtil.createEngine(new TemplateConfig("templates", ResourceMode.CLASSPATH));
- Template template = templateEngine.getTemplate(templateConfig.getTemplatePath());
- String content = template.render(bindMap);
-
- return content;
- }
}
diff --git a/src/main/java/com/youlai/system/service/impl/SysDeptServiceImpl.java b/src/main/java/com/youlai/system/service/impl/SysDeptServiceImpl.java
index aa7b4ea3..da02e870 100644
--- a/src/main/java/com/youlai/system/service/impl/SysDeptServiceImpl.java
+++ b/src/main/java/com/youlai/system/service/impl/SysDeptServiceImpl.java
@@ -85,7 +85,7 @@ public class SysDeptServiceImpl extends ServiceImpl impl
return deptList.stream()
.filter(dept -> dept.getParentId().equals(parentId))
.map(dept -> {
- DeptVO deptVO = deptConverter.toVo(dept);
+ DeptVO deptVO = deptConverter.convertToVo(dept);
List children = recurDeptList(dept.getId(), deptList);
deptVO.setChildren(children);
return deptVO;
diff --git a/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java b/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java
index a8fca05a..6dddcd9b 100644
--- a/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java
+++ b/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java
@@ -157,7 +157,7 @@ public class SysUserServiceImpl extends ServiceImpl impl
* 删除用户
*
* @param idsStr 用户ID,多个以英文逗号(,)分割
- * @return
+ * @return true|false
*/
@Override
public boolean deleteUsers(String idsStr) {
@@ -175,7 +175,7 @@ public class SysUserServiceImpl extends ServiceImpl impl
*
* @param userId 用户ID
* @param password 用户密码
- * @return
+ * @return true|false
*/
@Override
public boolean updatePassword(Long userId, String password) {
diff --git a/src/main/resources/application-generator.yml b/src/main/resources/application-generator.yml
index 2a7e3996..d3edd2a5 100644
--- a/src/main/resources/application-generator.yml
+++ b/src/main/resources/application-generator.yml
@@ -3,41 +3,7 @@ generator:
## 模板配置
templateConfigs:
Controller:
- templatePath: generator/controller.java.vm
- packageName: controller
- Service:
- templatePath: generator/service.java.vm
- packageName: service
- ServiceImpl:
- templatePath: generator/serviceImpl.java.vm
- packageName: service.impl
- Mapper:
- templatePath: generator/mapper.java.vm
- packageName: mapper
- MapperXml:
- templatePath: generator/mapper.xml.vm
- packageName: mapper
- extension: .xml
- Query:
- templatePath: generator/query.java.vm
- packageName: model.query
- Form:
- templatePath: generator/form.java.vm
- packageName: model.form
- VO:
- templatePath: generator/vo.java.vm
- packageName: model.vo
- Entity:
- templatePath: generator/entity.java.vm
- packageName: model.entity
- API:
- templatePath: generator/api.ts.vm
- packageName: api
- extension: .ts
- VIEW:
- templatePath: generator/index.vue.vm
- packageName: views
- extension: .vue
-
-
-
+ ## 模板路径
+ templatePath: templates/generator/controller.java.vm
+ ## 包名
+ packageName: controller
\ No newline at end of file
diff --git a/src/main/resources/mapper/GenConfigMapper.xml b/src/main/resources/mapper/GenConfigMapper.xml
deleted file mode 100644
index ba394cd3..00000000
--- a/src/main/resources/mapper/GenConfigMapper.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
diff --git a/src/main/resources/mapper/GenFieldConfigMapper.xml b/src/main/resources/mapper/GenFieldConfigMapper.xml
deleted file mode 100644
index 03607e26..00000000
--- a/src/main/resources/mapper/GenFieldConfigMapper.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- id,config_id,name,
- type,description,show_in_list,
- show_in_form,show_in_query,form_type,
- query_method,create_time,update_time
-
-
diff --git a/src/main/resources/templates/generator/api.ts.vm b/src/main/resources/templates/generator/api.ts.vm
deleted file mode 100644
index 4fb19ad1..00000000
--- a/src/main/resources/templates/generator/api.ts.vm
+++ /dev/null
@@ -1,121 +0,0 @@
-import request from "@/utils/request";
-
-const ${className.toUpperCase()}_BASE_URL = "/api/v1/${className.toLowerCase()}s";
-
-class ${className}API {
- /** 获取${className}分页数据 */
- static getPage(queryParams?: ${className}PageQuery) {
- return request>({
- url: `${${className.toUpperCase()}_BASE_URL}/page`,
- method: "get",
- params: queryParams,
- });
- }
-
- /** 获取${className}下拉数据源 */
- static getOptions() {
- return request({
- url: `${${className.toUpperCase()}_BASE_URL}/options`,
- method: "get",
- });
- }
-
- /**
- * 获取${className}的菜单ID集合
- *
- * @param ${className.toLowerCase()}Id ${className}ID
- * @returns ${className}的菜单ID集合
- */
- static get${className}MenuIds(${className.toLowerCase()}Id: number) {
- return request({
- url: `${${className.toUpperCase()}_BASE_URL}/${${className.toLowerCase()}Id}/menuIds`,
- method: "get",
- });
- }
-
- /**
- * 分配菜单权限
- *
- * @param ${className.toLowerCase()}Id ${className}ID
- * @param data 菜单ID集合
- */
- static update${className}Menus(${className.toLowerCase()}Id: number, data: number[]) {
- return request({
- url: `${${className.toUpperCase()}_BASE_URL}/${${className.toLowerCase()}Id}/menus`,
- method: "put",
- data: data,
- });
- }
-
- /**
- * 获取${className}表单数据
- *
- * @param id ${className}ID
- * @returns ${className}表单数据
- */
- static getFormData(id: number) {
- return request({
- url: `${${className.toUpperCase()}_BASE_URL}/${id}/form`,
- method: "get",
- });
- }
-
- /** 添加${className} */
- static add(data: ${className}Form) {
- return request({
- url: `${${className.toUpperCase()}_BASE_URL}`,
- method: "post",
- data: data,
- });
- }
-
- /**
- * 更新${className}
- *
- * @param id ${className}ID
- * @param data ${className}表单数据
- */
- static update(id: number, data: ${className}Form) {
- return request({
- url: `${${className.toUpperCase()}_BASE_URL}/${id}`,
- method: "put",
- data: data,
- });
- }
-
- /**
- * 批量删除${className},多个以英文逗号(,)分割
- *
- * @param ids ${className}ID字符串,多个以英文逗号(,)分割
- */
- static deleteByIds(ids: string) {
- return request({
- url: `${${className.toUpperCase()}_BASE_URL}/${ids}`,
- method: "delete",
- });
- }
-}
-
-export default ${className}API;
-
-/** ${className}分页查询参数 */
-export interface ${className}PageQuery extends PageQuery {
- /** 搜索关键字 */
- keywords?: string;
-}
-
-/** ${className}分页对象 */
-export interface ${className}PageVO {
- #foreach($field in $fields)
- /** ${field.comment} */
- ${field.name}?: ${field.type};
- #end
-}
-
-/** ${className}表单对象 */
-export interface ${className}Form {
- #foreach($field in $fields)
- /** ${field.comment} */
- ${field.name}?: ${field.type};
- #end
-}
diff --git a/src/main/resources/templates/generator/controller.java.vm b/src/main/resources/templates/generator/controller.java.vm
index 4b3305be..6cf522ff 100644
--- a/src/main/resources/templates/generator/controller.java.vm
+++ b/src/main/resources/templates/generator/controller.java.vm
@@ -7,8 +7,8 @@ import ${package}.model.form.${entityName}Form;
import ${package}.model.query.${entityName}PageQuery;
import ${package}.model.vo.${entityName}PageVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.youlai.system.common.result.PageResult;
-import com.youlai.system.common.result.Result;
+import com.youlai.common.result.PageResult;
+import com.youlai.common.result.Result;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
@@ -17,7 +17,7 @@ import org.springframework.web.bind.annotation.*;
import jakarta.validation.Valid;
/**
- * $!{tableComment}前端控制层
+ * $!{tableComment} 前端控制器
*
* @author ${author}
* @since ${date}
@@ -44,7 +44,7 @@ public class ${entityName}Controller {
return Result.judge(result);
}
- @Operation(summary = "获取$!{tableComment}表单数据")
+ @Operation(summary = "$!{tableComment}表单数据")
@GetMapping("/{id}/form")
public Result<${entityName}Form> get${entityName}Form(
@Parameter(description = "$!{tableComment}ID") @PathVariable Long id
diff --git a/src/main/resources/templates/generator/converter.java.vm b/src/main/resources/templates/generator/converter.java.vm
index 6907a4d5..45a65a30 100644
--- a/src/main/resources/templates/generator/converter.java.vm
+++ b/src/main/resources/templates/generator/converter.java.vm
@@ -6,7 +6,7 @@ import ${package}.model.entity.${entityName};
import ${package}.model.form.${entityName}Form;
/**
- * $!{tableComment}对象转换器
+ * $!{tableComment}转换器
*
* @author ${author}
* @since ${date}
diff --git a/src/main/resources/templates/generator/entity.java.vm b/src/main/resources/templates/generator/entity.java.vm
index ca994871..dd975f7c 100644
--- a/src/main/resources/templates/generator/entity.java.vm
+++ b/src/main/resources/templates/generator/entity.java.vm
@@ -23,14 +23,13 @@ import com.youlai.system.common.base.BaseEntity;
public class ${entityName} extends BaseEntity {
private static final long serialVersionUID = 1L;
-#if($fieldConfigs)
- #foreach($fieldConfig in ${fieldConfigs})
- #if("$!fieldConfig.fieldComment" != "")
+
+#foreach($field in ${table.fields})
+#if("$!field.comment" != "")
/**
- * ${fieldConfig.fieldComment}
+ * ${field.comment}
*/
- #end
- private ${fieldConfig.fieldType} ${fieldConfig.fieldName};
- #end
+#end
+ private ${field.propertyType} ${field.propertyName};
#end
}
diff --git a/src/main/resources/templates/generator/form.java.vm b/src/main/resources/templates/generator/form.java.vm
index ea493d0f..0ba5d808 100644
--- a/src/main/resources/templates/generator/form.java.vm
+++ b/src/main/resources/templates/generator/form.java.vm
@@ -1,4 +1,4 @@
-package ${package}.${subPackage};
+package ${package}.model.form;
import java.io.Serial;
import java.io.Serializable;
@@ -11,12 +11,10 @@ import java.time.LocalDateTime;
#if(${hasBigDecimal})
import java.math.BigDecimal;
#end
-#if(${hasRequiredField})
-import jakarta.validation.constraints.*;
-#end
+
/**
- * $!{tableComment}表单对象
+ * $!{tableComment} 表单对象
*
* @author ${author}
* @since ${date}
@@ -30,22 +28,10 @@ public class ${entityName}Form implements Serializable {
private static final long serialVersionUID = 1L;
## ---------- BEGIN 字段循环遍历 ----------
-#if($fieldConfigs)
- #foreach($fieldConfig in ${fieldConfigs})
- #if($fieldConfig.showInForm)
- #if($fieldConfig.isRequired)
- #if($fieldConfig.fieldType == 'String')
- @NotBlank(message = "$fieldConfig.fieldComment不能为空")
- #else
- @NotNull(message = "$fieldConfig.fieldComment不能为空")
- #end
- #end
- #if("$!fieldConfig.fieldComment" != "")
- @Schema(description = "${fieldConfig.fieldComment}")
- #end
- private ${fieldConfig.fieldType} ${fieldConfig.fieldName};
- #end
+#foreach($field in ${fields})
+ #if("$!field.comment" != "")
+ @Schema(description = "${field.comment}")
#end
+ private ${field.propertyType} ${field.propertyName};
#end
-
}
diff --git a/src/main/resources/templates/generator/index.vue.vm b/src/main/resources/templates/generator/index.vue.vm
deleted file mode 100644
index bdd146fa..00000000
--- a/src/main/resources/templates/generator/index.vue.vm
+++ /dev/null
@@ -1,178 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- 搜索
-
-
-
- 重置
-
-
-
-
-
-
-
-
-
- 新增
-
-
-
- 删除
-
-
-
-
-
- #foreach($field in $fields)
-
- #end
-
-
-
-
-
- 编辑
-
-
-
- 删除
-
-
-
-
-
-
-
-
-
-
-
- #foreach($field in $fields)
-
-
-
- #end
-
-
-
-
-
-
-
-
-
-