فهرست منبع

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	boman-modules/boman-system/src/main/java/com/boman/system/common/TableServiceCmdService.java
Administrator 4 سال پیش
والد
کامیت
3232fd012f
24فایلهای تغییر یافته به همراه660 افزوده شده و 161 حذف شده
  1. 9 1
      boman-common/boman-common-core/src/main/java/com/boman/common/core/utils/obj/ObjectUtils.java
  2. 1 1
      boman-modules/boman-gen/src/main/java/com/boman/gen/controller/MyController.java
  3. 1 1
      boman-modules/boman-system/src/main/java/com/boman/system/common/FormDataConstant.java
  4. 77 38
      boman-modules/boman-system/src/main/java/com/boman/system/common/TableServiceCmdService.java
  5. 43 0
      boman-modules/boman-system/src/main/java/com/boman/system/controller/TableController.java
  6. 20 7
      boman-modules/boman-system/src/main/java/com/boman/system/mapper/StandardlyMapper.java
  7. 4 3
      boman-modules/boman-system/src/main/java/com/boman/system/service/IBaseUpdateService.java
  8. 39 7
      boman-modules/boman-system/src/main/java/com/boman/system/service/impl/BaseUpdateServiceImpl.java
  9. 1 1
      ruoyi-ui/src/App.vue
  10. 7 0
      ruoyi-ui/src/api/system/config.js
  11. 1 1
      ruoyi-ui/src/components/Breadcrumb/index.vue
  12. 2 1
      ruoyi-ui/src/components/Hamburger/index.vue
  13. 1 0
      ruoyi-ui/src/components/HeaderSearch/index.vue
  14. 89 15
      ruoyi-ui/src/components/SignNumArr/index.vue
  15. 1 1
      ruoyi-ui/src/layout/components/AppMain.vue
  16. 4 1
      ruoyi-ui/src/layout/components/Navbar.vue
  17. 6 4
      ruoyi-ui/src/layout/components/Sidebar/SidebarItem.vue
  18. 22 8
      ruoyi-ui/src/layout/components/Sidebar/index.vue
  19. 2 2
      ruoyi-ui/src/layout/index.vue
  20. 1 0
      ruoyi-ui/src/store/getters.js
  21. 12 1
      ruoyi-ui/src/store/modules/permission.js
  22. 2 2
      ruoyi-ui/src/store/modules/user.js
  23. 314 65
      ruoyi-ui/src/views/index.vue
  24. 1 1
      ruoyi-ui/src/views/system/role/index.vue

+ 9 - 1
boman-common/boman-common-core/src/main/java/com/boman/common/core/utils/obj/ObjectUtils.java

@@ -159,5 +159,13 @@ public class ObjectUtils {
     }
 
 
-
+    /**
+     * 功能描述: 是否小于0
+     *
+     * @param aLong aLong
+     * @return boolean true小于0
+     */
+    public static boolean ltZero(Long aLong) {
+        return null != aLong && aLong < 0;
+    }
 }

+ 1 - 1
boman-modules/boman-gen/src/main/java/com/boman/gen/controller/MyController.java

