From 52874e13b27f92bc21b0a3b079077739841ebdb3 Mon Sep 17 00:00:00 2001
From: 田源 <lastanimals@163.com>
Date: 星期三, 23 十月 2024 17:07:41 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/ClonePortalVIDTOList.java                            |    3 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/SmUserQueryServiceI.java         |   10 
 Source/plt-web/plt-web-ui/src/views/system/fileCab/index.vue                                                             |  138 ++++++++
 Source/plt-web/plt-web-ui/src/views/authority/ui/uiAuthorization/index.vue                                               |   30 +
 Source/plt-web/plt-web-ui/src/views/system/log/index.vue                                                                 |  170 ++++++++++
 Source/plt-web/plt-web-ui/src/views/systemModel/businessModel/index.vue                                                  |   42 +
 Source/plt-web/plt-web-ui/src/views/systemModel/operateType/index.vue                                                    |   35 +
 Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/Aciton/index.vue                                                     |   28 -
 Source/plt-web/plt-web-ui/src/views/system/log/basicConf.vue                                                             |  138 ++++++++
 Source/plt-web/plt-web-ui/src/views/systemModel/mangeModel/index.vue                                                     |   41 +
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebPortalVIController.java                    |    2 
 /dev/null                                                                                                                |   16 
 Source/plt-web/plt-web-ui/src/views/system/user/index.vue                                                                |    4 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java |   26 +
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/LogBasicController.java                       |    1 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsPortalVIServiceImpl.java                  |    4 
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/LogQueryCriteriaDTO.java                             |    9 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java                   |   80 +++-
 Source/plt-web/plt-web-ui/src/api/system/log/logBasic.js                                                                 |   57 +++
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LogBasicServiceImpl.java                    |   28 +
 Source/plt-web/plt-web-ui/src/api/system/fileManager/index.vue                                                           |  155 +++++++++
 21 files changed, 890 insertions(+), 127 deletions(-)

diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/ClonePortalVIDTOList.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/ClonePortalVIDTOList.java
index 75c25b0..8cf4b06 100644
--- a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/ClonePortalVIDTOList.java
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/ClonePortalVIDTOList.java
@@ -1,7 +1,10 @@
 package com.vci.dto;
 
+import lombok.Data;
+
 import java.util.List;
 
+@Data
 public class ClonePortalVIDTOList implements  java.io.Serializable{
 
   private List<ClonePortalVIDTO> clonePortalVIDTOList;
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/LogQueryCriteriaDTO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/LogQueryCriteriaDTO.java
index 1e26832..c1bbc2b 100644
--- a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/LogQueryCriteriaDTO.java
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/LogQueryCriteriaDTO.java
@@ -3,6 +3,7 @@
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * 鏃ュ織鏌ヨ浼犺緭瀵硅薄
@@ -33,4 +34,12 @@
     int pageNo;
     //椤甸潰鏉℃暟
     int pageSize;
+    //鏌ヨ绫诲瀷(绠$悊鍛樻棩蹇�1锛屾櫘閫氭棩蹇�2)
+    String roleType;
+
+    /**
+     * 鏍圭粷roleType鏌ヨ鍑烘潵鐨勭敤鎴峰悕锛屽悗缁牴鎹繖涓弬鏁版煡璇㈡寚瀹氱殑鏃ュ織
+     */
+    private List<String> userNameList;
+
 }
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/SmUserQueryServiceI.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/SmUserQueryServiceI.java
index 38889a2..576e2b5 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/SmUserQueryServiceI.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/SmUserQueryServiceI.java
@@ -160,14 +160,13 @@
      */
     List<Tree> refTreeUsers(TreeQueryObject treeQueryObject) throws VciBaseException;
 
-    /***
+    /**
      * 浜哄憳鏉冮檺閫夋嫨鏍�
      * @param treeQueryObject
      * @return
      * @throws VciBaseException
      */
     List<Tree> refPersonOrgTree(TreeQueryObject treeQueryObject) throws VciBaseException;
-
 
     /**
      * 鏍¢獙瀵嗙爜鏄惁鐩稿悓锛屽湪鏂板钩鍙颁腑瀛樺偍鐨勫瘑鐮佹槸涓ゆmd5
@@ -265,4 +264,11 @@
      */
     BaseResult importUser(File file) throws Exception;
 
+    /**
+     * 鏍规嵁瑙掕壊绫诲瀷鏌ヨ鐢ㄦ埛鍚�
+     * @param roleType
+     * @return
+     */
+    List<String> queryUserNameByRoleType(String roleType) throws PLException;
+
 }
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java
index 8aae3cd..f2ba751 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java
@@ -975,7 +975,7 @@
 		return rootTreeList;
 	}
 
-	/***
+	/**
 	 *
 	 * @param dataType
 	 * @param orgType
@@ -1094,7 +1094,7 @@
 		}
 	}
 
-	/***
+	/**
 	 *
 	 * @param oid
 	 * @param text
@@ -1112,6 +1112,7 @@
 		}
 		return ObjectTreeNode;
 	}
+
 	/**
      * 鏍¢獙瀵嗙爜鏄惁鐩稿悓锛屽湪鏂板钩鍙颁腑瀛樺偍鐨勫瘑鐮佹槸涓ゆmd5
      * @param userOid 鐢ㄦ埛涓婚敭
@@ -1634,4 +1635,25 @@
 		return BaseResult.success("鐢ㄦ埛瀵煎叆鎴愬姛锛�");
 	}
 
+	/**
+	 * 鏍规嵁瑙掕壊绫诲瀷鏌ヨ鐢ㄦ埛鍚�
+	 * @param roleType
+	 * @return
+	 */
+	@Override
+	public List<String> queryUserNameByRoleType(String roleType) throws PLException {
+		List<String> userNameList = new ArrayList<>();
+		if(Func.isBlank(roleType)){
+			return userNameList;
+		}
+		String sql = "SELECT PLUSERNAME FROM PLUSER p WHERE PLUID IN " +
+				"(SELECT PLUSERUID FROM PLUSERROLE p WHERE PLROLEUID IN " +
+				"( SELECT PLUID FROM PLROLE p WHERE PLTYPE = "+ roleType + "))";
+		List<BusinessObject> cbos = boService.queryBySql(sql, null);
+		cbos.stream().forEach(cbo->{
+			userNameList.add(ObjectTool.getNewBOAttributeValue(cbo,"plusername"));
+		});
+		return userNameList;
+	}
+
 }
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/LogBasicController.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/LogBasicController.java
index 0e30296..e35e925 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/LogBasicController.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/LogBasicController.java
@@ -88,6 +88,7 @@
 			throw new VciBaseException(errorMsg);
 		}
 	}
+
 	/**
 	 * 鏌ヨ鏃ュ織
 	 * @param dto 鏌ヨ鏉′欢浼犺緭瀵硅薄
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebPortalVIController.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebPortalVIController.java
index 6471de0..3eafa45 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebPortalVIController.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebPortalVIController.java
@@ -142,7 +142,7 @@
             return portalVIServiceI.clone(portalVIDTOList) ? BaseResult.success("鍏嬮殕鎴愬姛锛�"):BaseResult.fail("鍏嬮殕澶辫触锛�");
         } catch (Throwable e) {
             e.printStackTrace();
-            String exceptionMessage = "鍒犻櫎琛ㄥ崟鏃跺嚭鐜伴敊璇紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
+            String exceptionMessage = "鍏嬮殕琛ㄥ崟/琛ㄦ牸鏃跺嚭鐜伴敊璇紝鍘熷洜锛�" + VciBaseUtil.getExceptionMessage(e);
             logger.error(exceptionMessage);
             return BaseResult.fail(exceptionMessage);
         }
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LogBasicServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LogBasicServiceImpl.java
index 2392826..bc75fa7 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LogBasicServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LogBasicServiceImpl.java
@@ -9,6 +9,7 @@
 import com.vci.dto.LogInfoDTO;
 import com.vci.dto.LogPeriodInfoDTO;
 import com.vci.dto.LogQueryCriteriaDTO;
+import com.vci.frameworkcore.compatibility.SmUserQueryServiceI;
 import com.vci.starter.web.pagemodel.BaseResult;
 import com.vci.web.service.*;
 import com.vci.web.util.*;
@@ -41,6 +42,10 @@
      */
     @Autowired
     private PlatformClientUtil platformClientUtil;
