Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/master'

Administrator 4 gadi atpakaļ
vecāks
revīzija
0e38ad74b6
24 mainītis faili ar 1048 papildinājumiem un 207 dzēšanām
  1. 25 0
      boman-api/boman-api-system/src/main/java/com/boman/system/api/RemoteDeptService.java
  2. 15 0
      boman-api/boman-api-system/src/main/java/com/boman/system/api/model/LoginUser.java
  3. 20 0
      boman-api/boman-domain/src/main/java/com.boman.domain/UserEnvConstant.java
  4. 0 0
      boman-common/boman-common-security/src/main/java/com/boman/common/security/service/TokenService.java
  5. 55 0
      boman-jflows/pom.xml
  6. 13 0
      boman-jflows/src/main/java/com/boman/jflow/BomanJflowApplication.java
  7. 1 0
      boman-jflows/src/main/resources/application.properties
  8. 13 0
      boman-jflows/src/test/java/com/boman/jflow/BomanJflowApplicationTests.java
  9. 10 0
      boman-modules/boman-system/src/main/java/com/boman/system/controller/SysDeptController.java
  10. 24 0
      boman-web-core/src/main/java/com/boman/web/core/constant/MaskConstant.java
  11. 15 0
      boman-web-core/src/main/java/com/boman/web/core/domain/ActionType.java
  12. 161 0
      boman-web-core/src/main/java/com/boman/web/core/domain/TableContext.java
  13. 60 25
      boman-web-core/src/main/java/com/boman/web/core/service/TableServiceCmdService.java
  14. 41 29
      boman-web-core/src/main/java/com/boman/web/core/service/save/BaseSaveServiceImpl.java
  15. 4 10
      boman-web-core/src/main/java/com/boman/web/core/service/save/IBaseSaveService.java
  16. 15 11
      boman-web-core/src/main/java/com/boman/web/core/service/update/BaseUpdateServiceImpl.java
  17. 4 7
      boman-web-core/src/main/java/com/boman/web/core/service/update/IBaseUpdateService.java
  18. 78 0
      boman-web-core/src/main/java/com/boman/web/core/utils/ColumnUtils.java
  19. 16 0
      ruoyi-ui/src/api/tool/gen.js
  20. 56 14
      ruoyi-ui/src/views/system/table/index.vue
  21. 72 18
      ruoyi-ui/src/views/tool/gen/basicInfoForm.vue
  22. 170 63
      ruoyi-ui/src/views/tool/gen/editTable.vue
  23. 19 19
      ruoyi-ui/src/views/tool/gen/genInfoForm.vue
  24. 161 11
      ruoyi-ui/src/views/tool/gen/index.vue

+ 25 - 0
boman-api/boman-api-system/src/main/java/com/boman/system/api/RemoteDeptService.java

@@ -0,0 +1,25 @@
+package com.boman.system.api;
+
+import com.boman.common.core.constant.ServiceNameConstants;
+import com.boman.system.api.domain.SysDept;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+
+/**
+ * @author shiqian
+ * @date 2021年04月07日 10:31
+ **/
+@FeignClient(contextId = "remoteDeptService", value = ServiceNameConstants.SYSTEM_SERVICE)
+public interface RemoteDeptService {
+
+    /**
+     * 功能描述: 根据id查找
+     *
+     * @param id deptId
+     * @return com.boman.common.core.web.domain.AjaxResult
+     */
+    @GetMapping(value = "/dept/getById/{id}")
+    SysDept getById(@PathVariable("id") Long id);
+}
+

+ 15 - 0
boman-api/boman-api-system/src/main/java/com/boman/system/api/model/LoginUser.java

@@ -2,6 +2,8 @@ package com.boman.system.api.model;
 
 import java.io.Serializable;
 import java.util.Set;
+
+import com.alibaba.fastjson.JSONObject;
 import com.boman.system.api.domain.SysUser;
 
 /**
@@ -58,6 +60,11 @@ public class LoginUser implements Serializable
      */
     private SysUser sysUser;
 
+    /**
+     * 用户变量
+     */
+    private JSONObject userEnv;
+
     public String getToken()
     {
         return token;
@@ -147,4 +154,12 @@ public class LoginUser implements Serializable
     {
         this.sysUser = sysUser;
     }
+
+    public JSONObject getUserEnv() {
+        return userEnv;
+    }
+
+    public void setUserEnv(JSONObject userEnv) {
+        this.userEnv = userEnv;
+    }
 }

+ 20 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/UserEnvConstant.java

@@ -0,0 +1,20 @@
+package com.boman.domain;
+
+
+
+/**
+ * @author shiqian
+ * @date 2021年04月14日 09:46
+ **/
+public class UserEnvConstant {
+
+
+    public static String USER_ID = "user.id";
+    public static final String USERNAME = "user.name";
+    public static final String USER_DEPT_ID = "user.dept.id";
+    public static final String USER_DEPT_NAME = "user.dept.name";
+    public static final String USER_PARENT_DEPT_ID = "user.parent.dept.id";
+    public static final String USER_PARENT_DEPT_NAME = "user.parent.dept.name";
+
+
+}

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
boman-common/boman-common-security/src/main/java/com/boman/common/security/service/TokenService.java


+ 55 - 0
boman-jflows/pom.xml

@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.springframework.boot</groupId>
+		<artifactId>spring-boot-starter-parent</artifactId>
+		<version>2.4.4</version>
+		<relativePath/> <!-- lookup parent from repository -->
+	</parent>
+	<groupId>com.boman</groupId>
+	<artifactId>boman-jflow</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+	<name>boman-jflow</name>
+	<description>Demo project for Spring Boot</description>
+	<properties>
+		<java.version>1.8</java.version>
+	</properties>
+	<dependencies>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-web</artifactId>
+		</dependency>
+
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-test</artifactId>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.springframework.boot</groupId>
+				<artifactId>spring-boot-maven-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+	<repositories>
+		<repository>
+			<id>spring-milestones</id>
+			<name>Spring Milestones</name>
+			<url>https://repo.spring.io/milestone</url>
+		</repository>
+	</repositories>
+	<pluginRepositories>
+		<pluginRepository>
+			<id>spring-milestones</id>
+			<name>Spring Milestones</name>
+			<url>https://repo.spring.io/milestone</url>
+		</pluginRepository>
+	</pluginRepositories>
+
+</project>

+ 13 - 0
boman-jflows/src/main/java/com/boman/jflow/BomanJflowApplication.java

@@ -0,0 +1,13 @@
+package com.boman.jflow;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class BomanJflowApplication {
+
+	public static void main(String[] args) {
+		SpringApplication.run(BomanJflowApplication.class, args);
+	}
+
+}

+ 1 - 0
boman-jflows/src/main/resources/application.properties

@@ -0,0 +1 @@
+

+ 13 - 0
boman-jflows/src/test/java/com/boman/jflow/BomanJflowApplicationTests.java

@@ -0,0 +1,13 @@
+package com.boman.jflow;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class BomanJflowApplicationTests {
+
+	@Test
+	void contextLoads() {
+	}
+
+}

+ 10 - 0
boman-modules/boman-system/src/main/java/com/boman/system/controller/SysDeptController.java

@@ -78,6 +78,16 @@ public class SysDeptController extends BaseController
         return AjaxResult.success(deptService.selectDeptById(id));
     }
 
+    /**
+     * 根据部门编号获取详细信息
+     */
+    @PreAuthorize(hasPermi = "system:dept:query")
+    @GetMapping(value = "/getById/{id}")
+    public SysDept getById(@PathVariable("id") Long id)
+    {
+        return deptService.selectDeptById(id);
+    }
+
     /**
      * 获取部门下拉树列表
      */

+ 24 - 0
boman-web-core/src/main/java/com/boman/web/core/constant/MaskConstant.java