@@ -50,7 +50,7 @@ public class MyController extends BaseController {
     @GetMapping("/loadTable")
     public AjaxResult loadTable(GenTable genTable) {
         List<GenTable> tableList = genTableService.selectGenTableList(genTable);
-        requiredNonNull(tableList);
+        requireNonNull(tableList);
 
         // load table and tableColumn
         List<Long> tableIdList = tableList.stream().map(GenTable::getTableId).collect(Collectors.toList());

+ 1 - 1
boman-modules/boman-system/src/main/java/com/boman/system/common/FormDataConstant.java

@@ -101,7 +101,7 @@ public class FormDataConstant {
 
 
     /**  状态 */
-    public static final String STATUS = "STATUS";
+    public static final String STATUS = "status";
 
 
 

+ 77 - 38
boman-modules/boman-system/src/main/java/com/boman/system/common/TableServiceCmdService.java

@@ -31,6 +31,8 @@ import java.util.stream.Collectors;
 import static com.boman.common.core.utils.obj.ObjectUtils.*;
 import static com.boman.system.common.FormDataConstant.CONDITION;
 import static com.boman.system.common.FormDataConstant.SHOW_DATA;
+import static com.boman.common.core.utils.obj.ObjectUtils.*;
+import static com.boman.system.common.FormDataConstant.*;
 
 /**
  * @author shiqian
@@ -51,6 +53,8 @@ public class TableServiceCmdService {
     @Resource
     private IBaseSubmitService submitService;
     @Resource
+    private IBaseUpdateService updateService;
+    @Resource
     private  RestTemplate restTemplate;
 
     private static final Logger LOGGER = LoggerFactory.getLogger(TableServiceCmdService.class);
@@ -64,27 +68,45 @@ public class TableServiceCmdService {
     }
 
     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, "主键名称为空");
-        ;
 
         //
         List<String> allColumnNameList = columns.stream()
                 .map(GenTableColumn::getColumnName)
                 .collect(Collectors.toList());
-        Long maxId = IdUtils.getMaxId(baseTableDTO.getTable(), pkName);
-        RowResult rowResult = saveService.insertRow(context.getRealTableName(), pkName, maxId, context.getRows().get(0), allColumnNameList);
-        if (RowResult.checkSuccess(rowResult)) {
-            LOGGER.info("保存成功,封装到数据库的数据为: {}", JSON.toJSONString(rowResult.getData()));
-        } else {
-            LOGGER.error("保存失败,保持的原始数据为: {}", JSON.toJSONString(baseTableSaveDTO));
+
+        // 新增
+        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);
+            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 AjaxResult.success(rowResult);
+        return result;
+
     }
 
     /**
@@ -207,7 +229,7 @@ public class TableServiceCmdService {
                 // long string collection 暂时只作此三种类型判断
                 if (column.getColumnName().equalsIgnoreCase(key) && ObjectUtils.isNotEmpty(value)) {
                     // columnType 作为判断需不需要转义的一个标准,防止索引失效
-                    result.put(key, packValue(String.valueOf(value), column.getQueryType(), column.getColumnType()));
+                    result.put(key, Lists.newArrayList(String.valueOf(value), column.getQueryType(), column.getColumnType()));
                     break;
                 }
             }
@@ -315,49 +337,49 @@ public class TableServiceCmdService {
         List<JSONObject> beforeList = selectService.selectByIdList(tableName, pkName, idList, showData);
         requireNonNull(beforeList);
 
-        // 符合条件的需要提交的
-        List<JSONObject> needCommitList = Lists.newArrayListWithCapacity(16);
-        // 不符合条件的需要提交的
-        List<JSONObject> notNeedCommitList = Lists.newArrayListWithCapacity(16);
-        Iterator<JSONObject> iterator = beforeList.iterator();
-        while (iterator.hasNext()) {
-            JSONObject next = iterator.next();
-            String dbStatus = next.getString(FormDataConstant.STATUS);
+        for (JSONObject commitDatum : commitData) {
+            String dbStatus = getStatusFromFormData(commitDatum, beforeList);
             // 只能是未提交的状态下,才能调用提交
             if (isSubmit) {
+                // 只能是未提交的状态下,才能调用提交, 下面是不允许
                 if (!SubmitConstant.NOT_SUBMIT.equals(dbStatus)) {
-                    next.put(SubmitConstant.SUBMIT_RESULT, SubmitConstant.NOT_ALLOWED);
-                    notNeedCommitList.add(next);
-                    iterator.remove();
+                    commitDatum.put(SubmitConstant.SUBMIT_RESULT, SubmitConstant.NOT_ALLOWED);
                 } else {
-                    needCommitList.add(next);
+                    commitDatum.put(SubmitConstant.SUBMIT_USERID, 123);
+                    commitDatum.put(SubmitConstant.SUBMIT_TIME, new Timestamp(System.currentTimeMillis()));
+                    int effective = submitService.handlerSubmit(tableName, pkName, commitDatum, commitDatum.getLong(FormDataConstant.ID));
+                    if (effective > 0) {
+                        commitDatum.put(SubmitConstant.SUBMIT_RESULT, SubmitConstant.SUCCESS);
+                    } else {
+                        commitDatum.put(SubmitConstant.SUBMIT_RESULT, SubmitConstant.FAIL);
+                    }
                 }
             } else {
-                // 只有在已提交的情况下才能反提交
+                // 只有在已提交的情况下才能反提交, 下面是不允许
                 if (!SubmitConstant.SUBMITTED.equals(dbStatus)) {
-                    next.put(SubmitConstant.SUBMIT_RESULT, SubmitConstant.NOT_ALLOWED);
-                    notNeedCommitList.add(next);
-                    iterator.remove();
+                    commitDatum.put(SubmitConstant.SUBMIT_RESULT, SubmitConstant.NOT_ALLOWED);
                 } else {
-                    needCommitList.add(next);
+                    commitDatum.put(SubmitConstant.SUBMIT_USERID, 123);
+                    commitDatum.put(SubmitConstant.SUBMIT_TIME, new Timestamp(System.currentTimeMillis()));
+                    int effective = submitService.handlerSubmit(tableName, pkName, commitDatum, commitDatum.getLong(FormDataConstant.ID));
+                    if (effective > 0) {
+                        commitDatum.put(SubmitConstant.SUBMIT_RESULT, SubmitConstant.SUCCESS);
+                    } else {
+                        commitDatum.put(SubmitConstant.SUBMIT_RESULT, SubmitConstant.FAIL);
+                    }
                 }
             }
         }
+        return AjaxResult.success(commitData);
+    }
 
-        for (JSONObject jsonObject : needCommitList) {
-            jsonObject.put(SubmitConstant.SUBMIT_USERID, SecurityUtils.getUserId());
-            jsonObject.put(SubmitConstant.SUBMIT_TIME, new Timestamp(System.currentTimeMillis()));
-//            jsonObject.put(SubmitConstant.REMARK, "unknown");
-            int effective = submitService.handlerSubmit(tableName, pkName, jsonObject, jsonObject.getLong(FormDataConstant.ID));
-            if (effective > 0) {
-                jsonObject.put(SubmitConstant.SUBMIT_RESULT, SubmitConstant.SUCCESS);
-            } else {
-                jsonObject.put(SubmitConstant.SUBMIT_RESULT, SubmitConstant.FAIL);
+    private String getStatusFromFormData(JSONObject next, List<JSONObject> commitData) {
+        for (JSONObject jsonObject : commitData) {
+            if (jsonObject.getLong(FormDataConstant.ID).equals(next.getLong(FormDataConstant.ID))) {
+                return jsonObject.getString(FormDataConstant.STATUS);
             }
         }
-
-        needCommitList.addAll(notNeedCommitList);
-        return AjaxResult.success(needCommitList);
+        throw new IllegalArgumentException("不可能没有一个合适的");
     }
 
 
@@ -409,4 +431,21 @@ public class TableServiceCmdService {
         GenTable genTable = redisService.getCacheObject(redisKeyPrefix + requireNonNull(tableName));
         return requireNonNull(genTable);
     }
+
+    /**
+     * 功能描述: 反提交接口, 更改的字段类型和字段值都是一致的
+     *                {
+     *                    "table": "sys_config",
+     *                }
+     *
+     *
+     * @param condition condition
+     * @return com.boman.common.core.web.domain.AjaxResult
+     */
+    public AjaxResult getByTableName(BaseTableSaveDTO condition) {
+//        requiredNonNull(condition.getTable(), "表名为空");
+        GenTable genTable = getTableFromRedisByTableName(RedisKey.TABLE_INFO, condition.getTable());
+        return AjaxResult.success(genTable);
+    }
 }
+

+ 43 - 0
boman-modules/boman-system/src/main/java/com/boman/system/controller/TableController.java

@@ -0,0 +1,43 @@
+package com.boman.system.controller;
+
+import com.boman.common.core.web.domain.AjaxResult;
+import com.boman.system.common.BaseTableSaveDTO;
+import com.boman.system.common.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);
+    }
+
+
+}