+
+    @Autowired
+    private SmUserQueryServiceI userQueryServiceI;
+
     public static final String UTF8_BOM="\uFEFF";
     private final String LOG_SAVE_PERIOD = "logSavePeriod";//鏃ュ織淇濆瓨鏈熼檺
 
@@ -131,8 +136,11 @@
      */
     @Override
     public BaseResult getLogListByContion(LogQueryCriteriaDTO queryDto) throws PLException {
+        List<String> userNameList = userQueryServiceI.queryUserNameByRoleType(queryDto.getRoleType());
+        queryDto.setUserNameList(userNameList);
         String querySql = getSQL(queryDto);
         LogInfo[] logInfos = platformClientUtil.getLogService().getLogListByContion(queryDto.getPageNo(),queryDto.getPageSize(),querySql);
+
         List<LogInfoDTO> dtos = new ArrayList<>();
         for (LogInfo logInfo : logInfos) {
             LogInfoDTO dto = new LogInfoDTO();
@@ -160,6 +168,7 @@
         result.setTotal(sumLogRows);
         return result;
     }
+
     /**
      * 鎿嶄綔鐢ㄦ埛鑾峰彇
      */
@@ -233,13 +242,14 @@
         }
         return userNames;
     }
+
     /**
      * 鑾峰彇鏌ヨ鏉′欢骞舵嫾鎴怱QL锛屽彧鎷紈here瀛愬彞鍚庨潰鐨凷QL
      * @return
      */
     public String getSQL(LogQueryCriteriaDTO dto) throws PLException {
         StringBuffer sql = new StringBuffer("");
-//        int period = getPeriod(LOG_SAVE_PERIOD);//鑾峰彇淇濆瓨鏈熼檺锛屼互鏈堜负鍗曚綅
+        // int period = getPeriod(LOG_SAVE_PERIOD);//鑾峰彇淇濆瓨鏈熼檺锛屼互鏈堜负鍗曚綅
         int period = platformClientUtil.getLogService().getCurPeriod();;//鑾峰彇淇濆瓨鏈熼檺锛屼互鏈堜负鍗曚綅
         //涓嬮潰鏄嫾鍑篠QL
         if(period != 0){
@@ -274,6 +284,21 @@
             }
             sql.append("PLLOGTYPE in('" + getLogTypeString(LogType.General) + "')");
         }
