소스 검색

Merge remote-tracking branch 'origin/master'

Administrator 4 년 전
부모
커밋
bd19b93987
21개의 변경된 파일366개의 추가작업 그리고 173개의 파일을 삭제
  1. 1 1
      boman-modules/boman-system/src/main/java/com/boman/system/service/impl/SysDictTypeServiceImpl.java
  2. 4 0
      boman-web-core/src/main/java/com/boman/web/core/constant/FormDataConstant.java
  3. 43 0
      boman-web-core/src/main/java/com/boman/web/core/controller/TableController.java
  4. 2 2
      boman-web-core/src/main/java/com/boman/web/core/mapper/StandardlyMapper.java
  5. 5 25
      boman-web-core/src/main/java/com/boman/web/core/service/TableServiceCmdService.java
  6. 2 2
      boman-web-core/src/main/java/com/boman/web/core/service/delete/BaseDeleteServiceImpl.java
  7. 26 18
      boman-web-core/src/main/java/com/boman/web/core/service/save/BaseSaveServiceImpl.java
  8. 7 6
      boman-web-core/src/main/java/com/boman/web/core/service/save/IBaseSaveService.java
  9. 2 2
      boman-web-core/src/main/java/com/boman/web/core/service/select/BaseSelectServiceImpl.java
  10. 2 2
      boman-web-core/src/main/java/com/boman/web/core/service/submit/BaseSubmitServiceImpl.java
  11. 2 2
      boman-web-core/src/main/java/com/boman/web/core/service/update/BaseUpdateServiceImpl.java
  12. 2 2
      boman-web-core/src/main/java/com/boman/web/core/utils/IdUtils.java
  13. 12 4
      ruoyi-ui/src/api/system/config.js
  14. 2 2
      ruoyi-ui/src/api/system/table.js
  15. 40 9
      ruoyi-ui/src/components/DynamicForm/index.vue
  16. 124 56
      ruoyi-ui/src/components/DynamicForms/index.vue
  17. 2 0
      ruoyi-ui/src/main.js
  18. 1 1
      ruoyi-ui/src/settings.js
  19. 68 23
      ruoyi-ui/src/views/index.vue
  20. 16 14
      ruoyi-ui/src/views/system/surface/index.vue
  21. 3 2
      ruoyi-ui/src/views/system/table/index.vue

+ 1 - 1
boman-modules/boman-system/src/main/java/com/boman/system/service/impl/SysDictTypeServiceImpl.java

@@ -32,7 +32,7 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService
     /**
      * 项目启动时,初始化字典到缓存
      */