+ 20 - 7
boman-modules/boman-system/src/main/java/com/boman/system/mapper/StandardlyMapper.java

@@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.boman.common.core.utils.obj.ObjectUtils;
 import com.boman.system.common.FormDataConstant;
-import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.ibatis.annotations.*;
 import org.apache.ibatis.annotations.Param;
@@ -584,6 +583,12 @@ public interface StandardlyMapper {
             return result;
         }
 
+        /**
+         * 功能描述: 判断传过来的值是否需要转义
+         *
+         * @param packCondition 封装的条件
+         * @param wholeSql      sql
+         */
         private void packCondition(JSONObject packCondition, StringBuilder wholeSql) {
             if (ObjectUtils.isNotEmpty(packCondition)) {
                 wholeSql.append(" where ");
@@ -591,18 +596,26 @@ public interface StandardlyMapper {
                 for (Map.Entry<String, Object> entry : packCondition.entrySet()) {
                     String key = entry.getKey();
                     Object valueObj = entry.getValue();
-                    String valueStr = ((String) valueObj);
-                    // {@link com.boman.system.common.TableServiceCmdService.packValue} 这里是拼参数的地方
-                    String[] split = valueStr.split("_");
-                    String value = split[0];
-                    String queryType = split[1];
-                    String columnType = split[2];
+                    List<String> types = ((List<String>) valueObj);
+                    // {@link com.boman.system.common.TableServiceCmdService.packColCondition} 这里是拼参数的地方
+                    String value = types.get(0);
+                    String queryType = types.get(1);
+                    String columnType = types.get(2);
                     conditionSql.append(key).append(covert(queryType, columnType, key, value)).append(" and ");
                 }
                 wholeSql.append(StringUtils.substringBeforeLast(conditionSql.toString(), " and"));
             }
         }
 
+        /**
+         * 功能描述: 仅此用来拼装查询条件,不做他用
+         *
+         * @param queryType  like > < =
+         * @param columnType varchar char textarea timestamp
+         * @param key        key
+         * @param value      value
+         * @return java.lang.String
+         */
         private String covert(String queryType, String columnType, String key, String value) {
             // false 不需要转义
             boolean needEscape = columnType.contains(VARCHAR) || columnType.contains(CHAR)

+ 4 - 3
boman-modules/boman-system/src/main/java/com/boman/system/service/IBaseUpdateService.java

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

+ 39 - 7
boman-modules/boman-system/src/main/java/com/boman/system/service/impl/BaseUpdateServiceImpl.java

@@ -1,6 +1,9 @@
 package com.boman.system.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
+import com.boman.common.core.utils.obj.ObjectUtils;
+import com.boman.gen.domain.GenTableColumn;
+import com.boman.system.common.TableServiceContext;
 import com.boman.system.mapper.StandardlyMapper;
 import com.boman.system.service.IBaseUpdateService;
 import org.slf4j.Logger;
@@ -9,8 +12,12 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Map;
 
+import static com.boman.common.core.utils.obj.ObjectUtils.escapeStr;
 import static com.boman.common.core.utils.obj.ObjectUtils.requireNonNull;
+import static com.boman.system.common.FormDataConstant.*;
+import static com.boman.system.common.FormDataConstant.TIMESTAMP;
 
 /**
  * @author shiqian
@@ -25,21 +32,46 @@ public class BaseUpdateServiceImpl implements IBaseUpdateService {
     private StandardlyMapper mapper;
 
     /**
-     * 功能描述: 批量修改
+     * 功能描述: 批量修改, 默认需要更改的model,更改的字段类型和字段值都是一致的
      *
-     * @param tableName  表名
+     * @param context    用到其中的表名和所有的列(用来判断是否需要转义字符)
      * @param pkName     主键名
      * @param idList     idList
-     * @param commitData 需要更改的model
+     * @param commitData 需要更改的model, 已经转义好了,不需要到mapper层再去转义
      * @return int
      */
     @Override
-    public int updateByIdList(String tableName, String pkName, List<Long> idList, JSONObject commitData) {
-        requireNonNull(tableName, "表名为空");
+    public int updateByIdList(TableServiceContext context, String pkName, List<Long> idList, JSONObject commitData) {
+        requireNonNull(context.getRealTableName(), "表名为空");
         requireNonNull(pkName, "主键名称为空");;
-        requireNonNull(idList);
+        requireNonNull(idList, "需要修改的idList为空");
         requireNonNull(commitData, "需要更改的参数为空");
 
-        return mapper.updateByIdList(tableName, pkName, idList, commitData);
+        commitData = ObjectUtils.ifNullSetEmpty(escapeByQueryType(context.getTable().getColumns(), commitData));
+        return mapper.updateByIdList(context.getRealTableName(), pkName, idList, commitData);
+    }
+
+    private JSONObject escapeByQueryType(List<GenTableColumn> columns, JSONObject commitData) {
+        requireNonNull(columns);
+        JSONObject result = new JSONObject(columns.size());
+        for (Map.Entry<String, Object> entry : commitData.entrySet()) {
+            String key = entry.getKey();
+            Object value = entry.getValue();
+            for (GenTableColumn column : columns) {
+                if (column.getColumnName().equalsIgnoreCase(key) && ObjectUtils.isNotEmpty(value)) {
+                    value = covert(column.getColumnType(), String.valueOf(value));
+                    result.put(key, value);
+                }
+            }
+        }
+
+        return result;
+    }
+
+    private String covert(String columnType, String value) {
+        // false 不需要转义
+        boolean needEscape = columnType.contains(VARCHAR) || columnType.contains(CHAR)
+                || columnType.contains(DATETIME) || columnType.contains(TIMESTAMP);
+        return needEscape ? escapeStr(value) : value;
     }
 }

+ 1 - 1
ruoyi-ui/src/App.vue

@@ -6,6 +6,6 @@
 
 <script>
 export default  {
-  name:  'App'
+  name:  'App',
 }
 </script>

+ 7 - 0
ruoyi-ui/src/api/system/config.js

@@ -55,6 +55,13 @@ export function listIndex(data) {
     data: data
   })
 }