+        if(Func.isNotEmpty(dto.getUserNameList())){
+            if(!sql.toString().equals("")){
+                sql.append(" and ");
+            }
+            if(dto.getUserNameList().size()<=1){
+                sql.append(" PLUSER = '").append(dto.getUserNameList().get(0).trim()).append("'");
+            }else{
+                sql.append(" PLUSER in (");
+                String inWhere = dto.getUserNameList().stream()
+                        .map(item -> "'" + item + "'")
+                        .collect(Collectors.joining(","));
+                sql.append(inWhere).append(")");
+            }
+        }
+
         if(StringUtils.isNotBlank(dto.getUserName())){//鎿嶄綔鐢ㄦ埛
             if(!dto.getUserName().trim().equals("")){//濡傛灉鐢ㄦ埛鍚嶄负绌烘牸鍒欎笉鍔犵敤鎴锋潯浠�
                 if(!sql.toString().equals("")){
@@ -320,6 +345,7 @@
         }
         return sql.toString();
     }
+
     protected String getLogTypeString(LogType logType){
         String res = "";
         if(logType == LogType.Login) {
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsPortalVIServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsPortalVIServiceImpl.java
index aed9228..f7d0e7b 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsPortalVIServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsPortalVIServiceImpl.java
@@ -248,7 +248,7 @@
      */
     @Override
     public boolean clone(ClonePortalVIDTOList clonePortalVIDTOList) throws VciBaseException {
-        if(clonePortalVIDTOList==null||CollectionUtils.isEmpty(clonePortalVIDTOList.getClonePortalVIDTOList())){
+        if(clonePortalVIDTOList == null || CollectionUtils.isEmpty(clonePortalVIDTOList.getClonePortalVIDTOList())){
             throw  new VciBaseException("璇烽�夋嫨瑕佸厠闅嗙殑瀵硅薄!");
         }
         try {
@@ -883,7 +883,7 @@
         portalVIVO.setViType(portalVI.viType);
         portalVIVO.setViTypeText(PortalVIType.getByIntVal(portalVI.viType).getLabel());
 
-        String prm= portalVI.prm;
+        String prm = portalVI.prm;
         if(StringUtils.isNotBlank(prm)) {
             PRMDO prmdo = UITools.getPRM(prm);
             portalVIVO.setPrm(prmDOO2VOS(prmdo, portalVI.viType));
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java
index 3f4e4fe..093939e 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java
@@ -1,5 +1,7 @@
 package com.vci.web.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.vci.common.utility.ObjectUtility;
 import com.vci.corba.common.PLException;
 import com.vci.corba.common.data.UserEntityInfo;
@@ -1776,18 +1778,29 @@
         treeQueryObject.setConditionMap(conditionMap);
         List<Tree> treeList = this.getUIAuthor(treeQueryObject);
         HashMap<String,Tree> allTreeMap = new HashMap<>();
-        Map<String,RoleRightDTO> roleRightVOMap = new HashMap<>();
+        //Map<String,RoleRightDTO> roleRightVOMap = new HashMap<>();
         if(!CollectionUtil.isEmpty(treeList)){
-            if(StringUtils.isNotBlank(uiAuthorDTO.getRoleId())){
+            /*if(StringUtils.isNotBlank(uiAuthorDTO.getRoleId())){
                 String userName = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
                 RoleRightInfo[] rightInfos = platformClientUtil.getFrameworkService().getRoleRightList(uiAuthorDTO.getRoleId(),userName);
                 List<RoleRightVO> roleRightVOList = roleRightDOO2VOS(Arrays.asList(rightInfos));
                 roleRightVOMap = roleRightVOList.stream().collect(Collectors.toMap(RoleRightVO::getFuncId,roleRightVO ->roleRightVOO2DTO(roleRightVO),(oldValue,newValue)->oldValue));
-            }
+            }*/
+
             convertTreeDOO2Map(treeList,allTreeMap);
             List<RoleRightDTO> roleRightDTOList = new ArrayList<>();
             List<Tree> selectTreeList = uiAuthorDTO.getSelectTreeList();
-            getSelectedRoleRightObjs(uiAuthorDTO.getRoleId(),selectTreeList,allTreeMap,roleRightVOMap,roleRightDTOList);
+            List<Tree> filterSelectTreeList = this.authTreeListConvert(selectTreeList);
+            //杩囨护鍑洪�夋嫨鐨勬寜閽�
+            List<String> checkButtonList = new ArrayList<>();
+            selectTreeList.stream().forEach(item->{
+                Object data = item.getData();
+                if(data instanceof PLTabButton || item.isLeaf()){
+                    checkButtonList.add(item.getOid());
+                }
+            });
+
+            getSelectedRoleRightObjs(uiAuthorDTO.getRoleId(),filterSelectTreeList,checkButtonList,allTreeMap,roleRightDTOList);
             SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();
             String currentUserName = sessionInfo.getUserId();
             //boolean isDeveloper = rightControlUtil.isDeveloper(currentUserName);
@@ -1805,26 +1818,42 @@
     }
 
     /**
+     * 鑾峰彇绛涢�夊悗鐨勬暟鎹�
+     * @param selectTreeList
+     */
+    private List<Tree> authTreeListConvert(List<Tree> selectTreeList){
+        // 鍒涘缓涓�涓寘鍚彟涓�涓泦鍚堜腑婊¤冻鏉′欢鐨� oid 鐨勯泦鍚�
+        List<String> validOids = selectTreeList.stream()
+                .filter(Tree::isChecked) // checked 涓� true
+                .map(Tree::getOid)      // 鎻愬彇 oid
+                .collect(Collectors.toList());
+
+        return selectTreeList.stream()
+                .filter(tree -> tree.isChecked() && !validOids.contains(tree.getParentId())) // 杩囨护鏉′欢
+                .collect(Collectors.toList());
+    }
+
+    /**
      *鏍规嵁鏉冮檺璁$畻涓婁笅鏉冮檺
      * @param roleOid
      * @param selectTreeList
      * @param allTreeMap
      * @param roleRightDTOList
      */
-    private void getSelectedRoleRightObjs(String roleOid, List<Tree> selectTreeList, HashMap<String,Tree> allTreeMap, Map<String,RoleRightDTO> allRoleRightDTOMap, List<RoleRightDTO> roleRightDTOList){
-        //Date date=new Date();
+    private void getSelectedRoleRightObjs(String roleOid, List<Tree> selectTreeList, List<String> checkButtonList, HashMap<String,Tree> allTreeMap, List<RoleRightDTO> roleRightDTOList){
         Map<String,RoleRightDTO> roleRightDTOMap = new HashMap<>();
+
         if(!CollectionUtil.isEmpty(selectTreeList)){
             selectTreeList.stream().forEach(tree -> {
                 String oid = tree.getOid();
                 if(allTreeMap.containsKey(oid)){
                     tree = allTreeMap.get(oid);
-                   Object data = tree.getData();
+                    Object data = tree.getData();
                     if (data instanceof String) {
-                        getRightValue(roleOid, tree, allTreeMap, false, roleRightDTOMap);//鍚戜笅鑾峰彇鎵�鏈夋ā鍧楃殑鏉冮檺鍊�
+                        getRightValue(roleOid, tree, allTreeMap, checkButtonList,false, roleRightDTOMap);//鍚戜笅鑾峰彇鎵�鏈夋ā鍧楃殑鏉冮檺鍊�
                     } else if (!(data instanceof PLTabButton)) {//涓氬姟绫诲瀷
-                        getRightValue(roleOid, tree, allTreeMap, true, roleRightDTOMap);//鍚戜笂澶勭悊
-                        getRightValue(roleOid, tree, allTreeMap, false, roleRightDTOMap);//鍚戜笅澶勭悊锛堝寘鍚綋鍓嶈妭鐐癸級
+                        getRightValue(roleOid, tree, allTreeMap, checkButtonList, true, roleRightDTOMap);//鍚戜笂澶勭悊
+                        getRightValue(roleOid, tree, allTreeMap, checkButtonList, false, roleRightDTOMap);//鍚戜笅澶勭悊锛堝寘鍚綋鍓嶈妭鐐癸級
                     } else if (data instanceof PLTabButton) {//鎸夐挳
                         String parrentId=tree.getParentId();
                         if(allTreeMap.containsKey(parrentId)){
@@ -1833,7 +1862,7 @@
                             boolean isDeveloper = rightControlUtil.isDeveloper(currentUserName);
                             Tree parentNode= allTreeMap.get(parrentId);
                             String funcId = parentNode.getOid();
-                            getRightValue(roleOid, tree, allTreeMap, true, roleRightDTOMap);//鍚戜笂澶勭悊璇ユ搷浣滅埗绾х殑涓婄骇妯″潡鏉冮檺(涓嶅寘鍚埗鑺傜偣)
+                            getRightValue(roleOid, parentNode, allTreeMap, checkButtonList, true, roleRightDTOMap);//鍚戜笂澶勭悊璇ユ搷浣滅埗绾х殑涓婄骇妯″潡鏉冮檺(涓嶅寘鍚埗鑺傜偣)
                             if(!roleRightDTOMap.containsKey(funcId)){
                                 RoleRightDTO roleRightDTO = new RoleRightDTO();
                                 roleRightDTO.setId(ObjectUtility.getNewObjectID36());//涓婚敭
@@ -1844,7 +1873,7 @@
                                 }else{
                                     roleRightDTO.setRightType((short) 2);
                                 }
-                                roleRightDTO.setRightValue(1);// 鏉冮檺鍊硷紝娌℃湁鎿嶄綔鐨勬ā鍧楁潈闄愬�煎瓨鍌ㄤ负0
+                                roleRightDTO.setRightValue(countRightValue(parentNode,checkButtonList,false));// 鏉冮檺鍊硷紝娌℃湁鎿嶄綔鐨勬ā鍧楁潈闄愬�煎瓨鍌ㄤ负0
                                 roleRightDTO.setRoleId(roleOid);//瑙掕壊ID
                                 roleRightDTO.setCreateUser(currentUserName);//鍒涘缓鑰�
                                 roleRightDTO.setCreateTime(VciDateUtil.date2Str(new Date(),""));//鍒涘缓鏃堕棿
@@ -1873,16 +1902,18 @@
      * 鑾峰彇鏉冮檺
      * @param isUp 鏄惁鏄悜涓婅幏鍙栵紝濡傛灉鏄悜涓婅幏鍙栵紝浼犺繘鏉ョ殑蹇呯劧鏄ā鍧楄妭鐐癸紝涓斾笂绾фā鍧楀繀鐒舵槸娌℃湁閫変腑
      */
-    private void getRightValue(String roleId,Tree node,HashMap<String,Tree> allTreeMap,boolean isUp,Map<String,RoleRightDTO> rightMap){
+    private void getRightValue(String roleId,Tree node,Map<String,Tree> allTreeMap,List<String> checkButton,boolean isUp,Map<String,RoleRightDTO> rightMap){
         SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();
         String currentUserName = sessionInfo.getUserId();
         boolean isDeveloper= rightControlUtil.isDeveloper(currentUserName);
         String id=ObjectUtility.getNewObjectID36();
         Object data=node.getData();
         if(isUp) {//鍚戜笂鑾峰彇锛屽瓨鍌ㄦ瘡涓笂绾фā鍧楃殑鏉冮檺鍊�
-            while (!"root".equals(node.getData())){
-                data=node.getData();
-               String oid=node.getOid();
+            String parentId = node.getParentId();
+            Tree parentNode = allTreeMap.get(parentId);
+            while (!"root".equals(parentNode.getData())){
+                data=parentNode.getData();
+                String oid=parentNode.getOid();
                 if(allTreeMap.containsKey(oid)){
                     String funcId = "";
                     if (data instanceof BizType) {
@@ -1919,9 +1950,9 @@
                     if(!rightMap.containsKey(funcId)){
                         rightMap.put(funcId, roleRightDTO);
                     }
-                    oid= node.getParentId();
+                    oid = parentNode.getParentId();
                     if(allTreeMap.containsKey(oid)) {
-                        node=allTreeMap.get(oid);
+                        parentNode = allTreeMap.get(oid);
                     }
                 }
             }
@@ -1965,14 +1996,14 @@
                 }
                 for (int i = 0; i < node.getChildren().size(); i++) {
                     //瀵规瘡涓瓙鍚戜笅閫掑綊閬嶅巻
-                    getRightValue(roleId, node.getChildren().get(i), allTreeMap, false, rightMap);
+                    getRightValue(roleId, node.getChildren().get(i), allTreeMap, checkButton,false, rightMap);
                 }
             } else {
                 if (!rightMap.containsKey(funcId)) {
                     RoleRightDTO roleRightDTO = new RoleRightDTO();
                     roleRightDTO.setFuncId(funcId);
                     roleRightDTO.setRightType((short) 2); // 璁剧疆UI鏉冮檺
-                    roleRightDTO.setRightValue(countRightValue(node, true));//娌℃湁鎿嶄綔鐨勬ā鍧楁潈闄愬�煎瓨鍌ㄤ负0
+                    roleRightDTO.setRightValue(countRightValue(node, checkButton,true));//娌℃湁鎿嶄綔鐨勬ā鍧楁潈闄愬�煎瓨鍌ㄤ负0
                     roleRightDTO.setRoleId(roleId);
 
                     roleRightDTO.setCreateUser(currentUserName);
@@ -1992,12 +2023,13 @@
      * @param isAll 鏄惁瀛愮骇鍏ㄩ儴閫変腑
      * @return
      */
-    private long countRightValue(Tree node,boolean isAll){
+    private long countRightValue(Tree node,List<String> checkButton,boolean isAll){
         long value = 0;
-        for(int i = 0;i < node.getChildren().size();i++){
+        for(int i = 0; i < node.getChildren().size(); i++){
             Tree childNode = (Tree)node.getChildren().get(i);
-            if(isAll && node.getData() instanceof PLTabButton ){
-                PLTabButton obj = (PLTabButton)node.getData();
+            //node.getData() instanceof PLTabButton杩欏効搴旇鎹㈡垚鏄惁鏄�変腑鐨勬寜閽妭鐐�
+            if(isAll || checkButton.contains(node.getOid())){
+                PLTabButton obj = (PLTabButton)childNode.getData();
                 value += (long)Math.pow(2, obj.plSeq);//绱鍔犱笂鍚勪釜鎿嶄綔鐨勬潈闄愬��
             }
         }
diff --git a/Source/plt-web/plt-web-ui/src/api/system/fileManager/index.vue b/Source/plt-web/plt-web-ui/src/api/system/fileManager/index.vue
new file mode 100644
index 0000000..aecd46e
--- /dev/null
+++ b/Source/plt-web/plt-web-ui/src/api/system/fileManager/index.vue
@@ -0,0 +1,155 @@
+<template>
+  <!--鏂囦欢鏌滅鐞�-->
+  <basic-container>
+    <avue-crud
+      ref="fileCrud"
+      :data="tableData"
+      :option="option"
+      :page.sync="page"
+      :table-loading="tableLoading"
+      @on-load="getTableList"
+      @refresh-change="handleRefresh"
+      @search-change="handleSearch"
+      @search-reset="handleReset"
+      @size-change="sizeChange"
+      @current-change="currentChange"
+    >
+      <template slot="menuLeft" slot-scope="scope">
+        <el-button icon="el-icon-download" plain size="small" type="primary" @click="allDelHandler">瀵煎嚭</el-button>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+import basicOption from "@/util/basic-option";
+import {getLogListByContion} from "@/api/system/log/logBasic";
+
+export default {
+  name: "index",
+  data: function () {
+    return {
+      tableLoading: false,
+      tableData: [],
+      option: {
+        ...basicOption,
+        addBtn:false,
+        editBtn: false,
+        delBtn: false,
+        calcHeight: -60,
+        align:'left',
+        headerAlign:'center',
+        menu:false,
+        searchMenuSpan: 6,
+        searchIcon:false,
+        column: [
+          {
+            label: '鐢ㄦ埛鍚�',
+            prop: 'truename',
+            search:true,
+            searchSpan: 4,
+            searchLabel:'鎿嶄綔鐢ㄦ埛',
+            type:'select',
+            dicUrl:'/api/loginBasicController/getOperatingUsers',
+            sortable:true,
+            width: 150
+          }, {
+            label: '濮撳悕',
+            prop: 'username',
+            sortable:true,
+            width: 150
+          },{
+            label: '鐢ㄦ埛IP',
+            prop: 'userIp',
+            search:true,
+            searchSpan: 4,
+            sortable:true,
+            width: 150
+          },{
+            label: '妯″潡',
+            prop: 'moduleName',
+            sortable:true,
+            overHidden: true,
+          },{
+            label: '鎿嶄綔',
+            prop: 'type',
+            sortable:true,
+            width: 150
+          },{
+            label: '鏃堕棿',
+            prop: 'date',
+            type:'date',
+            search:true,
+            searchOrder: 1,
+            searchSpan: 8,
+            searchRange: true,
+            searchLabel:'鏌ヨ鏃ユ湡',
+            valueFormat:'yyyy-MM-dd',
+            width: 160
+          },{
+            label: '鎻忚堪',
+            prop: 'result',
+            overHidden: true,
+            width:380,
+          },
+        ]
+      },
+      page: {
+        currentPage: 1,
+        pageSize: 50,
+        total: 0,
+        pageSizes: [10, 30, 50, 100],
+      },
+      searchParams: {}
+    }
+  },
+  methods: {
+    // 琛ㄦ牸璇锋眰
+    getTableList() {
+      this.tableLoading = true;
+      getLogListByContion(this.page.currentPage, this.page.pageSize, {'logType':this.$route.query.logType,...this.searchParams}).then(res => {
+        this.tableData = res.data.data;
+        this.page.total = res.data.total;
+        this.tableLoading = false;
+      })
+    },
+
+    // 鎼滅储鏌ヨ
+    handleSearch(params, done) {
+      this.searchParams = {
+        userName:params.truename,
+        ipText:params.userIp,
+        startDate:params.date[0],
+        endDate:params.date[1]
+      };
+
+      this.getTableList();
+      done();
+    },
+
+    // 閲嶇疆鎼滅储鏉′欢
+    handleReset() {
+      this.searchParams = {};
+      this.getTableList();
+    },
+
+    // 鏉℃暟
+    sizeChange(val) {
+      this.page.pageSize = val;
+    },
+
+    // 椤电爜
+    currentChange(val) {
+      this.page.currentPage = val;
+    },
+
+    handleRefresh(){
+      this.getTableList();
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/Source/plt-web/plt-web-ui/src/api/system/log/logBasic.js b/Source/plt-web/plt-web-ui/src/api/system/log/logBasic.js
new file mode 100644
index 0000000..47160ae
--- /dev/null
+++ b/Source/plt-web/plt-web-ui/src/api/system/log/logBasic.js
@@ -0,0 +1,57 @@
+import request from '@/router/axios';
+
+// 鏃ュ織淇濆瓨鏈熼檺鏌ヨ
+export function getPeroid(params) {
+  return request({
+    url: "/api/loginBasicController/getPeroid",
+    method: "get",
+    params
+  });
+}
+// 淇濆瓨鏈熼檺淇濆瓨
+export function savePeriod(params) {
+  return request({
+    url: "/api/loginBasicController/savePeriod",
+    method: "post",
+    params: params
+  });
+}
+export function deleteLog(params) {
+  return request({
+    url: "/api/loginBasicController/deleteLog",
+    method: "delete",
+    params
+  })
+}
+
+//鑾峰彇鎿嶄綔鐢ㄦ埛
+export function getOperatingUsers( params) {
+  return request({
+    url: "/api/loginBasicController/getOperatingUsers",
+    method: "get",
+    params
+  });
+}
+
+export function getLogListByContion(page, limit, params) {
+  return request({
+    url: "/api/loginBasicController/getLogListByContion",
+    method: "post",
+    data: {
+      'pageNo':page,
+      'pageSize':limit,
+      ...params
+    }
+  });
+}
+
+// 瀵煎嚭
+export const exportLog = (params) => {
+  return request({
+    url: '/api/loginBasicController/exportLog',
+    method: 'get',
+    headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'},
+    responseType: 'blob',
+    params
+  })
+}
diff --git a/Source/plt-web/plt-web-ui/src/views/authority/ui/uiAuthorization/index.vue b/Source/plt-web/plt-web-ui/src/views/authority/ui/uiAuthorization/index.vue
index 9e71cbf..a77bb26 100644
--- a/Source/plt-web/plt-web-ui/src/views/authority/ui/uiAuthorization/index.vue
+++ b/Source/plt-web/plt-web-ui/src/views/authority/ui/uiAuthorization/index.vue
@@ -250,26 +250,30 @@
           checked: true,
           expanded: true,
           data:item.data,
+          parentId:item.parentId,
           level: item.level,
+          leaf:item.leaf,
           oid: item.oid,
           text: item.text
         }
       })
 
-      // const parentData = selectParentList.map(item => {
-      //   return {
-      //     checked: false,
-      //     expanded: true,
-      //     data:item.data,
-      //     level: item.level,
-      //     oid: item.oid,
-      //     text: item.text
-      //   }
-      // })
-      // // 鍦ㄥ崐閫夌姸鎬佷腑杩囨护鎺夐《绾ц妭鐐� oid 涓� root
-      // const filterSelectTreeData = parentData.filter(item => item.oid !== 'root');
+      const parentData = selectParentList.map(item => {
+        return {
+          checked: false,
+          expanded: true,
+          data:item.data,
+          parentId:item.parentId,
+          level: item.level,
+          leaf:item.leaf,
+          oid: item.oid,
+          text: item.text
+        }
+      })
+      // 鍦ㄥ崐閫夌姸鎬佷腑杩囨护鎺夐《绾ц妭鐐� oid 涓� root
+      const filterSelectTreeData = parentData.filter(item => item.oid !== 'root');
 
-      const data = [...selectTreeData];
+      const data = [...selectTreeData,...filterSelectTreeData];
       const formData = {
         roleId: this.nodeRow.oid,
         type: this.type,
diff --git a/Source/plt-web/plt-web-ui/src/views/fileManage/index.vue b/Source/plt-web/plt-web-ui/src/views/fileManage/index.vue
deleted file mode 100644
index 093967c..0000000
--- a/Source/plt-web/plt-web-ui/src/views/fileManage/index.vue
+++ /dev/null
@@ -1,16 +0,0 @@
-<template>
-  <!--鏂囦粨绠$悊椤甸潰-->
-  <basic-container>
-
-  </basic-container>
-</template>
-
-<script>
-export default {
-  name: "index"
-}
-</script>
-
-<style scoped>
-
-</style>
diff --git a/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/Aciton/index.vue b/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/Aciton/index.vue
index 9c6c63e..873a1b4 100644
--- a/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/Aciton/index.vue
+++ b/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/Aciton/index.vue
@@ -718,34 +718,6 @@
   .el-scrollbar__wrap {
     overflow: auto !important;
   }
-
-  .headerCon {
-    .el-button {
-      width: 82px;
-    }
-  }
-}
-
-.headerCon {
-  display: flex;
-  flex-wrap: wrap;
-  margin-bottom: 5px;
-
-  .el-button + .el-button {
-    margin-left: 5px;
-  }
-
-  .el-button {
-    margin-top: 5px;
-  }
-}
-
-.headerCon > .el-button:nth-child(4) {
-  margin-left: 0;
-}
-
-.headerCon > .el-button:nth-child(7) {
-  margin-left: 0;
 }
 
 .smallBtn {
diff --git a/Source/plt-web/plt-web-ui/src/views/system/fileCab/index.vue b/Source/plt-web/plt-web-ui/src/views/system/fileCab/index.vue
new file mode 100644
index 0000000..ae1270c
--- /dev/null
+++ b/Source/plt-web/plt-web-ui/src/views/system/fileCab/index.vue
@@ -0,0 +1,138 @@
+<template>
+  <!--鏂囦粨绠$悊椤甸潰-->
+  <basic-container>
+    <avue-crud
+      ref="logCrud"
+      :data="tableData"
+      :option="option"
+      :page.sync="page"
+      :table-loading="tableLoading"
+      @on-load="getTableList"
+      @refresh-change="handleRefresh"
+      @search-change="handleSearch"
+      @search-reset="handleReset"
+      @size-change="sizeChange"
+      @current-change="currentChange"
+    >
+      <template slot="menuLeft" slot-scope="scope">
+        <el-button icon="el-icon-download" plain size="small" type="primary" @click="exportClickHandler">瀵煎嚭</el-button>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+import {exportLog, getLogListByContion} from "@/api/system/log/logBasic";
+import func from "@/util/func";
+import basicOption from "@/util/basic-option";
+
+export default {
+  name: "index",
+  data: function () {
+    return {
+      tableLoading: false,
+      tableData: [],
+      option: {
+        ...basicOption,
+        addBtn:false,
+        editBtn: false,
+        delBtn: false,
+        calcHeight: -60,
+        align:'left',
+        headerAlign:'center',
+        menu:false,
+        searchMenuSpan: 6,
+        searchIcon:false,
+        column: [
+          {
+            label: '鍗峰悕',
+            prop: 'truename',
+            width: 300
+          }, {
+            label: '鏈哄櫒绫诲瀷',
+            prop: 'username',
+            width: 150
+          },{
+            label: '璺緞鍚嶇О',
+            prop: 'userIp'
+          },{
+            label: '棣栭�夎矾寰�',
+            prop: 'moduleName',
+          },{
+            label: '鏈嶅姟鍣�',
+            prop: 'type',
+            width: 150
+          },{
+            label: '鍗锋湇鍔�',
+            prop: 'date',
+          }]
+      },
+      page: {
+        currentPage: 1,
+        pageSize: 50,
+        total: 0,
+        pageSizes: [10, 30, 50, 100],
+      },
+      searchParams: {}
+    }
+  },
+  methods: {
+    // 琛ㄦ牸璇锋眰
+    getTableList() {
+      this.tableLoading = true;
+      getLogListByContion(this.page.currentPage, this.page.pageSize, {'logType':this.$route.query.logType,...this.searchParams}).then(res => {
+        this.tableData = res.data.data;
+        this.page.total = res.data.total;
+        this.tableLoading = false;
+      })
+    },
+
+    // 鎼滅储鏌ヨ
+    handleSearch(params, done) {
+      this.searchParams = {
+        userName:params.truename,
+        ipText:params.userIp,
+        startDate:params.date[0],
+        endDate:params.date[1]
+      };
+
+      this.getTableList();
+      done();
+    },
+
+    // 閲嶇疆鎼滅储鏉′欢
+    handleReset() {
+      this.searchParams = {};
+      this.getTableList();
+    },
+
+    // 鏉℃暟
+    sizeChange(val) {
+      this.page.pageSize = val;
+    },
+
+    // 椤电爜
+    currentChange(val) {
+      this.page.currentPage = val;
+    },
+
+    handleRefresh(){
+      this.getTableList();
+    },
+    // 瀵煎嚭
+    exportClickHandler() {
+      const loading = this.$loading({});
+      exportLog().then(res => {
+        func.downloadFileByBlobHandler(res);
+        this.createdLoading = false
+        this.$message.success('瀵煎嚭鎴愬姛');
+        loading.close();
+      })
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/Source/plt-web/plt-web-ui/src/views/system/log/basicConf.vue b/Source/plt-web/plt-web-ui/src/views/system/log/basicConf.vue
new file mode 100644
index 0000000..c2c724d
--- /dev/null
+++ b/Source/plt-web/plt-web-ui/src/views/system/log/basicConf.vue
@@ -0,0 +1,138 @@
+<template>
+  <!--鏃ュ織鍩虹閰嶇疆-->
+  <el-container>
+    <el-main>
+      <basic-container>
+        <div style="margin: 0 0 10px 20px">
+          <el-button v-if="form.delType==0" icon="el-icon-check" size="small" type="primary" @click="saveHandler">淇濆瓨</el-button>
+          <el-button v-else icon="el-icon-delete" size="small" type="danger" @click="delHandler">鍒犻櫎</el-button>
+        </div>
+        <avue-form ref="form" v-model="form" :option="formOption"></avue-form>
+        <div class="tip">
+          <div style="color: #D40000;margin-left: 0;">鏃ュ織鍩虹閰嶇疆璇存槑锛�</div>
+          <div>1銆佹棩蹇楀垹闄ゅ寘鍚墜鍔ㄥ垹闄ゅ拰鑷姩鍒犻櫎銆�</div>
+          <div>2銆佽嚜鍔ㄥ垹闄や細鏍规嵁鏃ュ織鐨勪繚瀛樻湡闄愭潵杩涜鏃ュ織鍒犻櫎銆�</div>
+          <div>3銆佹墜鍔ㄥ垹闄ゆ牴鎹�夊畾鐨勬椂闂存潵杩涜鏃ュ織鍒犻櫎銆�</div>
+        </div>
+      </basic-container>
+    </el-main>
+
+  </el-container>
+</template>
+
+<script>
+import {getPeroid,savePeriod,deleteLog} from "@/api/system/log/logBasic";
+export default {
+  name: "basicConf",
+  data: function () {
+    return {
+      form:{
+        period:'',
+      },
+      periodData:[],
+      formOption:{
+        submitBtn: false,
+        emptyBtn: false,
+        column: [{
+          label: '鏃ュ織鍒犻櫎',
+          prop: 'delType',
+          span: 24,
+          labelWidth:120,
+          type: 'radio',
+          value: 0,
+          dicData: [
+            { label: '鑷姩鍒犻櫎', value: 0 },
+            { label: '鎵嬪姩鍒犻櫎', value: 1 },
+          ]
+        }, {
+          label: '淇濆瓨鏃ユ湡',
+          prop: 'period',
+          type: 'select',
+          labelWidth:120,
+          dicData: this.periodData,
+          props:{
+            label:'value',
+            value:'code'
+          },
+          rules: [{
+            required: true,
+            message: "璇烽�夋嫨淇濆瓨鏃ユ湡",
+            trigger: "blur"
+          }]
+        }, {
+          label: '璇烽�夋嫨鏃ユ湡',
+          prop: 'deleteDate',
+          type: 'date',
+          valueFormat:'yyyy-MM-dd',
+          labelWidth:120,
+          display: false,
+          rules: [{
+            required: true,
+            message: "璇烽�夋嫨鏃ユ湡",
+            trigger: "blur"
+          }]
+        }]
+      },
+    }
+  },
+  created() {
+    this.getPeroid();
+  },
+  watch: {
+    'form.delType': {
+      handler(newval) {
+        if (newval ==0) {
+          this.formOption.column[1].display=true;
+          this.formOption.column[2].display=false;
+        }else {
+          this.formOption.column[1].display=false;
+          this.formOption.column[2].display=true;
+        }
+      }
+    },
+  },
+  methods:{
+    getPeroid:function (){
+      getPeroid().then(res => {
+        this.$refs.form.updateDic('period', res.data.data);
+        this.periodData=res.data.data;
+        this.form.period=res.data.data.filter(item=>{
+          return item.choose
+        })[0].code
+      }).catch(error => {
+      })
+    },
+    saveHandler:function (){
+      savePeriod({'period':this.form.period}).then(res => {
+        if (res.data.success) {
+          this.$message.success('淇濆瓨鎴愬姛')
+        }
+      });
+    },
+    delHandler() {
+      this.$refs.form.validate((valid,done) => {
+        if(valid){
+          deleteLog({'deleteDate':this.form.deleteDate}).then(res => {
+            if (res.data.success) {
+              this.$message.success('鍒犻櫎鎴愬姛')
+            }
+          });
+          done()
+        }
+      })
+    },
+  }
+}
+</script>
+
+<style scoped>
+.tip{
+  font-size: 12px;
+  line-height: 24px;
+  color: #909399;
+  margin: 0 0 10px 20px;
+}
+.tip div{
+  margin-left: 30px;
+}
+</style>
diff --git a/Source/plt-web/plt-web-ui/src/views/system/log/index.vue b/Source/plt-web/plt-web-ui/src/views/system/log/index.vue
new file mode 100644
index 0000000..9b02091
--- /dev/null
+++ b/Source/plt-web/plt-web-ui/src/views/system/log/index.vue
@@ -0,0 +1,170 @@
+<template>
+  <basic-container>
+    <avue-crud
+      ref="logCrud"
+      :data="tableData"
+      :option="option"
+      :page.sync="page"
+      :table-loading="tableLoading"
+      @on-load="getTableList"
+      @refresh-change="handleRefresh"
+      @search-change="handleSearch"
+      @search-reset="handleReset"
+      @size-change="sizeChange"
+      @current-change="currentChange"
+    >
+      <template slot="menuLeft" slot-scope="scope">
+        <el-button icon="el-icon-download" plain size="small" type="primary" @click="exportClickHandler">瀵煎嚭</el-button>
+      </template>
+    </avue-crud>
+  </basic-container>
+</template>
+
+<script>
+import basicOption from "@/util/basic-option";
+import {getLogListByContion,getOperatingUsers,exportLog} from "@/api/system/log/logBasic";
+import func from "@/util/func";
+
+export default {
+  name: "index",
+  data: function () {
+    return {
+      tableLoading: false,
+      tableData: [],
+      option: {
+        ...basicOption,
+        addBtn: false,
+        editBtn: false,
+        delBtn: false,
+        calcHeight: -60,
+        align: 'left',
+        headerAlign: 'center',
+        menu: false,
+        searchMenuSpan: 6,
+        searchIcon: false,
+        column: [
+          {
+            label: '鐢ㄦ埛鍚�',
+            prop: 'truename',
+            search: true,
+            searchSpan: 4,
+            searchLabel: '鎿嶄綔鐢ㄦ埛',
+            type: 'select',
+            dicUrl: '/api/loginBasicController/getOperatingUsers',
+            sortable: true,
+            width: 150
+          }, {
+            label: '濮撳悕',
+            prop: 'username',
+            sortable: true,
+            width: 150
+          }, {
+            label: '鐢ㄦ埛IP',
+            prop: 'userIp',
+            search: true,
+            searchSpan: 4,
+            sortable: true,
+            width: 150
+          }, {
+            label: '妯″潡',
+            prop: 'moduleName',
+            sortable: true,
+            overHidden: true,
+          }, {
+            label: '鎿嶄綔',
+            prop: 'type',
+            sortable: true,
+            width: 150
+          }, {
+            label: '鏃堕棿',
+            prop: 'date',
+            type: 'date',
+            search: true,
+            searchOrder: 1,
+            searchSpan: 8,
+            searchRange: true,
+            searchLabel: '鏌ヨ鏃ユ湡',
+            valueFormat: 'yyyy-MM-dd',
+            width: 160
+          }, {
+            label: '鎻忚堪',
+            prop: 'result',
+            overHidden: true,
+            width: 380,
+          },
+        ]
+      },
+      page: {
+        currentPage: 1,
+        pageSize: 50,
+        total: 0,
+        pageSizes: [10, 30, 50, 100],
+      },
+      searchParams: {}
+    }
+  },
+  watch: {
+    $route(to, from) {
+      this.getTableList();
+    }
+  },
+  methods: {
+    // 琛ㄦ牸璇锋眰
+    getTableList() {
+      this.tableLoading = true;
+      getLogListByContion(this.page.currentPage, this.page.pageSize, {'logType': this.$route.query.logType, ...this.searchParams}).then(res => {
+        this.tableData = res.data.data;
+        this.page.total = res.data.total;
+        this.tableLoading = false;
+      })
+    },
+
+    // 鎼滅储鏌ヨ
+    handleSearch(params, done) {
+      this.searchParams = {
+        userName: params.truename,
+        ipText: params.userIp,
+        startDate: params.date[0],
+        endDate: params.date[1]
+      };
+
+      this.getTableList();
+      done();
+    },
+
+    // 閲嶇疆鎼滅储鏉′欢
+    handleReset() {
+      this.searchParams = {};
+      this.getTableList();
+    },
+
+    // 鏉℃暟
+    sizeChange(val) {
+      this.page.pageSize = val;
+    },
+
+    // 椤电爜
+    currentChange(val) {
+      this.page.currentPage = val;
+    },
+
+    handleRefresh() {
+      this.getTableList();
+    },
+    // 瀵煎嚭
+    exportClickHandler() {
+      const loading = this.$loading({});
+      exportLog().then(res => {
+        func.downloadFileByBlobHandler(res);
+        this.createdLoading = false
+        this.$message.success('瀵煎嚭鎴愬姛');
+        loading.close();
+      })
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/Source/plt-web/plt-web-ui/src/views/system/user/index.vue b/Source/plt-web/plt-web-ui/src/views/system/user/index.vue
index ee786da..f51774b 100644
--- a/Source/plt-web/plt-web-ui/src/views/system/user/index.vue
+++ b/Source/plt-web/plt-web-ui/src/views/system/user/index.vue
@@ -238,9 +238,7 @@
         this.tableData = data;
         this.page.total = res.data.total;
         this.tableLoading = false;
-      }).catch(err => {
-        this.$message.error(err)
-      });
+      })
     },
 
     // 琛ㄦ牸鍙充晶鍒锋柊鍥炬爣
diff --git a/Source/plt-web/plt-web-ui/src/views/systemModel/businessModel/index.vue b/Source/plt-web/plt-web-ui/src/views/systemModel/businessModel/index.vue
index a36c78d..cb210be 100644
--- a/Source/plt-web/plt-web-ui/src/views/systemModel/businessModel/index.vue
+++ b/Source/plt-web/plt-web-ui/src/views/systemModel/businessModel/index.vue
@@ -2,8 +2,8 @@
   <el-container v-loading="createdLoading">
     <el-aside>
       <basic-container>
-        <div style="max-height: calc(100vh - 170px);overflow: auto">
-          <avue-tree :key="refresh" ref="tree" :data="treeData" :option="treeOption" @node-click="nodeClick">
+        <div style="max-height: calc(100vh - 150px);overflow: auto">
+          <avue-tree :key="refresh" node-key="id" ref="tree" :data="treeData" :option="treeOption" @node-click="nodeClick">
           <span slot-scope="{ node, data }" class="el-tree-node__label">
            <span style="font-size: 15px">
               <i class="el-icon-s-promotion"></i>
@@ -17,7 +17,7 @@
 
     <el-main>
       <basic-container>
-        <el-form ref="form" :model="form" label-width="85px" style="height: 79vh">
+        <el-form ref="form" :model="form" label-width="85px" style="max-height: calc(100vh - 180px);overflow: auto;">
           <span v-if="form.childType !== 0">
             <el-form-item label="妯″潡鍚嶏細">
             <el-input v-model="form.name" placeholder="璇疯緭鍏ユā鍧楀悕"></el-input>
@@ -202,6 +202,7 @@
       addStatus: false,
       editStatus: false,
       nodeRow: {},
+      currentClickNode:null,
       form: {},
       treeData: [],
       treeOption: {
@@ -255,9 +256,10 @@
   },
   methods: {
     // 鏍戣鐐瑰嚮
-    nodeClick(row) {
+    nodeClick(row,node) {
       this.form = {...row};
       this.nodeRow = {...row};
+      this.currentClickNode=node;
       this.addStatus = false;
       this.editStatus = false;
     },
@@ -312,7 +314,7 @@
           this.addStatus = false;
           // this.resetFormValue();
           this.form.childType = null;
-          this.refresh = Math.random(); // 鍒锋柊宸︿晶鏍�
+          this.handleRefreshTree('add')
         }
       })
     },
@@ -356,7 +358,7 @@
           this.editStatus = false;
           // this.resetFormValue();
           this.form.childType = null;
-          this.refresh = Math.random(); // 鍒锋柊宸︿晶鏍�
+          this.handleRefreshTree('edit')
         }
       })
     },
@@ -371,7 +373,7 @@
         delModule(this.form).then(res => {
           if (res.data.code === 200) {
             this.$message.success(res.data.msg);
-            this.resetFormValue();
+            this.handleRefreshTree('del')
             this.addStatus = false;
             this.editStatus = false;
           }
@@ -389,8 +391,6 @@
       exportFunctionSql({isFunction: true}).then(res => {
         func.downloadFileByBlobHandler(res);
         this.$message.success('瀵煎嚭鎴愬姛');
-      }).catch(err => {
-        this.$message.error(err);
       });
     },
 
@@ -425,12 +425,11 @@
         }
       })
       addOperationType(list).then(res => {
-        console.log(res)
         if (res.data.code === 200) {
           this.methodsVisble = false;
           this.$message.success(res.data.msg);
           this.form.childType = null;
-          this.refresh = Math.random(); // 鍒锋柊宸︿晶鏍�
+          this.handleRefreshTree('add') // 鍒锋柊宸︿晶鏍�
         }
       })
     },
@@ -460,7 +459,7 @@
       updateAlias(params).then(res => {
         if (res.data.code === 200) {
           this.$message.success(res.data.msg);
-          this.refresh = Math.random(); // 鍒锋柊宸︿晶鏍�
+          this.handleRefreshTree('edit')
         }
       })
     },
@@ -480,7 +479,7 @@
           console.log(res);
           if (res.data.code === 200) {
             this.$message.success(res.data.msg);
-            this.resetFormValue();
+            this.handleRefreshTree('del');
           }
         })
       }).catch(() => {
@@ -506,6 +505,23 @@
     // 瀵煎叆
     upLoadClickHandler() {
       this.$refs.upload.visible = true;
+    },
+    handleRefreshTree(type) {
+      //type:add\edit\del
+      if(type=="del"){
+        this.$refs.tree.remove(this.currentClickNode);
+        this.currentClickNode=null;
+        this.form={};
+      }else{
+        if (this.currentClickNode) {
+          let node = this.currentClickNode.parent;
+          node.loaded = false;
+          node.expand();
+          this.$refs.tree.setCurrentNode(this.currentClickNode);
+        }else {
+          this.refresh = Math.random(); // 鍒锋柊宸︿晶鏍�
+        }
+      }
     }
   }
 }
diff --git a/Source/plt-web/plt-web-ui/src/views/systemModel/mangeModel/index.vue b/Source/plt-web/plt-web-ui/src/views/systemModel/mangeModel/index.vue
index ed00511..15cbb86 100644
--- a/Source/plt-web/plt-web-ui/src/views/systemModel/mangeModel/index.vue
+++ b/Source/plt-web/plt-web-ui/src/views/systemModel/mangeModel/index.vue
@@ -2,8 +2,8 @@
   <el-container v-loading="createdLoading">
     <el-aside>
       <basic-container>
-        <div style="max-height: calc(100vh - 170px);overflow: auto">
-          <avue-tree :key="refresh" ref="tree" :data="treeData" :option="treeOption" @node-click="nodeClick">
+        <div style="max-height: calc(100vh - 150px);overflow: auto">
+          <avue-tree :key="refresh" node-key="id" ref="tree" :data="treeData" :option="treeOption" @node-click="nodeClick">
           <span slot-scope="{ node, data }" class="el-tree-node__label">
            <span style="font-size: 15px">
               <i class="el-icon-s-promotion"></i>
@@ -17,7 +17,7 @@
 
     <el-main>
       <basic-container>
-        <el-form ref="form" :model="form" label-width="85px" style="height: 79vh">
+        <el-form ref="form" :model="form" label-width="85px" style="max-height: calc(100vh - 180px);overflow: auto;">
           <span v-if="form.childType !== 0">
             <el-form-item label="妯″潡鍚嶏細">
             <el-input v-model="form.name" placeholder="璇疯緭鍏ユā鍧楀悕"></el-input>
@@ -202,6 +202,7 @@
       addStatus: false,
       editStatus: false,
       nodeRow: {},
+      currentClickNode:null,
       form: {},
       treeData: [],
       treeOption: {
@@ -255,10 +256,11 @@
   },
   methods: {
     // 鏍戣鐐瑰嚮
-    nodeClick(row) {
+    nodeClick(row,node) {
       console.log(row.childType);
       this.form = {...row};
       this.nodeRow = {...row};
+      this.currentClickNode = node;
       this.addStatus = false;
       this.editStatus = false;
     },
@@ -313,7 +315,7 @@
           this.addStatus = false;
           // this.resetFormValue();
           this.form.childType = null;
-          this.refresh = Math.random(); // 鍒锋柊宸︿晶鏍�
+          this.handleRefreshTree('add')
         }
       })
     },
@@ -357,7 +359,7 @@
           this.editStatus = false;
           // this.resetFormValue();
           this.form.childType = null;
-          this.refresh = Math.random(); // 鍒锋柊宸︿晶鏍�
+          this.handleRefreshTree('edit')
         }
       })
     },
@@ -372,7 +374,7 @@
         delModule(this.form).then(res => {
           if (res.data.code === 200) {
             this.$message.success(res.data.msg);
-            this.resetFormValue();
+            this.handleRefreshTree('del')
             this.addStatus = false;
             this.editStatus = false;
           }
@@ -461,23 +463,21 @@
       updateAlias(params).then(res => {
         if (res.data.code === 200) {
           this.$message.success(res.data.msg);
-          this.refresh = Math.random(); // 鍒锋柊宸︿晶鏍�
+          this.handleRefreshTree('edit')
         }
       })
     },
 
     // 鍒犻櫎妯″潡涓嬪叧鑱旂殑鎿嶄綔绫诲瀷
     deleteOperationClickHandler() {
-      console.log(this.form);
       const params = {
         funcId: this.form.funcId,
         operId: this.form.operId
       }
       delFuncOperation(params).then(res => {
-        console.log(res);
         if (res.data.code === 200) {
           this.$message.success(res.data.msg);
-          this.resetFormValue();
+          this.handleRefreshTree('del');
         }
       })
     },
@@ -489,14 +489,29 @@
         func.downloadFileByBlobHandler(res);
         this.createdLoading = false
         this.$message.success('瀵煎嚭鎴愬姛');
-      }).catch(err => {
-        this.$message.error(err);
       })
     },
 
     // 瀵煎叆
     upLoadClickHandler() {
       this.$refs.upload.visible = true;
+    },
+    handleRefreshTree(type) {
+      //type:add\edit\del
+      if(type=="del"){
+        this.$refs.tree.remove(this.currentClickNode);
+        this.currentClickNode=null;
+        this.form={};
+      }else{
+        if (this.currentClickNode) {
+          let node = this.currentClickNode.parent;
+          node.loaded = false;
+          node.expand();
+          this.$refs.tree.setCurrentNode(this.currentClickNode);
+        }else {
+          this.refresh = Math.random(); // 鍒锋柊宸︿晶鏍�
+        }
+      }
     }
   }
 }
diff --git a/Source/plt-web/plt-web-ui/src/views/systemModel/operateType/index.vue b/Source/plt-web/plt-web-ui/src/views/systemModel/operateType/index.vue
index cea9234..afbb76d 100644
--- a/Source/plt-web/plt-web-ui/src/views/systemModel/operateType/index.vue
+++ b/Source/plt-web/plt-web-ui/src/views/systemModel/operateType/index.vue
@@ -2,8 +2,8 @@
   <el-container>
     <el-aside>
       <basic-container>
-        <div style="max-height: calc(100vh - 170px);overflow: auto">
-          <avue-tree :key="refresh" ref="tree" :data="treeData" :option="treeOption" @node-click="nodeClick">
+        <div style="max-height: calc(100vh - 150px);overflow: auto">
+          <avue-tree :key="refresh" node-key="id" ref="tree" :data="treeData" :option="treeOption" @node-click="nodeClick">
           <span slot-scope="{ node, data }" class="el-tree-node__label">
            <span style="font-size: 15px">
               <i class="el-icon-s-promotion"></i>
@@ -17,7 +17,7 @@
 
     <el-main>
       <basic-container>
-        <el-form ref="form" :model="form" label-width="85px" style="height: 79vh">
+        <el-form ref="form" :model="form" label-width="85px" style="max-height: calc(100vh - 180px);overflow: auto;">
           <el-form-item label="鍚嶇О锛�">
             <el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�"></el-input>
           </el-form-item>
@@ -73,6 +73,7 @@
       editStatus:false,
       addStatus: false,
       nodeRow: {},
+      currentClickNode:null,
       form: {},
       treeData: [],
       treeOption: {
@@ -111,10 +112,11 @@
   },
   methods: {
     // 鏍戣鐐瑰嚮
-    nodeClick(row) {
+    nodeClick(row,node) {
       console.log(row);
       this.form = {...row};
       this.nodeRow = {...row};
+      this.currentClickNode=node;
       this.addStatus = false;
       this.editStatus = false;
     },
@@ -173,7 +175,7 @@
       addOperationType(params).then(res => {
         if(res.data.code === 200){
           this.$message.success(res.data.msg);
-          this.refresh = Math.random(); // 鍒锋柊宸︿晶鏍�
+          this.handleRefreshTree('add')
           this.addStatus = false;
         }
       })
@@ -227,7 +229,7 @@
       updateOperationType(params).then(res => {
         if(res.data.code === 200){
           this.$message.success(res.data.msg);
-          this.refresh = Math.random(); // 鍒锋柊宸︿晶鏍�
+          this.handleRefreshTree('edit')
           this.editStatus = false;
         }
       })
@@ -243,7 +245,7 @@
         delOperationType(this.form).then(res => {
           if (res.data.code === 200) {
             this.$message.success(res.data.msg);
-            this.resetFormValue();
+            this.handleRefreshTree('del')
             this.addStatus = false;
             this.editStatus = false;
             this.nodeRow = {};
@@ -262,10 +264,25 @@
       exportFunctionSql({isFunction: false}).then(res => {
         func.downloadFileByBlobHandler(res);
         this.$message.success('瀵煎嚭鎴愬姛');
-      }).catch(err => {
-        this.$message.error(err);
       });
     },
+    handleRefreshTree(type) {
+      //type:add\edit\del
+      if(type=="del"){
+        this.$refs.tree.remove(this.currentClickNode);
+        this.currentClickNode=null;
+        this.form={};
+      }else{
+        if (this.currentClickNode) {
+          let node = this.currentClickNode.parent;
+          node.loaded = false;
+          node.expand();
+          this.$refs.tree.setCurrentNode(this.currentClickNode);
+        }else {
+          this.refresh = Math.random(); // 鍒锋柊宸︿晶鏍�
+        }
+      }
+    }
   }
 }
 </script>

--
Gitblit v1.9.3