-//    @PostConstruct
+    @PostConstruct
     public void init()
     {
         List<SysDictType> dictTypeList = dictTypeMapper.selectDictTypeAll();

+ 4 - 0
boman-web-core/src/main/java/com/boman/web/core/constant/FormDataConstant.java

@@ -100,6 +100,10 @@ public class FormDataConstant {
     public static final String PAGE_ROWS = "rows";
 
 
+    /**  暂时是用作新增时,成功的记录数 */
+    public static final String SUCCESS_CNT = "successCnt";
+
+
     /**  数据库字段创建人*/
     public static final String UPDATE_BY = "UPDATE_BY";
 

+ 43 - 0
boman-web-core/src/main/java/com/boman/web/core/controller/TableController.java

@@ -0,0 +1,43 @@
+package com.boman.web.core.controller;
+
+import com.boman.common.core.web.domain.AjaxResult;
+import com.boman.web.core.domain.BaseTableSaveDTO;
+import com.boman.web.core.service.TableServiceCmdService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * @author shiqian
+ * @description
+ * @date 2021年03月22日 09:19
+ **/
+@RestController
+@RequestMapping("/p/cs/table")
+public class TableController {
+
+    @Autowired
+    private TableServiceCmdService tableServiceCmdService;
+
+    /**
+     * 功能描述: 反提交接口, 更改的字段类型和字段值都是一致的
+     *                {
+     *                    "table": "sys_config",
+     *                }
+     *
+     *
+     * @param condition condition
+     * @return com.boman.common.core.web.domain.AjaxResult
+     */
+    @ApiOperation(value = "根据表名获取表单所有信息")
+    @PostMapping("/getByTableName")
+    public AjaxResult getByTableName(@RequestBody BaseTableSaveDTO condition) {
+        return tableServiceCmdService.getByTableName(condition);
+    }
+
+
+}

+ 2 - 2
boman-web-core/src/main/java/com/boman/web/core/mapper/StandardlyMapper1.java → boman-web-core/src/main/java/com/boman/web/core/mapper/StandardlyMapper.java

@@ -24,9 +24,9 @@ import static com.boman.web.core.constant.FormDataConstant.*;
  **/
 @Mapper
 @Component
-public interface StandardlyMapper1 {
+public interface StandardlyMapper {
 
-    Logger LOGGER = LoggerFactory.getLogger(StandardlyMapper1.class);
+    Logger LOGGER = LoggerFactory.getLogger(StandardlyMapper.class);
 
     @UpdateProvider(
             type = SqlProvider.class,

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

@@ -17,7 +17,6 @@ import com.boman.gen.domain.GenTable;
 import com.boman.gen.domain.GenTableColumn;
 import com.boman.gen.domain.GenTableRelation;
 import com.boman.system.api.RemoteDictDataService;
-import com.boman.web.core.constant.DictConstant;
 import com.boman.web.core.constant.FormDataConstant;
 import com.boman.web.core.constant.SubmitConstant;
 import com.boman.web.core.domain.*;
@@ -68,7 +67,7 @@ public class TableServiceCmdService {
     @Resource
     private  RestTemplate restTemplate;
     @Resource
-    private RemoteDictDataService dictTypeService;
+    private RemoteDictDataService remoteDictDataService;
     @Resource
     private RemoteGenTableService remoteGenTableService;
 
@@ -91,15 +90,10 @@ public class TableServiceCmdService {
         String pkName = IdUtils.getPkName(columns);
         requireNonNull(pkName, "主键名称为空");
 
-        //
-        List<String> allColumnNameList = columns.stream()
-                .map(GenTableColumn::getColumnName)
-                .collect(Collectors.toList());
-
         // 新增
         if (ObjectUtils.ltZero(baseTableDTO.getObjId())) {
             Long maxId = IdUtils.getMaxId(baseTableDTO.getTable(), pkName);
-            RowResult rowResult = saveService.insertRow(context.getRealTableName(), pkName, maxId, context.getRows().get(0), allColumnNameList);
+            RowResult rowResult = saveService.insertRow(context.getRealTableName(), pkName, maxId, context.getRows().get(0), columns);
             if (RowResult.checkSuccess(rowResult)) {
                 LOGGER.info("保存成功,封装到数据库的数据为: {}", JSON.toJSONString(rowResult.getData()));
             } else {
@@ -318,7 +312,7 @@ public class TableServiceCmdService {
             if (GenTableColumn.IS_QUERY.equalsIgnoreCase(column.getIsQuery())) {
                 String dictType = column.getDictType();
                 if (ObjectUtils.isNotEmpty(dictType)) {
-                    List<SysDictData> sysDictData1 = dictTypeService.listByType(dictType);
+                    List<SysDictData> sysDictData1 = remoteDictDataService.listByType(dictType);
                     column.setSysDictData(sysDictData1);
                 }
 
@@ -519,7 +513,7 @@ public class TableServiceCmdService {
         GenTable genTable = redisService.getCacheObject(key);
         if (ObjectUtils.isEmpty(genTable)) {
             genTable = remoteGenTableService.getByTableName(tableName);
-            requireNonNull(genTable, "未找到表对应的信息");
+            requireNonNull(genTable, "数据库中,未找到表对应的信息");
             // {@link com.boman.gen.controller.MyController.packTableAndInsertToRedis} 失效时间
             redisService.setCacheObject(key, genTable, 12L, TimeUnit.DAYS);
         }
@@ -544,7 +538,7 @@ public class TableServiceCmdService {
         for (GenTableColumn column : columns) {
             String dictType = column.getDictType();
             if (ObjectUtils.isNotEmpty(dictType)) {
-                List<SysDictData> sysDictData1 = dictTypeService.listByType(dictType);
+                List<SysDictData> sysDictData1 = remoteDictDataService.listByType(dictType);
                 column.setSysDictData(sysDictData1);
             }
         }
@@ -552,19 +546,5 @@ public class TableServiceCmdService {
         return AjaxResult.success(genTable);
     }
 
-    public List<JSONObject> coverSysDictDataToJSONObject(List<SysDictData> sysDictData) {
-        List<JSONObject> result = Lists.newArrayListWithCapacity(sysDictData.size());
-        for (SysDictData data : sysDictData) {
-            JSONObject jsonObject = new JSONObject();
-            String dictLabel = data.getDictLabel();
-            String dictValue = data.getDictValue();
-            jsonObject.put(DictConstant.DICT_LABEL, dictLabel);
-            jsonObject.put(DictConstant.DICT_VALUE, dictValue);
-            result.add(jsonObject);
-        }
-
-        return result;
-
-    }
 }
 

+ 2 - 2
boman-web-core/src/main/java/com/boman/web/core/service/delete/BaseDeleteServiceImpl.java

@@ -2,7 +2,7 @@ package com.boman.web.core.service.delete;
 
 import com.alibaba.fastjson.JSONObject;
 import com.boman.web.core.domain.RowResult;
-import com.boman.web.core.mapper.StandardlyMapper1;
+import com.boman.web.core.mapper.StandardlyMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -18,7 +18,7 @@ public class BaseDeleteServiceImpl implements IBaseDeleteService {
     private static final Logger LOGGER = LoggerFactory.getLogger(BaseDeleteServiceImpl.class);
 
     @Autowired
-    private StandardlyMapper1 mapper;
+    private StandardlyMapper mapper;
 
     /**
      * 功能描述: 在此不对入参进行校验,所以在调用此方法之前一定要对参数进行校验,以免报错

+ 26 - 18
boman-web-core/src/main/java/com/boman/web/core/service/save/BaseSaveServiceImpl.java

@@ -2,10 +2,11 @@ package com.boman.web.core.service.save;
 
 import com.alibaba.fastjson.JSONObject;
 import com.boman.common.core.utils.SecurityUtils;
+import com.boman.gen.domain.GenTableColumn;
 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.mapper.StandardlyMapper1;
+import com.boman.web.core.mapper.StandardlyMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,41 +26,48 @@ public class BaseSaveServiceImpl implements IBaseSaveService {
     private static final Logger LOGGER = LoggerFactory.getLogger(BaseSaveServiceImpl.class);
 
     @Autowired
-    private StandardlyMapper1 mapper;
+    private StandardlyMapper mapper;
 
     /**
      * 功能描述: 保存一行
      *
-     * @param tableName         tableName
-     * @param pkName            主键名称
-     * @param maxId             最大的SEQ
-     * @param row               要保存的数据
-     * @param allColumnNameList 这是此表的所有字段属性名称,用来判断是否所有UPDATE_BY和UPDATE_TIME
+     * @param tableName tableName
+     * @param pkName    主键名称
+     * @param maxId     最大的SEQ
+     * @param row       要保存的数据
+     * @param columns   这是此表的所有字段属性名称,用来判断是否所有UPDATE_BY和UPDATE_TIME,和时间类型
      * @return com.boman.system.common.RowResult
      */
     @Override
-    public RowResult insertRow(String tableName, String pkName, Long maxId, MainTableRecord row, List<String> allColumnNameList) {
+    public RowResult insertRow(String tableName, String pkName, Long maxId, MainTableRecord row, List<GenTableColumn> columns) {
         JSONObject commitData = row.getMainData().getCommitData();
         Timestamp currentTime = new Timestamp(System.currentTimeMillis());
-        if (allColumnNameList.contains(FormDataConstant.UPDATE_BY)
-                || allColumnNameList.contains(FormDataConstant.UPDATE_BY.toLowerCase())) {
-            commitData.put(FormDataConstant.UPDATE_BY, SecurityUtils.getUserId());
-        }
-        if (allColumnNameList.contains(FormDataConstant.UPDATE_TIME)
-                || allColumnNameList.contains(FormDataConstant.UPDATE_TIME.toLowerCase())) {
-            commitData.put(FormDataConstant.UPDATE_TIME, SecurityUtils.getUserId());
+        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));
+            }
         }
 
         // 新增
         if (row.getId() > 0) {
-            commitData.put("CREATE_TIME", currentTime);
-            commitData.put("CREATE_BY", SecurityUtils.getUserId());
+            commitData.put(FormDataConstant.UPDATE_TIME, currentTime);
+            commitData.put(FormDataConstant.UPDATE_BY, SecurityUtils.getUserId());
         }
 
         commitData.put(pkName.toUpperCase(), maxId);
         int ret = mapper.insert(tableName, commitData);
         if (ret > 0) {
-            commitData.put("successCnt", ret);
+            commitData.put(FormDataConstant.SUCCESS_CNT, ret);
             return RowResult.ok("保存成功", commitData);
         }
 

+ 7 - 6
boman-web-core/src/main/java/com/boman/web/core/service/save/IBaseSaveService.java

@@ -1,6 +1,7 @@
 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;
 
@@ -17,13 +18,13 @@ public interface IBaseSaveService {
     /**
      * 功能描述: 保存一行
      *
-     * @param tableName         tableName
-     * @param pkName            主键名称
-     * @param maxId             最大的SEQ
-     * @param row               要保存的数据
-     * @param allColumnNameList 这是此表的所有字段属性名称,用来判断是否所有UPDATE_BY和UPDATE_TIME
+     * @param tableName tableName
+     * @param pkName    主键名称
+     * @param maxId     最大的SEQ
+     * @param row       要保存的数据
+     * @param columns   这是此表的所有字段属性名称,用来判断是否所有UPDATE_BY和UPDATE_TIME,和时间类型
      * @return com.boman.system.common.RowResult
      */
-    RowResult insertRow(String tableName, String pkName, Long maxId, MainTableRecord row, List<String> allColumnNameList);
+    RowResult insertRow(String tableName, String pkName, Long maxId, MainTableRecord row, List<GenTableColumn> columns);
 
 }

+ 2 - 2
boman-web-core/src/main/java/com/boman/web/core/service/select/BaseSelectServiceImpl.java

@@ -2,7 +2,7 @@ package com.boman.web.core.service.select;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.boman.web.core.mapper.StandardlyMapper1;
+import com.boman.web.core.mapper.StandardlyMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -22,7 +22,7 @@ public class BaseSelectServiceImpl implements IBaseSelectService {
     private static final Logger LOGGER = LoggerFactory.getLogger(BaseSelectServiceImpl.class);
 
     @Autowired
-    private StandardlyMapper1 mapper;
+    private StandardlyMapper mapper;
 
 
     /**

+ 2 - 2
boman-web-core/src/main/java/com/boman/web/core/service/submit/BaseSubmitServiceImpl.java

@@ -1,7 +1,7 @@
 package com.boman.web.core.service.submit;
 
 import com.alibaba.fastjson.JSONObject;
-import com.boman.web.core.mapper.StandardlyMapper1;
+import com.boman.web.core.mapper.StandardlyMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -17,7 +17,7 @@ public class BaseSubmitServiceImpl implements IBaseSubmitService {
 
 
     @Autowired
-    private StandardlyMapper1 mapper;
+    private StandardlyMapper mapper;
 
     /**
      * 功能描述: 处理提交流程

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

@@ -4,7 +4,7 @@ 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.mapper.StandardlyMapper1;
+import com.boman.web.core.mapper.StandardlyMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -27,7 +27,7 @@ public class BaseUpdateServiceImpl implements IBaseUpdateService {
     private static final Logger LOGGER = LoggerFactory.getLogger(BaseUpdateServiceImpl.class);
 
     @Autowired
-    private StandardlyMapper1 mapper;
+    private StandardlyMapper mapper;
 
     /**
      * 功能描述: 批量修改, 默认需要更改的model,更改的字段类型和字段值都是一致的

+ 2 - 2
boman-web-core/src/main/java/com/boman/web/core/utils/IdUtils.java

@@ -4,7 +4,7 @@ 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.GenTableColumn;
-import com.boman.web.core.mapper.StandardlyMapper1;
+import com.boman.web.core.mapper.StandardlyMapper;
 import org.apache.commons.collections.CollectionUtils;
 
 import java.util.List;
@@ -28,7 +28,7 @@ public class IdUtils {
         }
 
         // 查数据库
-        StandardlyMapper1 mapper = SpringUtils.getBean(StandardlyMapper1.class);
+        StandardlyMapper mapper = SpringUtils.getBean(StandardlyMapper.class);
         Long maxId = mapper.selectMaxId(tableName, pkName);
         if (null == maxId || maxId <= 0) {
             maxId = 1L;

+ 12 - 4
ruoyi-ui/src/api/system/config.js

@@ -5,7 +5,7 @@ export function listConfig(query) {
   return request({
     url: '/system/config/list',
     method: 'get',
-    params: query   
+    params: query
   })
 }
 
@@ -48,23 +48,31 @@ export function addConfig(data) {
     data: data
   })
 }
+export function addConfigindex(data) {
+  return request({
+    url: '/boman-web-core/p/cs/objectSave',
+    method: 'post',
+    data: data
+  })
+}
+
 export function listIndex(data) {
   return request({
-    url: '/boman-system/p/cs/queryList',
+    url: '/boman-web-core/p/cs/queryList',
     method: 'post',
     data: data
   })
 }
 export function listIndexfou(data) {
   return request({
-    url: '/boman-system/p/cs/getTableQuery',
+    url: '/boman-web-core/p/cs/getTableQuery',
     method: 'post',
     data: data
   })
 }
 export function listIndextanl(data) {
   return request({
-    url: '/boman-system/p/cs/table/getByTableName',
+    url: '/boman-web-core/p/cs/table/getByTableName',
     method: 'post',
     data: data
   })

+ 2 - 2
ruoyi-ui/src/api/system/table.js

@@ -3,7 +3,7 @@ import request from '@/utils/request'
 // 获取表单数据
 export function getQueryList(data) {
   return request({
-    url: '/boman-system/p/cs/queryList',
+    url: '/boman-web-core/p/cs/queryList',
     method: 'POST',
     data
   })
@@ -11,7 +11,7 @@ export function getQueryList(data) {
 // 获取表单查询字段、按钮、表头
 export function getTableQuery(data) {
   return request({
-    url: '/boman-system/p/cs/getTableQuery',
+    url: '/boman-web-core/p/cs/getTableQuery',
     method: 'POST',
     data
   })

+ 40 - 9
ruoyi-ui/src/components/DynamicForm/index.vue

@@ -19,14 +19,14 @@
       </el-checkbox-group>
       <!-- 单选框 -->
       <el-radio-group v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'radio'">
-        <el-radio v-for="itemChild in formConfig.sysDictData" :key="itemChild.dictValue" :label="itemChild.dictLabel" :value="itemChild.dictValue"></el-radio>
+        <el-radio v-for="itemChild in formConfig.sysDictData" :key="itemChild.dictValue" :label="itemChild.dictValue">{{itemChild.dictLabel}}</el-radio>
       </el-radio-group>
       <!-- 时间控件 -->
-      <el-date-picker v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'datetime'" type="date" :placeholder="'请输入'+formConfig.columnComment">
+      <el-date-picker value-format="yyyy-MM-dda" v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'datetime'" type="date" :placeholder="'请输入'+formConfig.columnComment">
       </el-date-picker>
       <!-- 上传图片 -->
-      <el-upload v-if="formConfig.htmlType == 'imageUpload'" :headers="{Authorization: 'Bearer ' + getToken()}" :action="process + '/boman-file/upload'" list-type="picture-card"
-        :on-preview="handlePictureCardPreview" :on-remove="handleRemove">
+      <el-upload v-if="formConfig.htmlType == 'imageUpload'" :headers="{Authorization: 'Bearer ' + getToken()}" :action="process + '/boman-file/upload'" :file-list="config" list-type="picture-card"
+        :on-preview="handlePictureCardPreview" :on-success="upImageFn" :on-remove="reseImage" >
         <i class="el-icon-plus"></i>
       </el-upload>
       <el-dialog :visible.sync="dialogVisible" v-if="formConfig.htmlType == 'imageUpload'">
@@ -39,7 +39,9 @@
         v-if="formConfig.htmlType == 'fileUpload'"
         :action="process + '/boman-file/upload'"
         :on-change="handleChange"
-        :file-list="fileList">
+        :on-success="upImageFn"
+         :on-remove="reseImage"
+        :file-list="config">
         <el-button size="small" type="primary">点击上传</el-button>
         <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
       </el-upload>
@@ -82,8 +84,14 @@
     mounted() {
     },
     methods: {
+      upImageFn(res, file){
+        this.config.push({
+          name: res.data.name,
+          url: res.data.url,
+        });
+      },
       init() {
-        if(this.formConfig.htmlType == 'checkbox'){
+        if(this.formConfig.htmlType == 'checkbox' || this.formConfig.htmlType == 'imageUpload' || this.formConfig.htmlType == 'fileUpload'){
           this.config = []
         }
         console.log(this.config,99888)
@@ -93,9 +101,32 @@
       },
       getToken() {
         return getToken()
-      },
-      handleRemove(file, fileList) {
-        console.log(file, fileList);
+      },
+      reseImage(file, fileList) {
+        let urls = ""
+        if(file.response){
+          urls = file.response.url
+        }else{
+          urls = file.url
+        }
+        for (let i = this.config.length - 1; i >= 0; i--) {
+          if (this.config[i].url == urls) {
+            this.config.splice(i, 1);
+          }
+        }
+      },
+      reseImage1(file, fileList) {
+        let urls = ""
+        if(file.response){
+          urls = file.response.url
+        }else{
+          urls = file.url
+        }
+        for (let i = this.config.length - 1; i >= 0; i--) {
+          if (this.config[i].url == urls) {
+            this.config.splice(i, 1);
+          }
+        }
       },
       handlePictureCardPreview(file) {
         this.dialogImageUrl = file.url;

+ 124 - 56
ruoyi-ui/src/components/DynamicForms/index.vue

@@ -1,54 +1,70 @@
 <template>
-    <el-form-item :label="formConfig.columnComment" style="display: inline-block;" :prop="formConfig.columnName">
-      <!-- 输入框 -->
-      <el-input v-if="formConfig.htmlType == 'input'" v-model="config[formConfig.columnName]" :placeholder="'请输入'+formConfig.columnComment"
-        clearable @keyup.enter.native="handleQuery" />
-      <!-- 多行输入框 -->
-      <el-input v-if="formConfig.htmlType == 'textarea'" type="textarea" v-model="config[formConfig.columnName]" :placeholder="'请输入'+formConfig.columnComment"
-        clearable @keyup.enter.native="handleQuery" />
-      <!-- 下拉框 -->
-      <el-select v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'select'" filterable :placeholder="'请输入'+formConfig.columnComment">
-        <el-option v-for="itemChild in formConfig.sysDictData" :key="itemChild.dictValue" :label="itemChild.dictLabel" :value="itemChild.dictValue">
-        </el-option>
-      </el-select>
-      <!-- 复选框 -->
-      <el-checkbox-group v-model="formConfig.sysDictDatatwo" v-if="formConfig.htmlType == 'checkbox'">
-        <el-checkbox @change="handleCheckedCitiesChange" v-for="itemChild in formConfig.sysDictData" :key="itemChild.dictValue" :label="itemChild.dictLabel"
-        :value="itemChild.dictValue" ></el-checkbox>
-      </el-checkbox-group>
-      <!-- 单选框 -->
-      <el-radio-group v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'radio'">
-        <el-radio v-for="itemChild in formConfig.sysDictData" :key="itemChild.dictValue" :label="itemChild.dictLabel" :value="itemChild.dictValue"></el-radio>
-      </el-radio-group>
-      <!-- 时间控件 -->
-      <el-date-picker v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'datetime'" type="date" :placeholder="'请输入'+formConfig.columnComment">
-      </el-date-picker>
-      <!-- 上传图片 -->
-      <el-upload v-if="formConfig.htmlType == 'imageUpload'" :headers="{Authorization: 'Bearer ' + getToken()}" :action="process + '/boman-file/upload'" list-type="picture-card"
-        :on-preview="handlePictureCardPreview" :on-remove="handleRemove">
-        <i class="el-icon-plus"></i>
-      </el-upload>
-      <el-dialog :visible.sync="dialogVisible" v-if="formConfig.htmlType == 'imageUpload'">
-        <img width="100%" :src="dialogImageUrl" alt="">
-      </el-dialog>
-      <!-- 上传文件 -->
-      <el-upload
-        class="upload-demo"
-        :headers="{Authorization: 'Bearer ' + getToken()}"
-        v-if="formConfig.htmlType == 'fileUpload'"
-        :action="process + '/boman-file/upload'"
-        :on-change="handleChange"
-        :file-list="fileList">
-        <el-button size="small" type="primary">点击上传</el-button>
-        <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
-      </el-upload>
-      <!-- 富文本 -->
-      <editor v-model="config[formConfig.columnName]" v-if="formConfig.htmlType == 'editor'" :min-height="192"/>
-    </el-form-item>
+    <div>
+      <el-form ref="form" :model="form" :rules="rules" label-width="160px" class="from_index">
+        <el-row>
+          <el-col :span="24"  v-for="(item,index) in formConfig.columns" :key="index">
+            <el-form-item :label="item.columnComment" style="display: inline-block;" :prop="item.columnName" v-if="item.isEdit == 1">
+              <!-- 输入框 -->
+              <el-input v-if="item.htmlType == 'input'" v-model="config[item.columnName]" :placeholder="'请输入'+item.columnComment"
+                clearable @keyup.enter.native="submitForm" />
+              <!-- 多行输入框 -->
+              <el-input v-if="item.htmlType == 'textarea'" type="textarea" v-model="config[item.columnName]" :placeholder="'请输入'+item.columnComment"
+                clearable @keyup.enter.native="submitForm" />
+              <!-- 下拉框 -->
+              <el-select v-model="config[item.columnName]" v-if="item.htmlType == 'select'" filterable :placeholder="'请输入'+item.columnComment">
+                <el-option v-for="itemChild in item.sysDictData" :key="itemChild.dictValue" :label="itemChild.dictLabel" :value="itemChild.dictValue" >
+                </el-option>
+              </el-select>
+              <!-- 复选框 -->
+              <el-checkbox-group v-model="config[item.columnName]" v-if="item.htmlType == 'checkbox'">
+                <el-checkbox  v-for="itemChild in item.sysDictData" :label="itemChild.dictValue" :key="itemChild.dictLabel" >
+                  {{itemChild.dictLabel}}
+                </el-checkbox>
+              </el-checkbox-group>
+              <!-- 单选框 -->
+              <el-radio-group v-model="config[item.columnName]" v-if="item.htmlType == 'radio'">
+                <el-radio v-for="itemChild in item.sysDictData" :key="itemChild.dictValue" :label="itemChild.dictLabel" :value="itemChild.dictValue" ></el-radio>
+              </el-radio-group>
+              <!-- 时间控件 -->
+              <el-date-picker v-model="config[item.columnName]" v-if="item.htmlType == 'datetime'" type="date" :placeholder="'请输入'+item.columnComment">
+              </el-date-picker>
+              <!-- 上传图片 -->
+              <el-upload v-if="item.htmlType == 'imageUpload'" :headers="{Authorization: 'Bearer ' + getToken()}" :action="process + '/boman-file/upload'" list-type="picture-card"
+                :on-preview="handlePictureCardPreview" :on-remove="handleRemove">
+                <i class="el-icon-plus"></i>
+              </el-upload>
+              <el-dialog :visible.sync="dialogVisible" v-if="item.htmlType == 'imageUpload'">
+                <img width="100%" :src="dialogImageUrl" alt="">
+              </el-dialog>
+              <!-- 上传文件 -->
+              <el-upload
+                class="upload-demo"
+                :headers="{Authorization: 'Bearer ' + getToken()}"
+                v-if="item.htmlType == 'fileUpload'"
+                :action="process + '/boman-file/upload'"
+                :on-change="handleChange"
+                :file-list="fileList">
+                <el-button size="small" type="primary">点击上传</el-button>
+                <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
+              </el-upload>
+              <!-- 富文本 -->
+              <editor v-model="config[item.columnName]" v-if="item.htmlType == 'editor'"  :min-height="192"/>
+            </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>
+
+    </div>
+
 </template>
 
 <script>
   const defaultSettings = require('@/settings.js')
+  import { addConfigindex } from "@/api/system/config";
   import Editor from '@/components/Editor';
   import { getToken } from "@/utils/auth";
   export default {
@@ -61,26 +77,33 @@
         dialogVisible: false,
         disabled: false,
         config: {},
+        form:{},
+        // 表单校验
+        rules: {
+        },
+        open:false
       }
     },
     components: {
       Editor
     },
     props: {
-      formConfig: {
-        type: Object,
-        required: true,
-        'default': {
-          sysDictData: []
-        }
-      },
+      formConfig: {},
+      nummer:0
     },
     created() {
-    console.log(this.formConfig)
+      this.init()
     },
     mounted() {
     },
     methods: {
+      init() {
+        // if(this.formConfig.htmlType == 'checkbox'){
+        //   this.config = []
+        // }
+        console.log(this.config,99888)
+        console.log(this.nummer)
+      },
       handleChange(file, fileList) {
         this.fileList = fileList.slice(-3);
       },
@@ -100,12 +123,57 @@
       handleQuery() {
         this.$emit('btns')
       },
+      submitForm(value){
+        console.log(1243)
+        console.log(this.config,value)
+        this.form.fixedData = this.config
+        this.form.table = 'sys_schedule'
+        this.form.objId = -1
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            // if (this.form.id != undefined) {
+            //   updateNotice(this.form).then(response => {
+            //     this.msgSuccess("修改成功");
+            //     this.open = false;
+            //     this.getList();
+            //   });
+            // } else {
+              addConfigindex(this.form).then(response => {
+                this.msgSuccess("新增成功");
+                // this.open = false;
+                this.cancel();
+              });
+            // }
+          }
+        });
+        // this.$emit('submitForm',this.config)
+      },
+      cancel(){
+       this.$emit('cancel',this.config)
+      },
       handleCheckedCitiesChange(value){
-        console.log(value)
+        console.log(this.config)
       }
     }
   }
 </script>
 
-<style>
+<style lang="scss">
+  .from_index{
+    .el-form-item{
+      width: 93%;
+    }
+    .el-input{
+      width: 100%;
+    }
+    .el-select{
+      width: 100%;
+    }
+  }
+</style>
+<style scoped lang="scss">
+  .dialog-footer{
+    display: flex;
+    justify-content: flex-end;
+  }
 </style>

+ 2 - 0
ruoyi-ui/src/main.js

@@ -23,6 +23,7 @@ import Pagination from "@/components/Pagination";
 import RightToolbar from "@/components/RightToolbar"
 import DynamicForm from "@/components/DynamicForm"
 import DynamicForms from "@/components/DynamicForms"
+import MemoranDum from "@/components/MemoranDum"
 
 // 全局方法挂载
 Vue.prototype.getDicts = getDicts
@@ -52,6 +53,7 @@ Vue.component('Pagination', Pagination)
 Vue.component('RightToolbar', RightToolbar)
 Vue.component('DynamicForm', DynamicForm)
 Vue.component('DynamicForms', DynamicForms)
+Vue.component('MemoranDum', MemoranDum)
 
 Vue.use(permission)
 

+ 1 - 1
ruoyi-ui/src/settings.js

@@ -1,7 +1,7 @@
 module.exports = {
   title: '博曼办公协作',
   // urls: `http://192.168.101.11:8090`,
-  urls: `http://192.168.101.110:8090`,
+  urls: `http://192.168.101.110:8080`,
   // urls: `http://192.168.101.49:8080`,
 
   // urls: `http://192.168.101.10:8080`,

+ 68 - 23
ruoyi-ui/src/views/index.vue

@@ -175,7 +175,7 @@
             <div class="index_navTime ">
               <p class="index_navTimep">
                 <span>备忘录</span>
-                <span><i class="el-icon-date"></i>创建备忘录</span>
+                <span @click="memoere"><i class="el-icon-date"></i>创建备忘录</span>
               </p>
               <ul >
                 <li v-for="(item,index) in getmemorandum" :key="index">
@@ -238,17 +238,14 @@
     <!-- <el-divider /> -->
   <!-- 添加或修改公告对话框 -->
   <el-dialog :title="title" :visible.sync="open" width="980px" append-to-body>
-    <el-form ref="form" :model="form" :rules="rules" label-width="160px">
-      <el-row>
-        <el-col :span="24"  >
-            <dynamic-forms :config="form" @inputs = "changeFn" :formConfig="item" v-for="(item,index) in form.columns" :key='index' />
-        </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>
+            <!-- if(){ -->
+              <!-- 日历 -->
+              <dynamic-forms v-if="nummer == 0" :config="form" @inputs = "changeFn" :formConfig="queryData" :open="open" @submitForm="submitForm($event)" @cancel="cancel($event)" :nummer = "nummer" />
+            <!-- }else if(){ -->
+              <!-- 备忘录 -->
+              <memoran-dum v-if="nummer == 1" :config="form" @inputs = "changeFn" :formConfig="queryDatatwo" :open="open"  @cancel="cancel($event)" :nummer = "nummer" />
+            <!-- } -->
+
   </el-dialog>
   </div>
 </template>
@@ -360,6 +357,10 @@ export default {
       calendaradd:{
         table:'sys_schedule'
       },
+      //备忘录弹框
+      calendaraddmer:{
+        table:'sys_memorandum'
+      },
       // input
       inputList:[],
       // 时间
@@ -370,7 +371,10 @@ export default {
       chekbosList:[],
       //下拉框
       selectList:[],
-      editorList:[]
+      editorList:[],
+      queryData: {},
+      queryDatatwo:{},
+      nummer:0   //0 是日历  1 是备忘录
     };
   },
 
@@ -391,12 +395,16 @@ export default {
      brightDate () {
        // let ary = []
        var that =  this
-       console.log(that.calendarData)
+       console.log(that.calendarData,887)
        for (var i = 0 ; i < that.calendarData.length; i++) {
          // that.ary.push(that.calendarData[i].startDate)
          // that.ary.push(that.calendarData[i].begin_time.slice(0,10))
-         that.ary = that.calendarData[i].all_date
-         console.log(that.calendarData[i].begin_time)
+         // that.ary.push(that.calendarData[i].all_date.split(','))
+         if(that.calendarData[i].all_date !== undefined){
+           that.ary.push(that.calendarData[i].all_date.join(','))
+           console.log(that.calendarData[i].all_date.join(','),754)
+         }
+         // console.log(that.calendarData[i].all_date,754)
        }
        console.log(that.ary)
        return that.ary
@@ -413,7 +421,10 @@ export default {
           // this.calendarData[i].begin_time = this.calendarData[i].begin_time.slice(0,10)
             console.log(this.calendarData[i].begin_time,123)
             // if (date === this.calendarData[i].begin_time) {
-              content = this.calendarData[i].remind_type
+              if(this.calendarData[i].all_date !== undefined){
+                content = this.calendarData[i].remind_type
+              }
+
             // }
           }
           console.log(content)
@@ -534,8 +545,33 @@ export default {
      this.loading = true;
      listIndextanl(this.calendaradd).then(response => {
          if(response.data !== undefined){
-           this.form = response.data
-           this.form.columns.filter(route => {
+           this.queryData = response.data
+           this.queryData.columns.filter(route => {
+             // console.log(route)
+             if(route.htmlType == "input" || route.htmlType == 'textarea'){
+               this.inputList.push(route)
+             }else if(route.htmlType == "select"){
+               this.selectList.push(route)
+             }else if(route.htmlType == "datetime"){
+               this.dataList.push(route)
+             }else if(route.htmlType == "editor"){
+               this.editorList.push(route)
+             }
+         })
+        // console.log(this.selectList)
+
+         }
+         this.loading = false;
+       }
+     );
+   },
+   //备忘录新增弹框数据
+   getLisalendaradddmer() {
+     this.loading = true;
+     listIndextanl(this.calendaraddmer).then(response => {
+         if(response.data !== undefined){
+           this.queryDatatwo = response.data
+           this.queryDatatwo.columns.filter(route => {
              // console.log(route)
              if(route.htmlType == "input" || route.htmlType == 'textarea'){
                this.inputList.push(route)
@@ -547,7 +583,7 @@ export default {
                this.editorList.push(route)
              }
          })
-        console.log(this.selectList)
+        // console.log(this.selectList)
 
          }
          this.loading = false;
@@ -612,15 +648,16 @@ export default {
     },
     /** 新增按钮操作 */
     handleAdd() {
+      this.nummer = 0
       console.log(this.open)
       this.reset();
       this.getLisalendaraddd()
       this.open = true;
-      this.title = "添加日";
+      this.title = "添加日";
     },
     /** 提交按钮 */
-    submitForm: function() {
-      console.log(this.form)
+    submitForm: function(data) {
+      console.log(this.form,data)
       // this.$refs["form"].validate(valid => {
       //   if (valid) {
       //     if (this.form.id != undefined) {
@@ -641,10 +678,18 @@ export default {
     },
     // 弹框
     changeFn(obj) {
+      console.log(obj)
       for(let key in obj){
         this.form[key] = obj[key]
       }
     },
+    // 新增备忘录
+    memoere(){
+     this.nummer = 1
+     this.open = true;
+     this.title = "添加备忘录";
+     this.getLisalendaradddmer()
+    }
   },
 };
 </script>

+ 16 - 14
ruoyi-ui/src/views/system/surface/index.vue

@@ -7,7 +7,7 @@
         <el-button type="primary" plain v-for="(item,index) in queryData.buttonList.split('')" :key="index">{{item | btnConversion}}</el-button>
       </div>
       <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" >
-        <dynamic-form :config="queryParams" @inputs = "changeFn" :formConfig="item" v-for="(item,index) in queryData.queryList" :key='index' />
+        <dynamic-form :ref="item.columnName" :config="queryParams" @inputs = "changeFn" :formConfig="item" v-for="(item,index) in queryData.queryList" :key='index' />
         <el-form-item>
           <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
           <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -94,6 +94,14 @@
       },
       /** 搜索按钮操作 */
       handleQuery() {
+        for(let item of this.queryData.queryList){
+          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,22311)
         this.getList();
       },
       getList() {
@@ -105,19 +113,13 @@
         }).then(res => {
           let data = res.data
           this.queryData = data
-          console.log( this.queryData.queryList)
-          this.queryData.queryList.filter(route => {
-            if(route.htmlType == 'checkbox'){
-              route.sysDictDatatwo = []
-              route.sysDictDatatwo.push(route.columnName)
-              // route.sysDictData.filter(router=>{
-              //  route.sysDictDatatwo.push(router.dictLabel)
-              //  console.log( route.sysDictDatatwo)
-              // })
-              console.log(route.sysDictDatatwo,846)
-            }
-          })
-          console.log(this.queryData.queryList)
+          // this.queryData.queryList.filter(route => {
+          //   if(route.htmlType == 'checkbox'){
+          //     route.sysDictDatatwo = []
+          //     route.sysDictDatatwo.push(route.columnName)
+          //     console.log(route.sysDictDatatwo,846)
+          //   }
+          // })
         })
       },
       handleChange(val) {

+ 3 - 2
ruoyi-ui/src/views/system/table/index.vue

@@ -8,7 +8,7 @@
       </div>
 
     </div>
-    <!-- 内容 -->  
+    <!-- 内容 -->
     <div class="table_nav headertable_nav">
       <el-collapse v-model="activeNames" @change="handleChange">
         <el-collapse-item :title="title" :name="index" v-for="(item,index) in 4" :key="index">
@@ -96,7 +96,8 @@
       },
       /** 搜索按钮操作 */
       handleQuery() {
-        this.getList();
+        console.log(this.queryParams)
+        // this.getList();
       },
       getList() {