+export function listIndexfou(data) {
+  return request({
+    url: '/boman-system/p/cs/getTableQuery',
+    method: 'post',
+    data: data
+  })
+}
 // 修改参数配置
 export function updateConfig(data) {
   return request({

+ 1 - 1
ruoyi-ui/src/components/Breadcrumb/index.vue

@@ -37,8 +37,8 @@ export default {
       if (!this.isDashboard(first)) {
         matched = [{ path: '/index', meta: { title: '首页' }}].concat(matched)
       }
-
       this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
+      console.log(this.levelList,999)
     },
     isDashboard(route) {
       const name = route && route.name

+ 2 - 1
ruoyi-ui/src/components/Hamburger/index.vue

@@ -7,8 +7,9 @@
       xmlns="http://www.w3.org/2000/svg"
       width="64"
       height="64"
+       fill="#fff"
     >
-      <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z" />
+      <path fill="#fff" d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z" />
     </svg>
   </div>
 </template>

+ 1 - 0
ruoyi-ui/src/components/HeaderSearch/index.vue

@@ -56,6 +56,7 @@ export default {
   },
   mounted() {
     this.searchPool = this.generateRoutes(this.routes)
+    console.log(this.searchPool,999)
   },
   methods: {
     click() {

+ 89 - 15
ruoyi-ui/src/components/SignNumArr/index.vue

@@ -1,28 +1,91 @@
 <template>
   <div class="sign_box">
-    <div class="sign_item" v-for="item in 4" @click="indexs = item">
-      <img src="@/assets/images/pic_tabbg@2x.png" v-show="indexs==item" alt="" class="img">
-      <img src="@/assets/404_images/404_cloud.png" alt="" class="icon">
-      <span>首页</span>
+    <div class="sign_item" v-for="item in this.sidebarRouters.filter(res => {
+          return res.hidden == false || res.redirect == 'index'
+        })"
+      @click="tabBtn(item)">
+      <img src="@/assets/images/pic_tabbg@2x.png" draggable="false" v-show="activeMenu.includes((item.path||item.redirect))"
+        alt="" class="img">
+      <item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="item.meta.title" />
+      <item v-if="!item.meta" :icon="item.meta && item.meta.icon" :title="'首页'" />
     </div>
-
   </div>
 </template>
 
 <script>
-  export default{
+  import {
+    mapGetters,
+    mapState
+  } from "vuex";
+  import Item from '@/layout/components/Sidebar/Item'
+
+  export default {
     data() {
       return {
-        indexs:1
+        indexs: 1,
+        newArr: [],
+      }
+    },
+    components: {
+      Item
+    },
+    computed: {
+      ...mapGetters(["sidebarRouters", "sidebar", "tabIndex"]),
+      activeMenu() {
+        // const route = this.$route;
+        // const { meta, path } = route;
+        // // if set path, the sidebar will highlight the path you set
+        // if (meta.activeMenu) {
+        //     return meta.activeMenu;
+        // }
+        console.log(this.tabIndex, 887)
+        return this.tabIndex;
+      },
+    },
+    mounted() {
+      this.init()
+    },
+    watch: {
+
+    },
+    methods: {
+      tabBtn(item) {
+        if(this.activeMenu.includes((item.path||item.redirect))){
+          return
+        }
+        if (item.redirect == 'index') {
+          if(this.$route.path!=='/index'){
+            this.$router.push({
+              path: '/index'
+            })
+          }
+          this.$store.dispatch('TabFn', item.redirect)
+          return
+        }
+        this.$store.dispatch('TabFn', item.path)
+      },
+      init() {
+        const route = this.$route;
+        const {
+          meta,
+          path
+        } = route;
+        // if set path, the sidebar will highlight the path you set
+        console.log(route)
+        if (meta.activeMenu) {
+          this.$store.dispatch('TabFn', meta.activeMenu)
+        }
+        this.$store.dispatch('TabFn', path)
       }
     }
   }
 </script>
 
 <style lang="scss" scoped>
-  .sign_box{
-    padding-left: 52px;
-    .sign_item{
+  .sign_box {
+    // padding-left: 12px;
+
+    .sign_item {
       cursor: pointer;
       float: left;
       display: flex;
@@ -33,25 +96,36 @@
       width: 153px;
       padding-top: 10px;
       box-sizing: border-box;
-      .img{
+      color: #fff;
+
+      .img {
         width: 153px;
         height: 48px;
         position: absolute;
         left: 0;
         bottom: 0;
       }
-      .icon{
+
+      .icon {
         position: relative;
         z-index: 1;
         width: 20px;
         height: 20px;
         margin-right: 8px;
       }
-      span{
+
+      span {
         position: relative;
         z-index: 1;
-        color: #fff;
-        font-size: 17px;
+        color: #fff !important;
+        font-size: 17px !important;
+      }
+
+      svg {
+        color: #fff !important;
+        z-index: 2;
+        line-height: 1;
+        margin-right: 5px;
       }
     }
   }

+ 1 - 1
ruoyi-ui/src/layout/components/AppMain.vue

@@ -38,7 +38,7 @@ export default {
 .hasTagsView {
   .app-main {
     /* 84 = navbar + tags-view = 50 + 34 */
-    min-height: calc(100vh - 84px);
+    min-height: calc(100vh - 94px);
   }
 
   .fixed-header+.app-main {

+ 4 - 1
ruoyi-ui/src/layout/components/Navbar.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="navbar">
-    <!-- <hamburger id="hamburger-container" :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" /> -->
+    <hamburger id="hamburger-container" :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
 
     <!-- <breadcrumb id="breadcrumb-container" class="breadcrumb-container" /> -->
 
@@ -124,6 +124,9 @@ export default {
     transition: background .3s;
     color: #fff;
     -webkit-tap-highlight-color:transparent;
+    svg{
+      color: #fff!important;
+    }
 
     &:hover {
       background: rgba(0, 0, 0, .025)

+ 6 - 4
ruoyi-ui/src/layout/components/Sidebar/SidebarItem.vue

@@ -3,16 +3,16 @@
     <template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow">
       <app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path)">
         <el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}">
-          <item :title="onlyOneChild.meta.title" />
-          <!-- <item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" /> -->
+          <!-- <item :title="onlyOneChild.meta.title" /> -->
+          <item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" />
         </el-menu-item>
       </app-link>
     </template>
 
     <el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body>
       <template slot="title">
-        <!-- <item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="item.meta.title" /> -->
-        <item v-if="item.meta" :title="item.meta.title" />
+        <item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="item.meta.title" />
+        <!-- <item v-if="item.meta" :title="item.meta.title" /> -->
       </template>
       <sidebar-item
         v-for="child in item.children"
@@ -56,6 +56,8 @@ export default {
     this.onlyOneChild = null
     return {}
   },
+  mounted() {
+  },
   methods: {
     hasOneShowingChild(children = [], parent) {
       const showingChildren = children.filter(item => {

+ 22 - 8
ruoyi-ui/src/layout/components/Sidebar/index.vue

@@ -13,7 +13,7 @@
                 mode="vertical"
             >
                 <sidebar-item
-                    v-for="(route, index) in sidebarRouters"
+                    v-for="(route, index) in handleSide"
                     :key="route.path  + index"
                     :item="route"
                     :base-path="route.path"
@@ -31,17 +31,31 @@ import variables from "@/assets/styles/variables.scss";
 
 export default {
     components: { SidebarItem, Logo },
+    mounted() {
+      console.log(this.sidebarRouters,this.sidebar,this.settings)
+    },
     computed: {
         ...mapState(["settings"]),
-        ...mapGetters(["sidebarRouters", "sidebar"]),
+        ...mapGetters(["sidebarRouters", "sidebar","tabIndex"]),
         activeMenu() {
-            const route = this.$route;
-            const { meta, path } = route;
-            // if set path, the sidebar will highlight the path you set
-            if (meta.activeMenu) {
-                return meta.activeMenu;
+            // const route = this.$route;
+            // const { meta, path } = route;
+            // // if set path, the sidebar will highlight the path you set
+            // if (meta.activeMenu) {
+            //     return meta.activeMenu;
+            // }
+
+            return this.tabIndex;
+        },
+        handleSide() {
+          let add = []
+          console.log(this.sidebarRouters)
+          for(let item of this.sidebarRouters){
+            if(this.activeMenu.includes(item.path||item.redirect)){
+              add.push(item)
             }
-            return path;
+          }
+          return add
         },
         showLogo() {
             return this.$store.state.settings.sidebarLogo;

+ 2 - 2
ruoyi-ui/src/layout/index.vue

@@ -5,10 +5,10 @@
     <div :class="{hasTagsView:needTagsView}" class="main-container">
       <div :class="{'fixed-header':fixedHeader}">
         <navbar />
-        <tags-view v-if="needTagsView&&false"/>
+        <tags-view v-if="needTagsView"/>
       </div>
       <app-main />
-      <right-panel v-if="showSettings&&false">
+      <right-panel v-if="showSettings">
         <settings />
       </right-panel>
     </div>

+ 1 - 0
ruoyi-ui/src/store/getters.js

@@ -12,5 +12,6 @@ const getters = {
   permissions: state => state.user.permissions,
   permission_routes: state => state.permission.routes,
   sidebarRouters:state => state.permission.sidebarRouters,
+  tabIndex:state => state.permission.tabIndex,
 }
 export default getters

+ 12 - 1
ruoyi-ui/src/store/modules/permission.js

@@ -7,9 +7,13 @@ const permission = {
   state: {
     routes: [],
     addRoutes: [],
-    sidebarRouters: []
+    sidebarRouters: [],
+    tabIndex: '',
   },
   mutations: {
+    SET_TABINDEX: (state, tabIndex) => {
+      state.tabIndex = tabIndex
+    },
     SET_ROUTES: (state, routes) => {
       state.addRoutes = routes
       state.routes = constantRoutes.concat(routes)
@@ -19,6 +23,13 @@ const permission = {
     },
   },
   actions: {
+    // 根据属性修改tab值
+    TabFn({ commit, state },userInfo){
+      return new Promise(resolve => {
+        commit('SET_TABINDEX', userInfo)
+        resolve()
+      })
+    },
     // 生成路由
     GenerateRoutes({ commit }) {
       return new Promise(resolve => {

+ 2 - 2
ruoyi-ui/src/store/modules/user.js

@@ -7,7 +7,7 @@ const user = {
     name: '',
     avatar: '',
     roles: [],
-    permissions: []
+    permissions: [],
   },
 
   mutations: {
@@ -85,7 +85,7 @@ const user = {
         })
       })
     },
-    
+
     // 退出系统
     LogOut({ commit, state }) {
       return new Promise((resolve, reject) => {

+ 314 - 65
ruoyi-ui/src/views/index.vue

@@ -17,12 +17,13 @@
                   </ul>
                   <div class="index_haderPagin">
                     <el-pagination
+                          v-show="total>0"
                          @size-change="handleSizeChange"
                          @current-change="handleCurrentChange"
                          :current-page.sync="currentPage3"
                          :page-size="pageSize"
                          layout="prev, pager, next, jumper"
-                         :total="1000">
+                         :total="total">
                     </el-pagination>
                     <span>共 {{total}} 条  每页显示 6 条  </span>
                   </div>
@@ -39,7 +40,7 @@
                      <!-- <el-tab-pane  name="first">
                         <span slot="label" class="index_heseviewed"><p class="tab_i">3</p> 我的行程</span> -->
                          <div v-if="num == 0">
-                           <el-table :data="tableData" style="width: 100%;margin-top: 10px;"  :stripe="true"   >
+                           <el-table :data="tableDataalid" style="width: 100%;margin-top: 10px;"  :stripe="true"   >
                                    <!-- <el-table-column type="selection" width="55" align="center" /> -->
                                    <el-table-column label="序号" align="center" prop="noticeId" width="60" height="53" max-height="53" />
                                   <el-table-column
@@ -53,16 +54,18 @@
                                     label="部门"
                                     align="center"
                                     prop="name"
-                                    :formatter="typeFormat"
+
                                     width="70"
                                   />
+                                  <!-- :formatter="typeFormat" -->
                                   <el-table-column
                                     label="请假类型"
                                     align="center"
                                     prop="status"
-                                    :formatter="statusFormat"
+
                                     width="75"
                                   />
+                                  <!-- :formatter="statusFormat" -->
                                   <el-table-column label="请假事由" align="center" prop="createBy" width="100"  :show-overflow-tooltip="true"/>
                                   <el-table-column label="请假时间" align="center" prop="date" width="150"/>
                                     <!-- <template slot-scope="scope">
@@ -112,32 +115,27 @@
            <div class="index_heade  index_headeProfile">
              <img src="../assets/images/icon_tjbj.png" alt="" class="index_headerImg">
             <p class="index_headetab">
-              <span :class="[num == index ? ' spanto' : '']" v-for="(item,index) in editableTabsteo" :key="index" @click="tabSbu(index)">{{item.dictLabel}} </span>
+              <span :class="[numprofile == index ? ' spanto' : '']" v-for="(item,index) in editableTabsteo" :key="index" @click="tabSbuprofile(item.dictValue)">{{item.dictLabel}} </span>
             </p>
             <!-- <el-tabs v-model="activeName" @tab-click="handleClick">
                  <el-tab-pane label="用户管理" name="first"> -->
-                   <div v-if="num == 0">
-                     <h3 style="text-align: center;">北京凯特伟业科技有限公司</h3>
-                                      <p class="index_profilep">	北京凯特伟业科技有限公司,是HBP集团(股票代码002554)下属全资子公司,主营业务互联网软件服务。公司拥有十余年软件开发经验,其案例遍布能源、通信、金融 、医疗、养老 、制造业等各行业。主要产品有JEPLUS软件开发平台、蒜瓣企业管理系统等,并提供saas服务。
-                     蒜瓣产品支持SAAS(即当前软件发展最流行的多租户模式,例如钉钉)和定制两种模式。一般企业不需要购买任何硬件,刚开始只需要简单注册即可,企业无需再配备IT方面的专业技术人员,同时又能得到最新的技术应用,满足企业对信息管理的需求;大型企业有专业化需求时,可采用定制模式。</p>
+                   <div >
+                     <h3 style="text-align: center;">{{tieku}}</h3>
+                     <!-- {{getLisprofileone[0].info_title}} -->
+                                      <p class="index_profilep" > {{comg}}	</p>
+                                      <!-- {{getLisprofileone[0].info_content}} -->
                                       <div class="index_haderPagin">
                                         <el-pagination
-                                             @size-change="handleSizeChange"
-                                             @current-change="handleCurrentChange"
+                                             @size-change="handleSizeChangeprofile"
+                                             @current-change="handleCurrentChangeprofile"
                                              :current-page.sync="currentPage3"
-                                             :page-size="pageSize"
+                                             :page-size="queryParamstabprofile.pageSize"
                                              layout="prev, pager, next, jumper"
-                                             :total="1000">
+                                             :total="totalprofile">
                                         </el-pagination>
-                                        <span>共 85 条  每页显示 5 条  当前 1/17 页</span>
+                                        <span>共 {{totalprofile}} 条  每页显示 1条  </span>
                                       </div>
                    </div>
-                <!-- </el-tab-pane>
-                 <el-tab-pane label="配置管理" name="second">配置管理</el-tab-pane>
-                 <el-tab-pane label="角色管理" name="third">角色管理</el-tab-pane>
-                 <el-tab-pane label="定时任务补偿" name="fourth">定时任务补偿</el-tab-pane>
-             </el-tabs> -->
-
            </div>
         </el-col>
       </el-col>
@@ -149,8 +147,25 @@
               <span>日程</span>
               <span><i class="el-icon-date"></i>创建日程</span>
             </p>
-            <el-calendar v-model="value">
-            </el-calendar>
+            <el-calendar id="calendar">
+                <!-- 这里使用的是 2.5 slot 语法,对于新项目请使用 2.6 slot 语法-->
+                <template
+                  slot="dateCell"
+                  slot-scope="{date, data}">
+                  <!--自定义内容-->
+                  <div>
+                    <div class="calendar-day" style="text-align: center">
+                      <el-tooltip v-if="brightDate.indexOf(data.day) != -1" class="item" effect="dark" :content="content(data.day)" placement="right">
+                        <span class="everyDay">{{ data.day.split('-').slice(2).join('-') }}</span>
+                      </el-tooltip>
+                      <span v-else>{{ data.day.split('-').slice(2).join('-') }}</span>
+                      <!-- <p :class="data.isSelected ? 'is-selected' : ''">
+                            {{ data.day.split('-').slice(1).join('-') }} {{ data.isSelected ? '✔️' : ''}}
+                      </p> -->
+                    </div>
+                  </div>
+                </template>
+              </el-calendar>
             <img src="../assets/images/pic_kpbg.png" alt="" class="index_navTimeimg">
           </div>
          </div>
@@ -159,13 +174,14 @@
            <div class="index_nav index_memoranduNnavTime">
             <div class="index_navTime ">
               <p class="index_navTimep">
-                <span>日程</span>
+                <span>备忘录</span>
                 <span><i class="el-icon-date"></i>创建日程</span>
               </p>
               <ul >
-                <li v-for="(index,item) in 6" :key="index">
-                  <p>今日的工作安排</p>
-                  <span>01-24</span>
+                <li v-for="(item,index) in getmemorandum" :key="index">
+                  <p>{{item.memorandum_title}}
+                  </p>
+                  <span>{{item.remind_time}}</span>
                 </li>
 
               </ul>
@@ -187,41 +203,27 @@
                            <!-- <span><i class="el-icon-date"></i>创建日程</span> -->
                          </p>
                         <div class="index_memoranduMailnav">
-                          <el-table :data="tableData" style="width: 100%;margin-top: 10px;"  :stripe="true"  >
-                                  <!-- <el-table-column type="selection" width="55" align="center" /> -->
-                                  <!-- <el-table-column label="序号" align="center" prop="noticeId" width="60" height="53" max-height="53" /> -->
-                                 <el-table-column
-                                   label="申请人"
-                                   align="center"
-                                   prop="name"
-                                   :show-overflow-tooltip="true"
-                                   style="height: 38px;"
-                                 />
-                                 <el-table-column
-                                   label="部门"
-                                   align="center"
-                                   prop="name"
-                                   :formatter="typeFormat"
-                                   style="height: 38px;"
-                                 />
-                                 <el-table-column
-                                   label="请假类型"
-                                   align="center"
-                                   prop="status"
-                                   :formatter="statusFormat"
-                                   style="height: 38px;"
-                                 />
-
-                                </el-table>
+                           <div class="tab_tol">
+                          	<tr class="tr_one">
+                          		<th style=" text-align: center;" v-for="(item,index) in tableDataalid" :key="index">{{item.columnComment}}</th>
+                          	</tr>
+                          		<tr v-for="(item,index) in getLisaillie" :key="index" :class=" [index%2  ==0 ? 'two_tr two_trtwo':'two_tr']" @click="chakn(item)">
+                          			<td style=" text-align: center;" >{{ item.contacts_name }}</td>
+                          			<td style="text-align: center;">{{ item.dept_id  }}</td>
+                          			<td style=" text-align: center;" >{{ item.phone }}</td>
+                          			<td style=" text-align: center;" >{{ item.is_del == 1? '删除' :  '未删除'}}</td>
+                          			<td style="text-align: center; " >{{ item.remark}}</td>
+                          		</tr>
+                           </div>
                           <div class="index_haderPagin index_haderPaginfoiu">
                             <el-pagination
-                                 @size-change="handleSizeChange"
-                                 @current-change="handleCurrentChange"
+                                 @size-change="handleSizeChangeali"
+                                 @current-change="handleCurrentChangeali"
                                  :current-page.sync="currentPage3"
-                                 :page-size="pageSize"
+                                 :page-size="queryParamsail.pageSize"
                                  :small= "true"
                                  layout="prev, pager, next, jumper"
-                                 :total="1000">
+                                 :total="totalali">
                             </el-pagination>
                           </div>
                         </div>
@@ -237,9 +239,9 @@
 
   </div>
 </template>
-
+   
 <script>
-  import { listIndex, listIndextwo, listIndextherr, getConfig, delConfig, addConfig, updateConfig, clearCache } from "@/api/system/config";
+  import { listIndex, listIndextwo, listIndextherr, listIndexfou, getConfig, delConfig, addConfig, updateConfig, clearCache } from "@/api/system/config";
 export default {
   name: "index",
   data() {
@@ -248,7 +250,9 @@ export default {
       version: "2.5.0",
        currentPage3: 1,
        total:0,
-       pageSize:10,
+       totalprofile:0,
+       totalali:0,
+       pageSize:6,
        activeName: 'second',
        value: new Date(),
        editableTabs: [],
@@ -262,21 +266,115 @@ export default {
         condition:{
           notice_type:1
         }
-
-
+      },
+      queryParamstab:{
+        table:'sys_notice',
+        orderBy:'create_time desc',
+        pageNo:1,
+        pageSize:6,
+        condition:{
+          notice_type:1
+        }
+      },
+      // 公司概况
+      queryParamstabprofile:{
+        table:'sys_info',
+        orderBy:'create_time desc',
+        pageNo:1,
+        pageSize:1,
+        condition:{
+          notice_type:1
+        }
+      },
+      // 日历
+      queryParamscalendar:{
+        table:'sys_schedule',
+        orderBy:'create_time desc',
+        pageNo:1,
+        pageSize:10,
+      },
+      // 备忘录
+      queryParamstabmemorandum:{
+        table:'sys_memorandum',
+        orderBy:'create_time desc',
+        pageNo:1,
+        pageSize:6,
+      },
+      // 通讯录
+      queryParamsail:{
+        table:'sys_contacts',
+        orderBy:'create_time desc',
+        pageNo:1,
+        pageSize:6,
       },
       num:0,
+      numprofile:0,
       dictType:'sys_notice_type',
       // 公司概况
       dictTypetwo:'sys_describe_type',
+      gettabList:[],
+      getLisprofileone:[],
+      // 备忘录
+      getmemorandum:[],
+      //通讯录参数
+      aliemg:{
+        table:'sys_contacts'
+      },
+      tableDataalid:[],
+      getLisaillie:[],
+      alendarList:[],
+      calendarData: [
+            ],
+            ary:[],
+            tieku:'',
+            comg:'',
+            aekti:''
     };
   },
+
   created() {
+    this.getLisalendar()//日历
     this.getList()
     this.getListtab()
     this.getLiser()
+    this.getLisprofile()
+    this.getLismemorandum()  //备忘录
+    this.getLisail()//通讯录
+    this.getLisailtwo()
+
   },
+  computed: {
+     // 时间高亮的数组
+     brightDate () {
+       // let ary = []
+       var that =  this
+       console.log(that.calendarData)
+       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))
+         console.log(that.calendarData[i].begin_time)
+       }
+       console.log(that.ary)
+       return that.ary
+     }
+
+   },
   methods: {
+      // Tooltip 文字提示
+        content (date) {
+          console.log(date,37645)
+          let content = ''
+          // console.log(data,37645)
+          for (var i = 0 ; i < this.calendarData.length; i++) {
+          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].schedule_title + ` ` + this.calendarData[i].schedule_type
+            }
+          }
+          console.log(content)
+          return content
+        },
     //数据  第一部分列表
     getList() {
       this.loading = true;
@@ -288,6 +386,69 @@ export default {
         }
       );
     },
+    //数据  第二部分列表
+    getListtabone() {
+      this.loading = true;
+      listIndex(this.queryParams).then(response => {
+          this.configList = response.data.rows;
+          console.log(this.configList)
+          this.total = response.data.total;
+          this.loading = false;
+        }
+      );
+    },
+    //数据  第三部分列表
+    getLisprofile() {
+      this.loading = true;
+      listIndex(this.queryParamstabprofile).then(response => {
+          if(response.data !== undefined){
+            this.getLisprofileone = response.data.rows;
+            this.tieku = this.getLisprofileone[0].info_title
+            this.comg = this.getLisprofileone[0].info_content
+            console.log(this.getLisprofileone[0].info_title,98)
+            this.totalprofile = response.data.total;
+          }
+          this.loading = false;
+        }
+      );
+    },
+    //数据  日历数据列表
+    getLisalendar() {
+      this.loading = true;
+      listIndex(this.queryParamscalendar).then(response => {
+          if(response.data !== undefined){
+            this.calendarData = response.data.rows;
+            console.log(this.calendarData,9845765)
+          }
+          this.loading = false;
+        }
+      );
+    },
+    //数据  备忘录数据列表
+    getLismemorandum() {
+      this.loading = true;
+      listIndex(this.queryParamstabmemorandum).then(response => {
+          if(response.data !== undefined){
+            this.getmemorandum = response.data.rows;
+            console.log(this.getmemorandum,98765)
+          }
+          this.loading = false;
+        }
+      );
+    },
+    // 数据列表   通讯录数据
+    getLisailtwo() {
+      this.loading = true;
+      listIndex(this.queryParamsail).then(response => {
+          if(response.data !== undefined){
+            this.getLisaillie = response.data.rows;
+            // console.log(this.configList)
+          }
+          this.totalali = response.data.total
+          this.loading = false;
+        }
+      );
+    },
     //tab 公告 栏数据
     getListtab() {
       this.loading = true;
@@ -300,7 +461,7 @@ export default {
         }
       )
     },
-    // 公司概况
+    // 公司概况  tab
     getLiser() {
       this.loading = true;
       listIndextherr(this.dictTypetwo).then(response => {
@@ -311,6 +472,19 @@ export default {
         }
       )
     },
+   // 通讯录表头
+   getLisail() {
+     this.loading = true;
+     listIndexfou(this.aliemg).then(response => {
+         if(response.data !== undefined){
+           this.tableDataalid = response.data.tableHeadList;
+           console.log(this.tableDataalid,67)
+           this.totalprofile = response.data.total;
+         }
+         this.loading = false;
+       }
+     );
+   },
     goTarget(href) {
       window.open(href, "_blank");
     },
@@ -318,17 +492,43 @@ export default {
             console.log(`每页 ${val} 条`);
       },
     handleCurrentChange(val) {
-            console.log(`当前页: ${val}`);
+      this.queryParams.pageNo = val
+      this.getList()
+        console.log(`当前页: ${val}`);
       },
+      // 公司概况
+      handleSizeChangeprofile(val) {
+              console.log(`每页 ${val} 条`);
+        },
+      handleCurrentChangeprofile(val) {
+        this.queryParamstabprofile.pageNo = val
+        this.getLisprofile()
+          console.log(`当前页: ${val}`);
+        },
+     // 通讯录
+     handleSizeChangeali(val) {
+             console.log(`每页 ${val} 条`);
+       },
+     handleCurrentChangeali(val) {
+       this.queryParamsail.pageNo = val
+       this.getLisailtwo()
+         console.log(`当前页: ${val}`);
+       },
     handleClick(tab, event) {
               console.log(tab, event);
       },
-      // tab点击
+      // 第一部分tab点击
     tabSbu(index){
       console.log(index)
      this.num = index - 1
      this.queryParams.condition.notice_type = index
      this.getList()
+    },
+    // 第三部分tab点击
+    tabSbuprofile(index){
+      this.numprofile = index - 1
+      this.queryParamstabprofile.condition.notice_type = index
+      this.getLisprofile()
     }
   },
 };
@@ -392,7 +592,16 @@ export default {
          margin-left: 0;
        }
      }
-
+   .everyDay {
+     display: inline-block;
+     width: 20px;
+     height: 20px;
+     line-height: 20px;
+     background-color: #409eff;
+     color: #fff;
+     border-radius: 50%;
+     margin-top: 5px;
+   }
   }
 </style>
 
@@ -688,4 +897,44 @@ export default {
    }
   }
 }
+
+// table
+.tab_tol{
+  // display: flex;
+  .tr_one{
+    display: flex;
+    justify-content: space-around;
+    width: 100%;
+    th{
+      flex: 1;
+      font-size: 12px;
+      font-family: PingFang SC;
+      font-weight: bold;
+      color: #343434;
+      line-height: 36px;
+      overflow: hidden;
+      text-overflow:ellipsis;
+      white-space: nowrap;
+    }
+  }
+  .two_tr{
+    display: flex;
+    justify-content: space-around;
+    font-size: 12px;
+    font-family: PingFang SC;
+    font-weight: bold;
+    color: #343434;
+    line-height: 36px;
+    td{
+      flex: 1;
+      overflow: hidden;
+      text-overflow:ellipsis;
+      white-space: nowrap;
+    }
+  }
+  .two_trtwo{
+    background-color: #F2F2F2;
+  }
+}
+
 </style>

+ 1 - 1
ruoyi-ui/src/views/system/role/index.vue

@@ -580,7 +580,7 @@ export default {
   }
   .app-container{
      background-color: #EFF0FF;
-     min-height: calc(100vh - 60px);
+     min-height: calc(100vh - 70px);
      box-sizing: border-box;
   }
   .roleBox{