@@ -0,0 +1,24 @@
+package com.boman.web.core.constant;
+
+
+/**
+ * @author shiqian
+ * @date 2021年04月13日 13:29
+ **/
+public class MaskConstant {
+
+    /**  新增可修改  **/
+    public static final String INSERT_CAN_EDIT = "1";
+
+    /**  新增可见  **/
+    public static final String INSERT_VISIBLE = "1";
+
+    /**  修改可修改  **/
+    public static final String UPDATE_CAN_EDIT = "1";
+
+    /**  修改可见  **/
+    public static final String UPDATE_VISIBLE = "1";
+
+    /**  列表可修改  **/
+    public static final String LIST_CAN_EDIT = "1";
+}

+ 15 - 0
boman-web-core/src/main/java/com/boman/web/core/domain/ActionType.java

@@ -0,0 +1,15 @@
+package com.boman.web.core.domain;
+
+
+/**
+ * @author shiqian
+ * @date 2021年04月13日 14:38
+ **/
+public enum ActionType {
+
+    /**  新增 */
+    INSERT,
+
+    /**  修改 */
+    UPDATE
+}

+ 161 - 0
boman-web-core/src/main/java/com/boman/web/core/domain/TableContext.java

@@ -0,0 +1,161 @@
+package com.boman.web.core.domain;
+
+import com.alibaba.fastjson.JSONObject;
+import com.boman.common.core.utils.SpringUtils;
+import com.boman.common.redis.RedisKey;
+import com.boman.common.redis.service.RedisService;
+import com.boman.gen.domain.GenTable;
+import com.boman.gen.domain.GenTableColumn;
+import com.boman.web.core.utils.IdUtils;
+
+import java.sql.Timestamp;
+import java.util.List;
+import java.util.Map;
+
+import static com.boman.common.core.utils.obj.ObjectUtils.ltZero;
+import static com.boman.common.core.utils.obj.ObjectUtils.requireNonNull;
+import static com.boman.web.core.constant.MaskConstant.*;
+
+/**
+ * @author shiqian
+ * @date 2021年04月13日 11:07
+ **/
+public class TableContext {
+
+    private Long id;
+    private String pkName;
+    private GenTable table;
+    private ActionType actionType;
+    private String tableName;
+    private JSONObject fixedData;
+    private JSONObject commitData;
+    private List<GenTableColumn> columns;
+
+    public static TableContext createContext(BaseTableSaveDTO dto) {
+        TableContext context = new TableContext();
+        context.setId(dto.getObjId());
+        String tableName = requireNonNull(dto.getTable(), "tableName is empty");
+        context.setTableName(tableName);
+
+        RedisService redisService = SpringUtils.getBean(RedisService.class);
+        GenTable table = redisService.getCacheObject(RedisKey.TABLE_INFO + tableName);
+        context.setTable(requireNonNull(table, "redis中没有此表,表名: " + tableName));
+
+        List<GenTableColumn> columns = table.getColumns();
+        context.setColumns(columns);
+
+        String pkName = IdUtils.getPkName(columns);
+        context.setPkName(pkName);
+
+        JSONObject fixedData = requireNonNull(dto.getFixedData(), "fixedData is empty");
+        context.setFixedData(fixedData);
+
+        JSONObject commitData = new JSONObject();
+        packCommitData(dto, context, columns, fixedData, commitData);
+        context.setCommitData(commitData);
+
+        return context;
+
+    }
+
+    private static void packCommitData(BaseTableSaveDTO dto, TableContext context, List<GenTableColumn> columns
+            , JSONObject fixedData, JSONObject commitData) {
+        boolean isInsert = ltZero(dto.getObjId());
+        context.setActionType(isInsert ? ActionType.INSERT : ActionType.UPDATE);
+        for (GenTableColumn column : columns) {
+            String[] maskArray = requireNonNull(column.getMask(), "mask is empty").split("");
+            assert maskArray.length == 6;
+            // 新增可见 修改可见
+            String insertVisible = maskArray[0], updateVisible = maskArray[2];
+            // 新增可修改 修改可修改
+            String insertCanEdit = maskArray[1], updateCanEdit = maskArray[3];
+            for (Map.Entry<String, Object> entry : fixedData.entrySet()) {
+                if (column.getColumnName().equalsIgnoreCase(entry.getKey())) {
+                    // 新增
+                    if (isInsert) {
+                        // 新增可修改, 并且新增可见,把新增的字段单独拿出来
+                        if (INSERT_CAN_EDIT.equals(insertCanEdit) && INSERT_VISIBLE.equals(insertVisible)) {
+                            commitData.put(entry.getKey(), entry.getValue());
+                        } else {
+                            // ignore
+                        }
+                    } else {
+                        // 编辑可修改, 并且编辑可见
+                        if (UPDATE_CAN_EDIT.equals(updateCanEdit) && UPDATE_VISIBLE.equals(updateVisible)) {
+                            commitData.put(entry.getKey(), entry.getValue());
+                        } else {
+                            // ignore
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+
+    /**                 get and set                               **/
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getPkName() {
+        return pkName;
+    }
+
+    public void setPkName(String pkName) {
+        this.pkName = pkName;
+    }
+
+    public GenTable getTable() {
+        return table;
+    }
+
+    public void setTable(GenTable table) {
+        this.table = table;
+    }
+
+    public String getTableName() {
+        return tableName;
+    }
+
+    public void setTableName(String tableName) {
+        this.tableName = tableName;
+    }
+
+    public JSONObject getFixedData() {
+        return fixedData;
+    }
+
+    public void setFixedData(JSONObject fixedData) {
+        this.fixedData = fixedData;
+    }
+
+    public JSONObject getCommitData() {
+        return commitData;
+    }
+
+    public void setCommitData(JSONObject commitData) {
+        this.commitData = commitData;
+    }
+
+    public List<GenTableColumn> getColumns() {
+        return columns;
+    }
+
+    public void setColumns(List<GenTableColumn> columns) {
+        this.columns = columns;
+    }
+
+    public ActionType getActionType() {
+        return actionType;
+    }
+
+    public void setActionType(ActionType actionType) {
+        this.actionType = actionType;
+    }
+}

+ 60 - 25
boman-web-core/src/main/java/com/boman/web/core/service/TableServiceCmdService.java

@@ -74,43 +74,76 @@ public class TableServiceCmdService {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(TableServiceCmdService.class);
 
-    private BaseTableDTO packTableDTO(BaseTableSaveDTO baseTableSaveDTO) {
-        BaseTableDTO baseTableDTO = new BaseTableDTO();
-        baseTableDTO.setFixedData(baseTableSaveDTO.getFixedData());
-        baseTableDTO.setObjId(baseTableSaveDTO.getObjId());
-        baseTableDTO.setTable(baseTableSaveDTO.getTable());
-        return baseTableDTO;
-    }
-
-    public final AjaxResult objectSave(BaseTableSaveDTO baseTableSaveDTO) {
+//    private BaseTableDTO packTableDTO(BaseTableSaveDTO baseTableSaveDTO) {
+//        BaseTableDTO baseTableDTO = new BaseTableDTO();
+//        baseTableDTO.setFixedData(baseTableSaveDTO.getFixedData());
+//        baseTableDTO.setObjId(baseTableSaveDTO.getObjId());
+//        baseTableDTO.setTable(baseTableSaveDTO.getTable());
+//        return baseTableDTO;
+//    }
+
+//    public final AjaxResult objectSave(BaseTableSaveDTO baseTableSaveDTO) {
+//        AjaxResult result = AjaxResult.success();
+//        BaseTableDTO baseTableDTO = packTableDTO(baseTableSaveDTO);
+//        TableServiceContext context = TableServiceContext.createFrom(baseTableDTO);
+//        // 拿到pkName和maxId
+//        List<GenTableColumn> columns = context.getTable().getColumns();
+//        String pkName = IdUtils.getPkName(columns);
+//        requireNonNull(pkName, "主键名称为空");
+//
+//        // 新增
+//        if (ObjectUtils.ltZero(baseTableDTO.getObjId())) {
+//            Long maxId = IdUtils.getMaxId(baseTableDTO.getTable(), pkName);
+//            RowResult rowResult = saveService.insertRow(context.getRealTableName(), pkName, maxId, context.getRows().get(0), columns);
+//            if (RowResult.checkSuccess(rowResult)) {
+//                LOGGER.info("保存成功,封装到数据库的数据为: {}", JSON.toJSONString(rowResult.getData()));
+//            } else {
+//                LOGGER.error("保存失败,保持的原始数据为: {}", JSON.toJSONString(baseTableSaveDTO));
+//                result = AjaxResult.error();
+//            }
+//        }else {
+//            JSONObject commitData = context.getRows().get(0).getCommitData();
+//
+//            // 编辑
+//            int effective = updateService.updateByIdList(context, pkName
+//                    , Collections.singletonList(baseTableDTO.getObjId()), commitData);
+//            if (effective > 0) {
+//                LOGGER.info("修改成功,封装到数据库的数据为: {}", JSON.toJSONString(context.getRows().get(0).getCommitData()));
+//            } else {
+//                LOGGER.error("修改失败,前台传来的原始数据为: {}", JSON.toJSONString(context.getRows().get(0).getCommitData()));
+//                result = AjaxResult.error();
+//            }
+//        }
+//
+//        return result;
+//
+//    }
+
+    public final AjaxResult objectSave(BaseTableSaveDTO dto) {
         AjaxResult result = AjaxResult.success();
-        BaseTableDTO baseTableDTO = packTableDTO(baseTableSaveDTO);
-        TableServiceContext context = TableServiceContext.createFrom(baseTableDTO);
+
+        TableContext context = TableContext.createContext(dto);
         // 拿到pkName和maxId
-        List<GenTableColumn> columns = context.getTable().getColumns();
-        String pkName = IdUtils.getPkName(columns);
-        requireNonNull(pkName, "主键名称为空");
+        String pkName = context.getPkName();
+        JSONObject commitData = context.getCommitData();
 
         // 新增
-        if (ObjectUtils.ltZero(baseTableDTO.getObjId())) {
-            Long maxId = IdUtils.getMaxId(baseTableDTO.getTable(), pkName);
-            RowResult rowResult = saveService.insertRow(context.getRealTableName(), pkName, maxId, context.getRows().get(0), columns);
+        if (ActionType.INSERT.equals(context.getActionType())) {
+            Long maxId = IdUtils.getMaxId(dto.getTable(), pkName);
+            RowResult rowResult = saveService.insertRow(context, maxId);
             if (RowResult.checkSuccess(rowResult)) {
                 LOGGER.info("保存成功,封装到数据库的数据为: {}", JSON.toJSONString(rowResult.getData()));
             } else {
-                LOGGER.error("保存失败,保持的原始数据为: {}", JSON.toJSONString(baseTableSaveDTO));
+                LOGGER.error("保存失败,保持的原始数据为: {}", JSON.toJSONString(dto));
                 result = AjaxResult.error();
             }
-        }else {
-            JSONObject commitData = context.getRows().get(0).getCommitData();
-
+        } else {
             // 编辑
-            int effective = updateService.updateByIdList(context, pkName
-                    , Collections.singletonList(baseTableDTO.getObjId()), commitData);
+            int effective = updateService.updateByIdList(context, Collections.singletonList(context.getId()));
             if (effective > 0) {
-                LOGGER.info("修改成功,封装到数据库的数据为: {}", JSON.toJSONString(context.getRows().get(0).getCommitData()));
+                LOGGER.info("修改成功,封装到数据库的数据为: {}", JSON.toJSONString(commitData));
             } else {
-                LOGGER.error("修改失败,前台传来的原始数据为: {}", JSON.toJSONString(context.getRows().get(0).getCommitData()));
+                LOGGER.error("修改失败,前台传来的原始数据为: {}", JSON.toJSONString(commitData));
                 result = AjaxResult.error();
             }
         }
@@ -663,6 +696,8 @@ public class TableServiceCmdService {
         requireNonNull(condition.getIsUi(), "根据表名获取表字段,未传 isUi 这个字段");
         GenTable genTable = getTableFromRedisByTableName(RedisKey.TABLE_INFO, condition.getTable());
         List<GenTableColumn> allColumns = genTable.getColumns();
+        // 把新增可见的列过滤出来
+//        List<GenTableColumn> returnData = ColumnUtils.filterNeedShowData(allColumns, 0, INSERT_VISIBLE::equals);
         // 普通的展示,不带折叠的
         if (BooleanUtils.isFalse(condition.getIsUi())) {
             packDictDataToColumns(allColumns, ObjectUtils::isNotEmpty);

+ 41 - 29
boman-web-core/src/main/java/com/boman/web/core/service/save/BaseSaveServiceImpl.java

@@ -1,12 +1,17 @@
 package com.boman.web.core.service.save;
 
 import com.alibaba.fastjson.JSONObject;
+import com.boman.common.core.constant.CacheConstants;
 import com.boman.common.core.utils.SecurityUtils;
+import com.boman.common.core.utils.obj.ObjectUtils;
+import com.boman.common.redis.service.RedisService;
 import com.boman.gen.domain.GenTableColumn;
+import com.boman.system.api.model.LoginUser;
 import com.boman.web.core.constant.FormDataConstant;
-import com.boman.web.core.domain.MainTableRecord;
 import com.boman.web.core.domain.RowResult;
+import com.boman.web.core.domain.TableContext;
 import com.boman.web.core.mapper.StandardlyMapper;
+import com.boman.web.core.utils.ColumnUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -27,46 +32,35 @@ public class BaseSaveServiceImpl implements IBaseSaveService {
 
     @Autowired
     private StandardlyMapper mapper;
+    @Autowired
+    private RedisService redisService;
 
     /**
      * 功能描述: 保存一行
      *
-     * @param tableName tableName
-     * @param pkName    主键名称
-     * @param maxId     最大的SEQ
-     * @param row       要保存的数据
-     * @param columns   这是此表的所有字段属性名称,用来判断是否所有UPDATE_BY和UPDATE_TIME,和时间类型
+     * @param context context
+     * @param maxId   最大的SEQ
      * @return com.boman.system.common.RowResult
      */
     @Override
-    public RowResult insertRow(String tableName, String pkName, Long maxId, MainTableRecord row, List<GenTableColumn> columns) {
-        JSONObject commitData = row.getMainData().getCommitData();
+    public RowResult insertRow(TableContext context, Long maxId) {
+        List<GenTableColumn> columns = context.getColumns();
+        JSONObject commitData = context.getCommitData();
+        String pkName = context.getPkName();
+        String tableName = context.getTableName();
         Timestamp currentTime = new Timestamp(System.currentTimeMillis());
-        for (GenTableColumn column : columns) {
-            // 判断是否有修改人、修改时间
-            if (column.getColumnName().equalsIgnoreCase(FormDataConstant.UPDATE_BY)) {
-                commitData.put(FormDataConstant.UPDATE_BY, SecurityUtils.getUserId());
-            }
-            if (column.getColumnName().equalsIgnoreCase(FormDataConstant.UPDATE_TIME)) {
-                commitData.put(FormDataConstant.UPDATE_TIME, currentTime);
-            }
-
-            // 如果某一列是datetime类型,需要把类型转成datetime,否则数据库会报错
-            if (FormDataConstant.DATETIME.equalsIgnoreCase(column.getColumnType())) {
-                String columnName = column.getColumnName().toUpperCase();
-                commitData.put(columnName, commitData.getTimestamp(columnName));
-            }
-        }
+        commitData.put(pkName.toUpperCase(), maxId);
 
-        // 新增
-        if (row.getId() > 0) {
-            commitData.put(FormDataConstant.UPDATE_TIME, currentTime);
-            commitData.put(FormDataConstant.UPDATE_BY, SecurityUtils.getUserId());
-        }
+        ColumnUtils.packUpdateByAndTime(columns, commitData, currentTime);
+        // 处理默认值
+        handlerDefaultValue(commitData, columns);
 
-        commitData.put(pkName.toUpperCase(), maxId);
+        // 默认创建人和创建时间是都有的
+        commitData.put(FormDataConstant.CREATE_TIME.toUpperCase(), currentTime);
+        commitData.put(FormDataConstant.CREATE_BY.toUpperCase(), "张三");
         int ret = mapper.insert(tableName, commitData);
         if (ret > 0) {
+            LOGGER.info("保存成功,保存的数据为:{}", commitData);
             commitData.put(FormDataConstant.SUCCESS_CNT, ret);
             return RowResult.ok("保存成功", commitData);
         }
@@ -74,4 +68,22 @@ public class BaseSaveServiceImpl implements IBaseSaveService {
         return RowResult.error("失败");
     }
 
+    private void handlerDefaultValue(JSONObject jsonObject, List<GenTableColumn> columns) {
+        String token = SecurityUtils.getToken();
+        LoginUser loginUser = redisService.getCacheObject(CacheConstants.LOGIN_TOKEN_KEY + token);
+        JSONObject userEnv = loginUser.getUserEnv();
+        for (GenTableColumn column : columns) {
+            // 有默认值的列, 并且前台传过来的key中不包含
+            if (ObjectUtils.isNotEmpty(column.getDefaultValue())
+                    && !jsonObject.containsKey(column.getColumnName().toLowerCase())
+                    && !jsonObject.containsKey(column.getColumnName().toUpperCase())) {
+                String dbDefaultValue = column.getDefaultValue();
+                String defaultValue = ColumnUtils.parseVariables(dbDefaultValue);
+                String variables = dbDefaultValue.equalsIgnoreCase(defaultValue) ? dbDefaultValue : userEnv.getString(defaultValue);
+                jsonObject.put(column.getColumnName(), variables);
+            }
+        }
+    }
+
+
 }

+ 4 - 10
boman-web-core/src/main/java/com/boman/web/core/service/save/IBaseSaveService.java

@@ -1,11 +1,8 @@
 package com.boman.web.core.service.save;
 
 
-import com.boman.gen.domain.GenTableColumn;
-import com.boman.web.core.domain.MainTableRecord;
 import com.boman.web.core.domain.RowResult;
-
-import java.util.List;
+import com.boman.web.core.domain.TableContext;
 
 /**
  * @author shiqian
@@ -18,13 +15,10 @@ public interface IBaseSaveService {
     /**
      * 功能描述: 保存一行
      *
-     * @param tableName tableName
-     * @param pkName    主键名称
-     * @param maxId     最大的SEQ
-     * @param row       要保存的数据
-     * @param columns   这是此表的所有字段属性名称,用来判断是否所有UPDATE_BY和UPDATE_TIME,和时间类型
+     * @param context context
+     * @param maxId   最大的SEQ
      * @return com.boman.system.common.RowResult
      */
-    RowResult insertRow(String tableName, String pkName, Long maxId, MainTableRecord row, List<GenTableColumn> columns);
+    RowResult insertRow(TableContext context, Long maxId);
 
 }

+ 15 - 11
boman-web-core/src/main/java/com/boman/web/core/service/update/BaseUpdateServiceImpl.java

@@ -3,13 +3,15 @@ package com.boman.web.core.service.update;
 import com.alibaba.fastjson.JSONObject;
 import com.boman.common.core.utils.obj.ObjectUtils;
 import com.boman.gen.domain.GenTableColumn;
-import com.boman.web.core.domain.TableServiceContext;
+import com.boman.web.core.domain.TableContext;
 import com.boman.web.core.mapper.StandardlyMapper;
+import com.boman.web.core.utils.ColumnUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.sql.Timestamp;
 import java.util.List;
 import java.util.Map;
 
@@ -32,21 +34,23 @@ public class BaseUpdateServiceImpl implements IBaseUpdateService {
     /**
      * 功能描述: 批量修改, 默认需要更改的model,更改的字段类型和字段值都是一致的
      *
-     * @param context    用到其中的表名和所有的列(用来判断是否需要转义字符)
-     * @param pkName     主键名
-     * @param idList     idList
-     * @param commitData 需要更改的model, 已经转义好了,不需要到mapper层再去转义
+     * @param context 用到其中的表名和所有的列(用来判断是否需要转义字符)
+     * @param idList  idList
      * @return int
      */
     @Override
-    public int updateByIdList(TableServiceContext context, String pkName, List<Long> idList, JSONObject commitData) {
-        requireNonNull(context.getRealTableName(), "表名为空");
-        requireNonNull(pkName, "主键名称为空");;
+    public int updateByIdList(TableContext context, List<Long> idList) {
+        String tableName = requireNonNull(context.getTableName(), "表名为空");
+        String pkName = requireNonNull(context.getPkName(), "主键名称为空");;
         requireNonNull(idList, "需要修改的idList为空");
-        requireNonNull(commitData, "需要更改的参数为空");
+        JSONObject commitData = requireNonNull(context.getCommitData(), "需要更改的参数为空");
+        List<GenTableColumn> columns = context.getColumns();
+        Timestamp currentTime = new Timestamp(System.currentTimeMillis());
 
-        commitData = ObjectUtils.ifNullSetEmpty(escapeByQueryType(context.getTable().getColumns(), commitData));
-        return mapper.updateByIdList(context.getRealTableName(), pkName, idList, commitData);
+        commitData = ObjectUtils.ifNullSetEmpty(escapeByQueryType(columns, commitData));
+        ColumnUtils.packUpdateByAndTime(columns, commitData, currentTime);
+
+        return mapper.updateByIdList(tableName, pkName, idList, commitData);
     }
 
     private JSONObject escapeByQueryType(List<GenTableColumn> columns, JSONObject commitData) {

+ 4 - 7
boman-web-core/src/main/java/com/boman/web/core/service/update/IBaseUpdateService.java

@@ -1,7 +1,6 @@
 package com.boman.web.core.service.update;
 
-import com.alibaba.fastjson.JSONObject;
-import com.boman.web.core.domain.TableServiceContext;
+import com.boman.web.core.domain.TableContext;
 
 import java.util.List;
 
@@ -14,11 +13,9 @@ public interface IBaseUpdateService {
     /**
      * 功能描述: 批量修改, 默认需要更改的model,更改的字段类型和字段值都是一致的
      *
-     * @param context    用到其中的表名和所有的列(用来判断是否需要转义字符)
-     * @param pkName     主键名
-     * @param idList     idList
-     * @param commitData 需要更改的model, 已经转义好了,不需要到mapper层再去转义
+     * @param context 用到其中的表名和所有的列(用来判断是否需要转义字符)
+     * @param idList  idList
      * @return int
      */
-    int updateByIdList(TableServiceContext context, String pkName, List<Long> idList, JSONObject commitData);
+    int updateByIdList(TableContext context, List<Long> idList);
 }

+ 78 - 0
boman-web-core/src/main/java/com/boman/web/core/utils/ColumnUtils.java

@@ -0,0 +1,78 @@
+package com.boman.web.core.utils;
+
+import com.alibaba.fastjson.JSONObject;
+import com.boman.gen.domain.GenTableColumn;
+import com.boman.web.core.constant.FormDataConstant;
+import com.google.common.collect.Lists;
+
+import java.sql.Timestamp;
+import java.util.List;
+import java.util.function.Predicate;
+
+import static com.boman.common.core.utils.obj.ObjectUtils.requireNonNull;
+
+/**
+ * @author shiqian
+ * @date 2021年04月13日 15:37
+ **/
+public class ColumnUtils {
+
+    /**
+     * 功能描述: 新增或者修改的时候,是否需要给修改人修改时间赋值
+     *
+     * @param columns     所有的列
+     * @param jsonObject  需要返回的数据
+     * @param currentTime currentTime
+     */
+    public static void packUpdateByAndTime(List<GenTableColumn> columns, JSONObject jsonObject, Timestamp currentTime) {
+        for (GenTableColumn column : columns) {
+            // 判断是否有修改人、修改时间
+            if (FormDataConstant.UPDATE_BY.equalsIgnoreCase(column.getColumnName())) {
+                jsonObject.put(FormDataConstant.UPDATE_BY, "张三");
+            }
+            if (FormDataConstant.UPDATE_TIME.equalsIgnoreCase(column.getColumnName())) {
+                jsonObject.put(FormDataConstant.UPDATE_TIME, currentTime);
+            }
+
+            // 如果某一列是datetime类型,需要把类型转成datetime,否则数据库会报错
+            if (FormDataConstant.DATETIME.equalsIgnoreCase(column.getColumnType())) {
+                String columnName = column.getColumnName().toUpperCase();
+                jsonObject.put(columnName, jsonObject.getTimestamp(columnName));
+            }
+        }
+    }
+
+    /**
+     * 功能描述: 把新增可见或者修改可见或者.....的列过滤出来
+     *
+     * @param allColumns 所有的列
+     * @param sort 那六个1的顺序
+     *             sort=0  =>  新增可见
+     *             sort=1  =>  新增可修改
+     *             sort=2  =>  修改可见
+     *             sort=3  =>  修改可修改
+     *             sort=4  =>  列表可见
+     *             sort=5  =>  列表可修改
+     * @return List<GenTableColumn>
+     */
+    public static List<GenTableColumn> filterData(List<GenTableColumn> allColumns, int sort, Predicate<String> predicate) {
+        assert sort < 6;
+        List<GenTableColumn> returnData = Lists.newArrayListWithCapacity(16);
+        for (GenTableColumn allColumn : allColumns) {
+            String[] maskArray = requireNonNull(allColumn.getMask(), "mask is empty").split("");
+            assert maskArray.length == 6;
+            // 新增可见
+            String insertVisible = maskArray[sort];
+            if (predicate.test(insertVisible)) {
+                returnData.add(allColumn);
+            }
+        }
+
+        return returnData;
+    }
+
+    public static String parseVariables(String variables){
+         return variables.replaceAll("\\$", "");
+    }
+
+}

+ 16 - 0
ruoyi-ui/src/api/tool/gen.js

@@ -17,6 +17,15 @@ export function listDbTable(query) {
   })
 }
 
+// 新增
+export function addMenu(data) {
+  return request({
+    url: '/boman-gen/gen/addTable',
+    method: 'post',
+    data: data
+  })
+}
+
 // 查询表详细信息
 export function getGenTable(tableId) {
   return request({
@@ -58,6 +67,13 @@ export function delTable(tableId) {
     method: 'delete'
   })
 }
+// 删除
+export function delPost(id) {
+  return request({
+    url: '/genTableColumn/columnIds/' + id,
+    method: 'delete'
+  })
+}
 
 // 生成代码(自定义路径)
 export function genCode(tableName) {

+ 56 - 14
ruoyi-ui/src/views/system/table/index.vue

@@ -4,7 +4,7 @@
       <p>单表</p>
       <el-divider></el-divider>
       <div class="table_headerBtun" v-if="queryData.buttonList">
-        <el-button type="primary" plain v-for="(item,index) in queryData.buttonList.split('')" :key="index" @click="handleQuery()">{{item | btnConversion}}</el-button>
+        <el-button type="primary" plain v-for="(item,index) in queryData.buttonList.split('')" :key="index" @click="handleQuery(item)">{{item | btnConversion}}</el-button>
       </div>
     </div>
     <!-- 内容 -->
@@ -43,14 +43,18 @@
         queryData: {},
         // 查询参数
         queryParams: {
-          pageNum: 1,
-          pageSize: 10,
+
         },
         labletit: '查询参数1233',
         tableZbie:{
           table:'obj_test'
         },
-        taleLisst:[]
+        taleLisst:[],
+        forme:{
+          table:'',
+          objId:-1,
+          fixedData:{}
+        },
       };
     },
     filters:{
@@ -89,16 +93,34 @@
 
       },
       /** 搜索按钮操作 */
-      handleQuery() {
-         console.log(this.taleLisst,4)
-        for(let item of this.taleLisst){
-          if(item.htmlType == 'checkbox' || item.htmlType == 'imageUpload' || item.htmlType == 'fileUpload'){
-            this.queryParams[item.columnName] = this.$refs[item.columnName][0].config
-          } else{
-            this.queryParams[item.columnName] = this.$refs[item.columnName][0].config[item.columnName]
-          }
-        }
-        console.log(this.queryParams)
+      handleQuery(index) {
+         console.log(index,4)
+         for(let item of this.taleLisst){
+           for(var i = 0 ; i < item.hrChildren.length ; i++){
+             if(item.hrChildren[i].htmlType == 'checkbox' || item.hrChildren[i].htmlType == 'imageUpload' || item.hrChildren[i].htmlType == 'fileUpload'){
+               this.queryParams[item.hrChildren[i].columnName] = this.$refs[item.hrChildren[i].columnName][0].config
+             } else{
+               this.queryParams[item.hrChildren[i].columnName] = this.$refs[item.hrChildren[i].columnName][0].config[item.hrChildren[i].columnName]
+             }
+           }
+         }
+         if(index == 'D'){
+           //删除
+           this.handleDelete(index)
+         }else if(index == 'S' || index == 'A'){
+           //提交  保存
+           this.forme.table = 'obj_test'
+           this.forme.objId = -1
+           this.forme.fixedData = this.queryParams
+           // this.submitForm()
+         }else if(index == 'M'){
+           this.forme.table = 'obj_test'
+           this.forme.objId = 1
+           this.forme.fixedData = this.queryParams
+           this.submitForm()
+         }
+
+        console.log(this.forme)
         // this.getList();
       },
       getList() {
@@ -133,6 +155,26 @@
         this.handleDelete(index)
       }
       },
+      /** 提交按钮 */
+      submitForm: function() {
+        // this.$refs["form"].validate(valid => {
+          // if (valid) {
+            if (this.forme.objId != -1) {
+              updateType(this.forme).then(response => {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                // this.getList();
+              });
+            } else {
+              addType(this.forme).then(response => {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                // this.getList();
+              });
+            }
+          // }
+        // });
+      },
       //删除
       handleDelete(row) {
         this.$confirm('是否确认删除名称为"' + row + '"的数据项?', "警告", {

+ 72 - 18
ruoyi-ui/src/views/tool/gen/basicInfoForm.vue

@@ -1,30 +1,87 @@
 <template>
   <el-form ref="basicInfoForm" :model="info" :rules="rules" label-width="150px">
-    <el-row>
+    <el-row :gutter="20">
       <el-col :span="12">
         <el-form-item label="表名称" prop="tableName">
-          <el-input placeholder="请输入仓库名称" v-model="info.tableName" />
+          <el-input v-model="info.tableName" placeholder="请输入表名称" />
         </el-form-item>
       </el-col>
       <el-col :span="12">
+        <el-form-item label="实际数据库表" prop="className">
+          <el-input v-model="info.className" placeholder="请输入实际数据库表" />
+        </el-form-item>
+      </el-col>
+      <el-col :span="24">
         <el-form-item label="表描述" prop="tableComment">
-          <el-input placeholder="请输入" v-model="info.tableComment" />
+          <el-input v-model="info.tableComment" placeholder="请输入表描述" />
         </el-form-item>
       </el-col>
-
       <el-col :span="12">
-        <el-form-item label="实体类名称" prop="className">
-          <el-input placeholder="请输入" v-model="info.className" />
+        <el-form-item  label="是否菜单" >
+          <el-radio-group v-model="info.isMenu">
+            <el-radio label="Y">是</el-radio>
+            <el-radio label="N">否</el-radio>
+          </el-radio-group>
         </el-form-item>
       </el-col>
       <el-col :span="12">
-        <el-form-item label="作者" prop="functionAuthor">
-          <el-input placeholder="请输入" v-model="info.functionAuthor" />
+        <el-form-item  label="菜单权限" prop="menuRole">
+          <el-input v-model="info.menuRole" placeholder="请输入菜单权限" />
         </el-form-item>
       </el-col>
-      <el-col :span="24">
-        <el-form-item label="备注" prop="remark">
-          <el-input type="textarea" :rows="3" v-model="info.remark"></el-input>
+      <el-col :span="12" >
+        <el-form-item label="新增程序" prop="triggerCreate">
+          <el-input v-model="info.triggerCreate" placeholder="请输入新增程序" />
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item  label="检索程序" prop="triggerRetrieve">
+          <el-input v-model="info.triggerRetrieve" placeholder="请输入检索程序" maxlength="50" />
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item  label="微改程序" prop="triggerUpdate">
+          <el-input v-model="info.triggerUpdate" placeholder="请输入微改程序" maxlength="50" />
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item  label="删除程序" prop="triggerDelete">
+          <el-input v-model="info.triggerDelete" placeholder="请输入删除程序" maxlength="50" />
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item  label="提交程序" prop="triggerSubmit">
+          <el-input v-model="info.triggerSubmit" placeholder="请输入提交程序" maxlength="50" />
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item  label="过滤条件" prop="filterConditions">
+          <el-input v-model="info.filterConditions" placeholder="请输入过滤条件" maxlength="50" />
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item   label="显示字段" prop="dkColumn">
+          <el-input  :disabled="true" v-model="info.dkColumn" placeholder="请输入显示字段" maxlength="50" />
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item  label="输入字段" prop="akColumn">
+          <el-input :disabled="true" v-model="info.akColumn" placeholder="请输入输入字段" maxlength="50" />
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item   label="主键" prop="tablePrimaryKey">
+          <el-input :disabled="true" v-model="info.tablePrimaryKey" placeholder="请输入主键" maxlength="50" />
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item  label="扩展属性" prop="extendedAttributes">
+            <el-input v-model="info.extendedAttributes" type="textarea" placeholder="请输入内容"></el-input>
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item  label="备注" prop="remark">
+            <el-input v-model="info.remark" type="textarea" placeholder="请输入内容"></el-input>
         </el-form-item>
       </el-col>
     </el-row>
@@ -43,16 +100,13 @@ export default {
     return {
       rules: {
         tableName: [
-          { required: true, message: "请输入表名称", trigger: "blur" }
+          { required: true, message: "表名称不能为空", trigger: "blur" }
         ],
         tableComment: [
-          { required: true, message: "请输入表描述", trigger: "blur" }
-        ],
-        className: [
-          { required: true, message: "请输入实体类名称", trigger: "blur" }
+          { required: true, message: "表描述不能为空", trigger: "blur" }
         ],
-        functionAuthor: [
-          { required: true, message: "请输入作者", trigger: "blur" }
+        menuRole: [
+          { required: true, message: "菜单权限不能为空", trigger: "blur" }
         ]
       }
     };

+ 170 - 63
ruoyi-ui/src/views/tool/gen/editTable.vue

@@ -1,11 +1,47 @@
 <template>
   <el-card>
+    <el-row type="flex"  justify="space-between" style="margin: 10px 0;">
+      <el-col :span="1.5" style="display: flex; align-items: center;">
+        <el-form label-width="100px" style="display: flex; align-items: center;">
+          <el-form-item style="text-align: center;margin-left:-100px;margin-top:0; margin-bottom: 0;">
+            <el-button type="primary" @click="submitForm()">保存</el-button>
+            <el-button @click="close()">返回</el-button>
+          </el-form-item>
+        </el-form>
+      </el-col>
+      <el-row type="flex" :gutter="10"  justify="end">
+        <el-col :span="1.5" style="display: flex; align-items: center;">
+          <el-button
+            type="warning"
+            plain
+            icon="el-icon-plus"
+            size="mini"
+            @click="handleAdd"
+            v-hasPermi="['system:post:add']"
+          >新增</el-button>
+        </el-col>
+        <el-col :span="1.5" style="display: flex; align-items: center;">
+          <el-button
+            type="danger"
+            plain
+            icon="el-icon-delete"
+            size="mini"
+            :disabled="multiple"
+            @click="handleDelete"
+            v-hasPermi="['system:post:remove']"
+          >删除</el-button>
+        </el-col>
+        <!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> -->
+      </el-row>
+    </el-row>
+
     <el-tabs v-model="activeName">
       <el-tab-pane label="基本信息" name="basic">
         <basic-info-form ref="basicInfo" :info="info" />
       </el-tab-pane>
       <el-tab-pane label="字段信息" name="cloum">
-        <el-table ref="dragTable" :data="cloumns" row-key="columnId" :max-height="tableHeight">
+        <el-table ref="dragTable" :data="cloumns" row-key="columnId" :max-height="tableHeight" @selection-change="handleSelectionChange">
+          <el-table-column type="selection" width="55" align="center" />
           <el-table-column label="序号" type="index" min-width="5%" class-name="allowDrag" />
           <el-table-column
             label="字段列名"
@@ -24,59 +60,27 @@
             min-width="10%"
             :show-overflow-tooltip="true"
           />
-          <el-table-column label="Java类型" min-width="11%">
-            <template slot-scope="scope">
-              <el-select v-model="scope.row.javaType">
-                <el-option label="Long" value="Long" />
-                <el-option label="String" value="String" />
-                <el-option label="Integer" value="Integer" />
-                <el-option label="Double" value="Double" />
-                <el-option label="BigDecimal" value="BigDecimal" />
-                <el-option label="Date" value="Date" />
-              </el-select>
-            </template>
-          </el-table-column>
-          <el-table-column label="java属性" min-width="10%">
-            <template slot-scope="scope">
-              <el-input v-model="scope.row.javaField"></el-input>
-            </template>
-          </el-table-column>
-
-          <el-table-column label="插入" min-width="5%">
-            <template slot-scope="scope">
-              <el-checkbox true-label="1" v-model="scope.row.isInsert"></el-checkbox>
-            </template>
-          </el-table-column>
-          <el-table-column label="编辑" min-width="5%">
+          <el-table-column label="字段显示规则" align="center" prop="mask" min-width="11%"/>
+          <el-table-column label="排序" min-width="8%" align="center" prop="sort"/>
+          <el-table-column label="输入字段" min-width="10%">
             <template slot-scope="scope">
-              <el-checkbox true-label="1" v-model="scope.row.isEdit"></el-checkbox>
+              <el-checkbox true-label="1" v-model="scope.row.isIn"></el-checkbox>
             </template>
           </el-table-column>
-          <el-table-column label="列表" min-width="5%">
+          <el-table-column label="显示字段" min-width="10%">
             <template slot-scope="scope">
-              <el-checkbox true-label="1" v-model="scope.row.isList"></el-checkbox>
+              <el-checkbox true-label="1" v-model="scope.row.isOut"></el-checkbox>
             </template>
           </el-table-column>
-          <el-table-column label="查询" min-width="5%">
+          <el-table-column label="查询" min-width="8%">
             <template slot-scope="scope">
               <el-checkbox true-label="1" v-model="scope.row.isQuery"></el-checkbox>
             </template>
           </el-table-column>
-          <el-table-column label="查询方式" min-width="10%">
-            <template slot-scope="scope">
-              <el-select v-model="scope.row.queryType">
-                <el-option label="=" value="EQ" />
-                <el-option label="!=" value="NE" />
-                <el-option label=">" value="GT" />
-                <el-option label=">=" value="GTE" />
-                <el-option label="<" value="LT" />
-                <el-option label="<=" value="LTE" />
-                <el-option label="LIKE" value="LIKE" />
-                <el-option label="BETWEEN" value="BETWEEN" />
-              </el-select>
-            </template>
-          </el-table-column>
-          <el-table-column label="必填" min-width="5%">
+          <el-table-column label="关联HR字段" min-width="10%" align="center" prop="hrParentId"/>
+          <el-table-column label="缺省值" min-width="10%" align="center" prop="defaultValue"/>
+          <el-table-column label="外键" min-width="10%" align="center" prop="foreignKey"/>
+          <el-table-column label="必填" min-width="8%">
             <template slot-scope="scope">
               <el-checkbox true-label="1" v-model="scope.row.isRequired"></el-checkbox>
             </template>
@@ -112,20 +116,87 @@
           </el-table-column>
         </el-table>
       </el-tab-pane>
-      <el-tab-pane label="生成信息" name="genInfo">
+     <!-- <el-tab-pane label="生成信息" name="genInfo">
         <gen-info-form ref="genInfo" :info="info" :tables="tables" :menus="menus"/>
-      </el-tab-pane>
+      </el-tab-pane> -->
+      <el-tab-pane label="关联表" name="genInfo">
+        <el-row style="margin-bottom: 20px;">
+          <el-col :span="12">
+            <el-button style="background-color: #1591FF;color: #fff;border: 1px solid #1591FF;">保存</el-button>
+            <el-button style="background-color: #fff;color: #5B636C;border: 1px solid #ECECEC;">返回</el-button>
+          </el-col>
+          <el-col :span="12" style="text-align: right;">
+            <el-button style="background-color: #FFE9ED;color: #E58481;border: 1px solid #E58481;">新增</el-button>
+            <el-button style="background-color: #FFD6B0;color: #EA551A;border: 1px solid #F4AD6B;">删除</el-button>
+          </el-col>
+        </el-row>
+         <el-table  :data="cloumns" row-key="columnId" :max-height="tableHeight">
+           <el-table-column label="序号" type="index" min-width="5%" class-name="allowDrag" />
+           <el-table-column label="可用" type="index" min-width="5%" class-name="allowDrag" />
+           <el-table-column label="序号" type="index" min-width="5%" class-name="allowDrag" />
+           <el-table-column label="描述" type="index" min-width="5%" class-name="allowDrag" />
+           <el-table-column label="关联表" type="index" min-width="5%" class-name="allowDrag" />
+           <el-table-column label="字段(关联到主表PK)" type="index" min-width="5%" class-name="allowDrag" />
+           <el-table-column label="显示条件" type="index" min-width="5%" class-name="allowDrag" />
+           <el-table-column label="关联方式" type="index" min-width="5%" class-name="allowDrag" />
+           <el-table-column label="内嵌编辑" type="index" min-width="5%" class-name="allowDrag" />
+           <el-table-column label="修改人" type="index" min-width="5%" class-name="allowDrag" />
+           <el-table-column label="修改时间" type="index" min-width="5%" class-name="allowDrag" />
+         </el-table>
+       </el-tab-pane>
+       <el-tab-pane label="数据库SQL" name="genSql">
+          <el-row>
+            <el-button style="background-color: #FFE9ED;color: #E58481;border: 1px solid #E58481;">执行创建语句</el-button>
+            <el-button style="background-color: #FFD6B0;color: #EA551A;border: 1px solid #F4AD6B;">刷新创建语句</el-button>
+          </el-row>
+          <el-form>
+            <el-form-item label="创建语句:" style="margin-top: 20px;">
+              <el-input style="resize: none;width: 600px;" type="textarea":rows="3"></el-input>
+            </el-form-item>
+            <el-form-item label="修改日志:">
+              <el-input style="resize: none;width: 600px;" type="textarea":rows="3"></el-input>
+            </el-form-item>
+          </el-form>
+       </el-tab-pane>
     </el-tabs>
-    <el-form label-width="100px">
-      <el-form-item style="text-align: center;margin-left:-100px;margin-top:10px;">
-        <el-button type="primary" @click="submitForm()">提交</el-button>
-        <el-button @click="close()">返回</el-button>
-      </el-form-item>
-    </el-form>
+
+    <!-- 添加或修改岗位对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="描述:" prop="postName">
+          <el-input v-model="form.postName" placeholder="请输入岗位名称" />
+        </el-form-item>
+        <el-form-item label="关联表:" prop="postCode">
+          <el-input v-model="form.postCode" placeholder="请输入编码名称" />
+        </el-form-item>
+        <el-form-item label="字段(关联到主表PK):" prop="postSort">
+          <el-input-number v-model="form.postSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="显示条件:" prop="postSort">
+          <el-input-number v-model="form.postSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="关联方式:" prop="postSort">
+          <el-input-number v-model="form.postSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="内嵌编辑:" prop="postSort">
+          <el-input-number v-model="form.postSort" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="序号:" prop="status">
+
+        </el-form-item>
+        <el-form-item label="可用:" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
   </el-card>
 </template>
 <script>
-import { getGenTable, updateGenTable } from "@/api/tool/gen";
+import { getGenTable, updateGenTable, delPost} from "@/api/tool/gen";
 import { optionselect as getDictOptionselect } from "@/api/system/dict/type";
 import { listMenu as getMenuTreeselect } from "@/api/system/menu";
 import basicInfoForm from "./basicInfoForm";
@@ -140,6 +211,10 @@ export default {
   },
   data() {
     return {
+      title: "新增关联表",
+      open: false,
+      form: {},
+      rules: {},
       // 选中选项卡的 name
       activeName: "cloum",
       // 表格的高度
@@ -153,7 +228,13 @@ export default {
       // 菜单信息
       menus: [],
       // 表详细信息
-      info: {}
+      info: {},
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
     };
   },
   created() {
@@ -179,18 +260,19 @@ export default {
     /** 提交按钮 */
     submitForm() {
       const basicForm = this.$refs.basicInfo.$refs.basicInfoForm;
-      const genForm = this.$refs.genInfo.$refs.genInfoForm;
-      Promise.all([basicForm, genForm].map(this.getFormPromise)).then(res => {
+      // const genForm = this.$refs.genInfo.$refs.genInfoForm;
+      // console.log(basicForm)
+      Promise.all([basicForm].map(this.getFormPromise)).then(res => {
         const validateResult = res.every(item => !!item);
         if (validateResult) {
-          const genTable = Object.assign({}, basicForm.model, genForm.model);
+          const genTable = Object.assign({}, basicForm.model);
           genTable.columns = this.cloumns;
-          genTable.params = {
-            treeCode: genTable.treeCode,
-            treeName: genTable.treeName,
-            treeParentCode: genTable.treeParentCode,
-            parentMenuId: genTable.parentMenuId
-          };
+          // genTable.params = {
+          //   treeCode: genTable.treeCode,
+          //   treeName: genTable.treeName,
+          //   treeParentCode: genTable.treeParentCode,
+          //   parentMenuId: genTable.parentMenuId
+          // };
           updateGenTable(genTable).then(res => {
             this.msgSuccess(res.msg);
             if (res.code === 200) {
@@ -213,6 +295,31 @@ export default {
     close() {
       this.$store.dispatch("tagsView/delView", this.$route);
       this.$router.push({ path: "/tool/gen", query: { t: Date.now()}})
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      console.log(selection)
+      this.ids = selection.map(item => item.columnId)
+      this.single = selection.length!=1
+      this.multiple = !selection.length
+      console.log(this.ids)
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除岗位编号为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delPost(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        })
+    },
+    handleAdd(){
+
     }
   },
   mounted() {

+ 19 - 19
ruoyi-ui/src/views/tool/gen/genInfoForm.vue

@@ -229,30 +229,30 @@ export default {
       type: Array,
       default: null
     },
-    menus: {
-      type: Array,
-      default: []
-    },
+    // menus: {
+    //   type: Array,
+    //   default: []
+    // },
   },
   data() {
     return {
       subColumns: [],
       rules: {
-        tplCategory: [
-          { required: true, message: "请选择生成模板", trigger: "blur" }
-        ],
-        packageName: [
-          { required: true, message: "请输入生成包路径", trigger: "blur" }
-        ],
-        moduleName: [
-          { required: true, message: "请输入生成模块名", trigger: "blur" }
-        ],
-        businessName: [
-          { required: true, message: "请输入生成业务名", trigger: "blur" }
-        ],
-        functionName: [
-          { required: true, message: "请输入生成功能名", trigger: "blur" }
-        ],
+        // tplCategory: [
+        //   { required: true, message: "请选择生成模板", trigger: "blur" }
+        // ],
+        // packageName: [
+        //   { required: true, message: "请输入生成包路径", trigger: "blur" }
+        // ],
+        // moduleName: [
+        //   { required: true, message: "请输入生成模块名", trigger: "blur" }
+        // ],
+        // businessName: [
+        //   { required: true, message: "请输入生成业务名", trigger: "blur" }
+        // ],
+        // functionName: [
+        //   { required: true, message: "请输入生成功能名", trigger: "blur" }
+        // ],
       }
     };
   },

+ 161 - 11
ruoyi-ui/src/views/tool/gen/index.vue

@@ -38,6 +38,17 @@
     </el-form>
 
     <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleGenTableadd"
+
+        >新增</el-button>
+        <!-- v-hasPermi="['tool:gen:code']" -->
+      </el-col>
       <el-col :span="1.5">
         <el-button
           type="primary"
@@ -105,23 +116,29 @@
         width="120"
       />
       <el-table-column
-        label="实"
+        label="实际数据库表"
         align="center"
         prop="className"
         :show-overflow-tooltip="true"
         width="120"
       />
+      <el-table-column label="是否菜单" align="center" min-width="5%">
+        <template slot-scope="scope">
+          <el-checkbox true-label="1" v-model="scope.row.isMenu"></el-checkbox>
+        </template>
+      </el-table-column>
+      <el-table-column label="菜单权限" align="center" prop="menuRole" width="160" />
       <el-table-column label="创建时间" align="center" prop="createTime" width="160" />
       <el-table-column label="更新时间" align="center" prop="updateTime" width="160" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160">
         <template slot-scope="scope">
-          <el-button
+          <!-- <el-button
             type="text"
             size="small"
             icon="el-icon-view"
             @click="handlePreview(scope.row)"
             v-hasPermi="['tool:gen:preview']"
-          >预览</el-button>
+          >预览</el-button> -->
           <el-button
             type="text"
             size="small"
@@ -143,13 +160,13 @@
             @click="handleSynchDb(scope.row)"
             v-hasPermi="['tool:gen:edit']"
           >同步</el-button>
-          <el-button
+<!--          <el-button
             type="text"
             size="small"
             icon="el-icon-download"
             @click="handleGenTable(scope.row)"
             v-hasPermi="['tool:gen:code']"
-          >生成代码</el-button>
+          >生成代码</el-button> -->
         </template>
       </el-table-column>
     </el-table>
@@ -160,9 +177,9 @@
       :limit.sync="queryParams.pageSize"
       @pagination="getList"
     />
-    <!-- 预览界面 -->
-    <el-dialog :title="preview.title" :visible.sync="preview.open" width="80%" top="5vh" append-to-body>
-      <el-tabs v-model="preview.activeName">
+    <!-- 新增弹框 -->
+    <el-dialog :title="preview.title" :visible.sync="preview.open" width="65%" top="5vh" append-to-body>
+      <!-- <el-tabs v-model="preview.activeName">
         <el-tab-pane
           v-for="(value, key) in preview.data"
           :label="key.substring(key.lastIndexOf('/')+1,key.indexOf('.vm'))"
@@ -171,14 +188,90 @@
         >
         <pre><code class="hljs" v-html="highlightedCode(value, key)"></code></pre>
         </el-tab-pane>
-      </el-tabs>
+      </el-tabs> -->
+     <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+       <el-row :gutter="20">
+         <el-col :span="12">
+           <el-form-item label="表名称" prop="tableName">
+             <el-input v-model="form.tableName" placeholder="请输入表名称" />
+           </el-form-item>
+         </el-col>
+         <el-col :span="12">
+           <el-form-item label="实际数据库表" prop="className">
+             <el-input v-model="form.className" placeholder="请输入实际数据库表" />
+           </el-form-item>
+         </el-col>
+         <el-col :span="24">
+           <el-form-item label="表描述" prop="tableComment">
+             <el-input v-model="form.tableComment" placeholder="请输入表描述" />
+           </el-form-item>
+         </el-col>
+         <el-col :span="12">
+           <el-form-item  label="是否菜单" >
+             <el-radio-group v-model="form.isMenu">
+               <el-radio label="Y">是</el-radio>
+               <el-radio label="N">否</el-radio>
+             </el-radio-group>
+           </el-form-item>
+         </el-col>
+         <el-col :span="12">
+           <el-form-item  label="菜单权限" prop="menuRole">
+             <el-input v-model="form.menuRole" placeholder="请输入菜单权限" />
+           </el-form-item>
+         </el-col>
+         <el-col :span="12" >
+           <el-form-item label="新增程序" prop="triggerCreate">
+             <el-input v-model="form.triggerCreate" placeholder="请输入新增程序" />
+           </el-form-item>
+         </el-col>
+         <el-col :span="12">
+           <el-form-item  label="检索程序" prop="triggerRetrieve">
+             <el-input v-model="form.triggerRetrieve" placeholder="请输入检索程序" maxlength="50" />
+           </el-form-item>
+         </el-col>
+         <el-col :span="12">
+           <el-form-item  label="微改程序" prop="triggerUpdate">
+             <el-input v-model="form.triggerUpdate" placeholder="请输入微改程序" maxlength="50" />
+           </el-form-item>
+         </el-col>
+         <el-col :span="12">
+           <el-form-item  label="删除程序" prop="triggerDelete">
+             <el-input v-model="form.triggerDelete" placeholder="请输入删除程序" maxlength="50" />
+           </el-form-item>
+         </el-col>
+         <el-col :span="12">
+           <el-form-item  label="提交程序" prop="triggerSubmit">
+             <el-input v-model="form.triggerSubmit" placeholder="请输入提交程序" maxlength="50" />
+           </el-form-item>
+         </el-col>
+         <el-col :span="12">
+           <el-form-item  label="过滤条件" prop="filterConditions">
+             <el-input v-model="form.filterConditions" placeholder="请输入过滤条件" maxlength="50" />
+           </el-form-item>
+         </el-col>
+         <el-col :span="12">
+           <el-form-item  label="扩展属性" prop="extendedAttributes">
+               <el-input v-model="form.extendedAttributes" type="textarea" placeholder="请输入内容"></el-input>
+           </el-form-item>
+         </el-col>
+         <el-col :span="12">
+           <el-form-item  label="备注" prop="remark">
+               <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
+           </el-form-item>
+         </el-col>
+       </el-row>
+     </el-form>
+     <div slot="footer" class="dialog-footer">
+       <el-button type="primary" @click="submitForm">确 定</el-button>
+       <el-button @click="cancel">取 消</el-button>
+     </div>
     </el-dialog>
     <import-table ref="import" @ok="handleQuery" />
   </div>
 </template>
 
 <script>
-import { listTable, previewTable, delTable, genCode, synchDb } from "@/api/tool/gen";
+import { listTable, previewTable, delTable, genCode, synchDb, addMenu } from "@/api/tool/gen";
 import importTable from "./importTable";
 import { downLoadZip } from "@/utils/zipdownload";
 import hljs from "highlight.js/lib/highlight";
@@ -228,6 +321,20 @@ export default {
         title: "代码预览",
         data: {},
         activeName: "domain.java"
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        tableName: [
+          { required: true, message: "表名称不能为空", trigger: "blur" }
+        ],
+        tableComment: [
+          { required: true, message: "表描述不能为空", trigger: "blur" }
+        ],
+        menuRole: [
+          { required: true, message: "菜单权限不能为空", trigger: "blur" }
+        ]
       }
     };
   },
@@ -289,6 +396,13 @@ export default {
     openImportTable() {
       this.$refs.import.show();
     },
+    // 表单重置
+    reset() {
+      this.form = {
+
+      };
+      this.resetForm("form");
+    },
     /** 重置按钮操作 */
     resetQuery() {
       this.dateRange = [];
@@ -334,6 +448,42 @@ export default {
           this.getList();
           this.msgSuccess("删除成功");
       })
+    },
+    // 取消弹框按钮
+    cancel(){
+      console.log(123)
+     this.reset()
+     this.preview.open = false;
+
+    },
+    //新增
+    handleGenTableadd(){
+    console.log(345)
+    this.reset()
+    this.preview.open = true;
+    this.preview.title = '新增信息';
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            // updateMenu(this.form).then(response => {
+            //   this.msgSuccess("修改成功");
+            //   this.open = false;
+            //   this.getList();
+            // });
+            console.log(23)
+          } else {
+            console.log(this.form)
+            addMenu(this.form).then(response => {
+              this.msgSuccess("新增成功");
+              this.preview.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
     }
   }
 };

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels