diff --git a/ant-design-vue-jeecg/src/views/system/DataPermissionList.vue b/ant-design-vue-jeecg/src/views/system/DataPermissionList.vue
index 59969eb..2a2b2c9 100644
--- a/ant-design-vue-jeecg/src/views/system/DataPermissionList.vue
+++ b/ant-design-vue-jeecg/src/views/system/DataPermissionList.vue
@@ -44,7 +44,7 @@
                 <a href="javascript:" @click="handleDetail(record)">详情</a>
               </a-menu-item>
               <a-menu-item v-has="'permission:addChildren'">
-                <a href="javascript:" @click="handleAddSub(record)">添加下级</a>
+                <a href="javascript:" v-if="record.type === 0" @click="handleAddSub(record)">添加下级</a>
               </a-menu-item>
               <a-menu-item v-has="'permission:delete'">
                 <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
@@ -170,7 +170,7 @@ export default {
     handleAddSub(record) {
       this.$refs.modalForm.title = '添加子数据权限'
       this.$refs.modalForm.disableSubmit = false
-      this.$refs.modalForm.edit({ status: '1', permsType: '1', route: true, 'parentId': record.id, type: 1 })
+      this.$refs.modalForm.edit({ status: '1', type: 1, parentId: record.id, perms: record.perms + ":" })
     },
     handleExpandedRowsChange(expandedRows) {
       this.expandedRowKeys = expandedRows
@@ -191,7 +191,7 @@ export default {
         color = 'red'
       }
       return color
-    },
+    }
   }
 }
 </script>
diff --git a/ant-design-vue-jeecg/src/views/system/modules/DataPermissionModal.vue b/ant-design-vue-jeecg/src/views/system/modules/DataPermissionModal.vue
index 6f05424..ccd590b 100644
--- a/ant-design-vue-jeecg/src/views/system/modules/DataPermissionModal.vue
+++ b/ant-design-vue-jeecg/src/views/system/modules/DataPermissionModal.vue
@@ -12,8 +12,8 @@
 
           <a-form-model-item label="资源类型" :labelCol="labelCol" :wrapperCol="wrapperCol">
             <a-radio-group v-model="model.type">
-              <a-radio :value="0">标识</a-radio>
-              <a-radio :value="1">权限</a-radio>
+              <a-radio v-if="model.type === 0" :value="0">标识</a-radio>
+              <a-radio v-if="model.type === 1" :value="1">权限</a-radio>
             </a-radio-group>
           </a-form-model-item>
 
@@ -118,7 +118,7 @@ export default {
     validatorRules: function() {
       return {
         name: [{ required: true, message: '请输入权限标题!' }],
-        perms: [{ required: false, message: '请输入授权标识!' }, { validator: this.validatePerms }]
+        perms: [{ required: true, message: '请输入授权标识!' }, { validator: this.validatePerms }]
       }
     }
   },
@@ -146,6 +146,7 @@ export default {
     edit(record) {
       this.resetScreenSize() // 调用此方法,根据屏幕宽度自适应调整抽屉的宽度
       this.model = { ...record }
+      debugger;
       if (this.model.type === 0) {
         // 如果资源类型是标识,则没有状态
         this.model.status = null
@@ -164,7 +165,7 @@ export default {
       // 触发表单验证
       this.$refs.form.validate(valid => {
         if (valid) {
-          if ((this.model.type === 1 || this.model.type === 2) && !this.model.parentId) {
+          if (this.model.type === 1 && !this.model.parentId) {
             that.validateStatus = 'error'
             that.$message.error('请检查你填的类型以及信息是否正确!')
             return
@@ -201,7 +202,7 @@ export default {
       if (value && value.length > 0) {
         //校验授权标识是否存在
         let params = {
-          tableName: 'sys_permission',
+          tableName: 'sys_data_permission',
           fieldName: 'perms',
           fieldVal: value,
           dataId: this.model.id
diff --git a/ant-design-vue-jeecg/src/views/system/modules/UserRoleModal.vue b/ant-design-vue-jeecg/src/views/system/modules/UserRoleModal.vue
index 29326e3..b6ac4cc 100644
--- a/ant-design-vue-jeecg/src/views/system/modules/UserRoleModal.vue
+++ b/ant-design-vue-jeecg/src/views/system/modules/UserRoleModal.vue
@@ -38,7 +38,6 @@
               :checkedKeys="dataCheckedKeys"
               :treeData="dataTreeData"
               @expand="dataOnExpand"
-              @select="dataOnTreeNodeSelect"
               :selectedKeys="dataSelectedKeys"
               :expandedKeys="dataExpandedKeys"
               :checkStrictly="dataCheckStrictly">
@@ -80,7 +79,7 @@
 
 </template>
 <script>
-import { queryDataTreeListForRole, queryRoleDataPermission, queryRolePermission, queryTreeListForRole, saveRolePermission } from '@/api/api'
+import { queryRolePermission, queryTreeListForRole, saveRolePermission } from '@/api/api'
 import RoleDataruleModal from './RoleDataruleModal.vue'
 
 export default {
@@ -122,12 +121,6 @@ export default {
       }
       this.$refs.datarule.show(this.selectedKeys[0], this.roleId)
     },
-    dataOnTreeNodeSelect(id) {
-      if (id && id.length > 0) {
-        this.dataSelectedKeys = id
-      }
-      this.$refs.datarule.show(this.dataSelectedKeys[0], this.roleId)
-    },
     onCheck(o) {
       if (this.checkStrictly) {
         this.checkedKeys = o.checked
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/controller/SysDataPermissionController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/controller/SysDataPermissionController.java
index c58dc66..d537ba8 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/controller/SysDataPermissionController.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/controller/SysDataPermissionController.java
@@ -1,24 +1,26 @@
 package org.jeecg.modules.system.controller;
 
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.constant.CommonConstant;
-import org.jeecg.common.constant.enums.RoleIndexConfigEnum;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.config.JeeccgBaseConfig;
-import org.jeecg.modules.system.entity.*;
+import org.jeecg.modules.system.entity.SysDataPermission;
+import org.jeecg.modules.system.entity.SysRoleDataPermission;
+import org.jeecg.modules.system.entity.SysRolePermission;
 import org.jeecg.modules.system.model.SysDataPermissionTree;
 import org.jeecg.modules.system.model.TreeModel;
 import org.jeecg.modules.system.service.*;
-import org.jeecg.modules.system.util.DataPermissionDataUtil;
+import org.jeecg.utils.constant.QuantityConstant;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -27,7 +29,7 @@ import java.util.stream.Collectors;
 
 /**
  * <p>
- * 菜单权限表 前端控制器
+ * 数据权限表 前端控制器
  * </p>
  *
  * @Author scott
@@ -54,9 +56,6 @@ public class SysDataPermissionController {
     private ISysDepartPermissionService sysDepartPermissionService;
 
     @Autowired
-    private ISysUserService sysUserService;
-
-    @Autowired
     private JeeccgBaseConfig jeeccgBaseConfig;
 
     /**
@@ -77,17 +76,17 @@ public class SysDataPermissionController {
             getTreeList(treeList, list, null);
             result.setResult(treeList);
             result.setSuccess(true);
-            log.info("======获取全部菜单数据=====耗时:" + (System.currentTimeMillis() - start) + "毫秒");
+            log.info("======获取全部数据权限=====耗时:{}毫秒", System.currentTimeMillis() - start);
         } catch (Exception e) {
             log.error(e.getMessage(), e);
         }
         return result;
     }
 
-    /* update_begin author:wuxianquan date:20190908 for:先查询一级菜单,当用户点击展开菜单时加载子菜单 */
+    /* update_begin author:wuxianquan date:20190908 for:先查询一级数据,当用户点击展开数据时加载子数据 */
 
     /**
-     * 系统菜单列表(一级菜单)
+     * 系统数据列表(一级数据)
      *
      * @return
      */
@@ -111,12 +110,12 @@ public class SysDataPermissionController {
         } catch (Exception e) {
             log.error(e.getMessage(), e);
         }
-        log.info("======获取一级菜单数据=====耗时:" + (System.currentTimeMillis() - start) + "毫秒");
+        log.info("======获取一级数据权限=====耗时:{}毫秒", System.currentTimeMillis() - start);
         return result;
     }
 
     /**
-     * 查询子菜单
+     * 查询子权限
      *
      * @param parentId
      * @return
@@ -142,12 +141,12 @@ public class SysDataPermissionController {
         }
         return result;
     }
-    /* update_end author:wuxianquan date:20190908 for:先查询一级菜单,当用户点击展开菜单时加载子菜单 */
+    /* update_end author:wuxianquan date:20190908 for:先查询一级权限,当用户点击展开权限时加载子权限 */
 
-    // update_begin author:sunjianlei date:20200108 for: 新增批量根据父ID查询子级菜单的接口 -------------
+    // update_begin author:sunjianlei date:20200108 for: 新增批量根据父ID查询子级权限的接口 -------------
 
     /**
-     * 查询子菜单
+     * 查询子权限
      *
      * @param parentIds 父ID(多个采用半角逗号分割)
      * @return 返回 key-value 的 Map
@@ -176,41 +175,19 @@ public class SysDataPermissionController {
             return Result.ok(listMap);
         } catch (Exception e) {
             log.error(e.getMessage(), e);
-            return Result.error("批量查询子菜单失败:" + e.getMessage());
+            return Result.error("批量查询子权限失败:" + e.getMessage());
         }
     }
-    // update_end author:sunjianlei date:20200108 for: 新增批量根据父ID查询子级菜单的接口 -------------
-
-//	/**
-//	 * 查询用户拥有的菜单权限和按钮权限(根据用户账号)
-//	 *
-//	 * @return
-//	 */
-//	@RequestMapping(value = "/queryByUser", method = RequestMethod.GET)
-//	public Result<JSONArray> queryByUser(HttpServletRequest req) {
-//		Result<JSONArray> result = new Result<>();
-//		try {
-//			String username = req.getParameter("username");
-//			List<sysDataPermission> metaList = sysDataPermissionService.queryByUser(username);
-//			JSONArray jsonArray = new JSONArray();
-//			this.getPermissionJsonArray(jsonArray, metaList, null);
-//			result.setResult(jsonArray);
-//			result.success("查询成功");
-//		} catch (Exception e) {
-//			result.error500("查询失败:" + e.getMessage());
-//			log.error(e.getMessage(), e);
-//		}
-//		return result;
-//	}
+    // update_end author:sunjianlei date:20200108 for: 新增批量根据父ID查询子级权限的接口 -------------
 
     /**
-     * 查询用户拥有的菜单权限和按钮权限
+     * 查询用户拥有的数据权限
      *
      * @return
      */
-    @RequestMapping(value = "/getUserPermissionByToken", method = RequestMethod.GET)
+    @RequestMapping(value = "/getDataPermissionByToken", method = RequestMethod.GET)
     public Result<?> getUserPermissionByToken() {
-        Result<JSONObject> result = new Result<JSONObject>();
+        Result<JSONArray> result = new Result<>();
         try {
             // 直接获取当前用户不适用前端token
             LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
@@ -218,45 +195,18 @@ public class SysDataPermissionController {
                 return Result.error("请登录系统!");
             }
             List<SysDataPermission> metaList = sysDataPermissionService.queryByUser(loginUser.getUsername());
-            // 添加首页路由
-            // update-begin-author:taoyan date:20200211 for: TASK #3368 【路由缓存】首页的缓存设置有问题,需要根据后台的路由配置来实现是否缓存
-            if (!DataPermissionDataUtil.hasIndexPage(metaList)) {
-                SysDataPermission indexMenu = sysDataPermissionService.list(new LambdaQueryWrapper<SysDataPermission>().eq(SysDataPermission::getName, "首页")).get(0);
-                metaList.add(0, indexMenu);
-            }
-            // update-end-author:taoyan date:20200211 for: TASK #3368 【路由缓存】首页的缓存设置有问题,需要根据后台的路由配置来实现是否缓存
-
-            // update-begin--Author:liusq Date:20210624 for:自定义首页地址LOWCOD-1578
-            List<String> roles = sysUserService.getRole(loginUser.getUsername());
-            String compUrl = RoleIndexConfigEnum.getIndexByRoles(roles);
-            if (StringUtils.isNotBlank(compUrl)) {
-                List<SysDataPermission> menus = metaList.stream().filter(sysDataPermission -> "首页".equals(sysDataPermission.getName())).collect(Collectors.toList());
-            }
             // update-end--Author:liusq Date:20210624 for:自定义首页地址LOWCOD-1578
-            JSONObject json = new JSONObject();
-            JSONArray menujsonArray = new JSONArray();
-            this.getPermissionJsonArray(menujsonArray, metaList, null);
-            // 一级菜单下的子菜单全部是隐藏路由,则一级菜单不显示
-            this.handleFirstLevelMenuHidden(menujsonArray);
+            //JSONObject json = new JSONObject();
 
             JSONArray authjsonArray = new JSONArray();
             this.getAuthJsonArray(authjsonArray, metaList);
             // 查询所有的权限
             LambdaQueryWrapper<SysDataPermission> query = new LambdaQueryWrapper<>();
-            query.eq(SysDataPermission::getDelFlag, CommonConstant.DEL_FLAG_0);
-            query.eq(SysDataPermission::getType, CommonConstant.MENU_TYPE_2);
-            // query.eq(sysDataPermission::getStatus, "1");
-            List<SysDataPermission> allAuthList = sysDataPermissionService.list(query);
-            JSONArray allauthjsonArray = new JSONArray();
-            this.getAllAuthJsonArray(allauthjsonArray, allAuthList);
-            // 路由菜单
-            json.put("menu", menujsonArray);
-            // 按钮权限(用户拥有的权限集合)
-            json.put("auth", authjsonArray);
-            // 全部权限配置集合(按钮权限,访问权限)
-            json.put("allAuth", allauthjsonArray);
-            json.put("sysSafeMode", jeeccgBaseConfig.getSafeMode());
-            result.setResult(json);
+            query.eq(SysDataPermission::getDelFlag, CommonConstant.DEL_FLAG_0)
+                    .eq(SysDataPermission::getType, CommonConstant.MENU_TYPE_1)
+                    .eq(SysDataPermission::getStatus, QuantityConstant.STATUS_ENABLE);
+            //json.put("sysSafeMode", jeeccgBaseConfig.getSafeMode());
+            result.setResult(authjsonArray);
         } catch (Exception e) {
             result.error500("查询失败:" + e.getMessage());
             log.error(e.getMessage(), e);
@@ -267,7 +217,7 @@ public class SysDataPermissionController {
     /**
      * 【vue3专用】获取
      * 1、查询用户拥有的按钮/表单访问权限
-     * 2、所有权限 (菜单权限配置)
+     * 2、所有权限 (数据权限配置)
      * 3、系统安全模式 (开启则online报表的数据源必填)
      */
     @RequestMapping(value = "/getPermCode", method = RequestMethod.GET)
@@ -311,7 +261,7 @@ public class SysDataPermissionController {
     }
 
     /**
-     * 添加菜单
+     * 添加数据权限
      *
      * @param permission
      * @return
@@ -322,7 +272,6 @@ public class SysDataPermissionController {
     public Result<SysDataPermission> add(@RequestBody SysDataPermission permission) {
         Result<SysDataPermission> result = new Result<>();
         try {
-            permission = DataPermissionDataUtil.intelligentProcessData(permission);
             sysDataPermissionService.addPermission(permission);
             result.success("添加成功!");
         } catch (Exception e) {
@@ -333,7 +282,7 @@ public class SysDataPermissionController {
     }
 
     /**
-     * 编辑菜单
+     * 编辑数据权限
      *
      * @param permission
      * @return
@@ -344,7 +293,6 @@ public class SysDataPermissionController {
     public Result<SysDataPermission> edit(@RequestBody SysDataPermission permission) {
         Result<SysDataPermission> result = new Result<>();
         try {
-            permission = DataPermissionDataUtil.intelligentProcessData(permission);
             sysDataPermissionService.editPermission(permission);
             result.success("修改成功!");
         } catch (Exception e) {
@@ -355,7 +303,7 @@ public class SysDataPermissionController {
     }
 
     /**
-     * 删除菜单
+     * 删除数据权限
      *
      * @param id
      * @return
@@ -376,7 +324,7 @@ public class SysDataPermissionController {
     }
 
     /**
-     * 批量删除菜单
+     * 批量删除数据权限
      *
      * @param ids
      * @return
@@ -443,7 +391,7 @@ public class SysDataPermissionController {
         Result<List<TreeModel>> result = new Result<>();
         try {
             List<TreeModel> list = sysDataPermissionService.queryListByParentId(parentId);
-            if (list == null || list.size() <= 0) {
+            if (list == null || list.isEmpty()) {
                 result.error500("未找到角色信息");
             } else {
                 result.setResult(list);
@@ -452,7 +400,6 @@ public class SysDataPermissionController {
         } catch (Exception e) {
             log.error(e.getMessage(), e);
         }
-
         return result;
     }
 
@@ -480,30 +427,6 @@ public class SysDataPermissionController {
         return result;
     }
 
-    /**
-     * 保存角色授权
-     *
-     * @return
-     */
-    /*@RequestMapping(value = "/saveRolePermission", method = RequestMethod.POST)
-    // @RequiresRoles({ "admin" })
-    public Result<String> saveRolePermission(@RequestBody JSONObject json) {
-        long start = System.currentTimeMillis();
-        Result<String> result = new Result<>();
-        try {
-            String roleId = json.getString("roleId");
-            String permissionIds = json.getString("permissionIds");
-            String lastPermissionIds = json.getString("lastpermissionIds");
-            this.sysRolePermissionService.saveRolePermission(roleId, permissionIds, lastPermissionIds);
-            result.success("保存成功!");
-            log.info("======角色授权成功=====耗时:" + (System.currentTimeMillis() - start) + "毫秒");
-        } catch (Exception e) {
-            result.error500("授权失败!");
-            log.error(e.getMessage(), e);
-        }
-        return result;
-    }*/
-
     private void getTreeList(List<SysDataPermissionTree> treeList, List<SysDataPermission> metaList, SysDataPermissionTree temp) {
         for (SysDataPermission permission : metaList) {
             String tempPid = String.valueOf(permission.getParentId());
@@ -519,7 +442,6 @@ public class SysDataPermissionController {
                     getTreeList(treeList, metaList, tree);
                 }
             }
-
         }
     }
 
@@ -543,43 +465,19 @@ public class SysDataPermissionController {
     }
 
     /**
-     * 一级菜单的子菜单全部是隐藏路由,则一级菜单不显示
-     *
-     * @param jsonArray
-     */
-    private void handleFirstLevelMenuHidden(JSONArray jsonArray) {
-        jsonArray = jsonArray.stream().map(obj -> {
-            JSONObject returnObj = new JSONObject();
-            JSONObject jsonObj = (JSONObject) obj;
-            if (jsonObj.containsKey("children")) {
-                JSONArray childrens = jsonObj.getJSONArray("children");
-                childrens =
-                        childrens.stream().filter(arrObj -> !"true".equals(((JSONObject) arrObj).getString("hidden"))).collect(Collectors.toCollection(JSONArray::new));
-                if (childrens == null || childrens.size() == 0) {
-                    jsonObj.put("hidden", true);
-
-                    // vue3版本兼容代码
-                    JSONObject meta = new JSONObject();
-                    meta.put("hideMenu", true);
-                    jsonObj.put("meta", meta);
-                }
-            }
-            return returnObj;
-        }).collect(Collectors.toCollection(JSONArray::new));
-    }
-
-    /**
      * 获取权限JSON数组
      *
      * @param jsonArray
      * @param allList
      */
     private void getAllAuthJsonArray(JSONArray jsonArray, List<SysDataPermission> allList) {
-        JSONObject json = null;
+        JSONObject json;
         for (SysDataPermission permission : allList) {
             json = new JSONObject();
             json.put("action", permission.getPerms());
-            json.put("describe", permission.getName());
+            json.put("status", permission.getStatus());
+            json.put("type", permission.getType());
+            json.put("describe", permission.getDescription());
             jsonArray.add(json);
         }
     }
@@ -591,258 +489,30 @@ public class SysDataPermissionController {
      * @param metaList
      */
     private void getAuthJsonArray(JSONArray jsonArray, List<SysDataPermission> metaList) {
-        for (SysDataPermission permission : metaList) {
-            if (permission.getType() == null) {
-                continue;
-            }
-            /*JSONObject json = null;
-            if (permission.getType().equals(CommonConstant.MENU_TYPE_2)) {
-                json = new JSONObject();
-                json.put("action", permission.getPerms());
-                json.put("type", permission.getPermsType());
-                json.put("describe", permission.getName());
-                jsonArray.add(json);
-            }*/
-        }
-    }
-
-    /**
-     * 获取菜单JSON数组
-     *
-     * @param jsonArray
-     * @param metaList
-     * @param parentJson
-     */
-    private void getPermissionJsonArray(JSONArray jsonArray, List<SysDataPermission> metaList, JSONObject parentJson) {
-        for (SysDataPermission permission : metaList) {
-            if (permission.getType() == null) {
-                continue;
-            }
-            String tempPid = String.valueOf(permission.getParentId());
-            JSONObject json = getPermissionJsonObject(permission);
-            if (json == null) {
-                continue;
-            }
-            if (parentJson == null && oConvertUtils.isEmpty(tempPid)) {
-                jsonArray.add(json);
-                if (!permission.isLeaf()) {
-                    getPermissionJsonArray(jsonArray, metaList, json);
-                }
-            } else if (parentJson != null && oConvertUtils.isNotEmpty(tempPid) && tempPid.equals(parentJson.getString("id"))) {
-                // 类型( 0:一级菜单 1:子菜单 2:按钮 )
-                if (permission.getType().equals(CommonConstant.MENU_TYPE_2)) {
-                    JSONObject metaJson = parentJson.getJSONObject("meta");
-                    if (metaJson.containsKey("permissionList")) {
-                        metaJson.getJSONArray("permissionList").add(json);
-                    } else {
-                        JSONArray permissionList = new JSONArray();
-                        permissionList.add(json);
-                        metaJson.put("permissionList", permissionList);
-                    }
-                    // 类型( 0:一级菜单 1:子菜单 2:按钮 )
-                } else if (permission.getType().equals(CommonConstant.MENU_TYPE_1) || permission.getType().equals(CommonConstant.MENU_TYPE_0)) {
-                    if (parentJson.containsKey("children")) {
-                        parentJson.getJSONArray("children").add(json);
-                    } else {
-                        JSONArray children = new JSONArray();
-                        children.add(json);
-                        parentJson.put("children", children);
-                    }
-
-                    if (!permission.isLeaf()) {
-                        getPermissionJsonArray(jsonArray, metaList, json);
-                    }
-                }
-            }
-
-        }
-    }
-
-    /**
-     * 根据菜单配置生成路由json
-     *
-     * @param permission
-     * @return
-     */
-    private JSONObject getPermissionJsonObject(SysDataPermission permission) {
-        JSONObject json = new JSONObject();
-        // 类型(0:一级菜单 1:子菜单 2:按钮)
-        if (permission.getType().equals(CommonConstant.MENU_TYPE_2)) {
-            // json.put("action", permission.getPerms());
-            // json.put("type", permission.getPermsType());
-            // json.put("describe", permission.getName());
-            return null;
-        } else if (permission.getType().equals(CommonConstant.MENU_TYPE_0) || permission.getType().equals(CommonConstant.MENU_TYPE_1)) {
-            json.put("id", permission.getId());
-        }
-
-        return json;
-    }
-
-    /**
-     * 判断是否外网URL 例如: http://localhost:8080/jeecg-boot/swagger-ui.html#/ 支持特殊格式: {{
-     * window._CONFIG['domianURL'] }}/druid/ {{ JS代码片段 }},前台解析会自动执行JS代码片段
-     *
-     * @return
-     */
-    private boolean isWWWHttpUrl(String url) {
-        if (url != null && (url.startsWith("http://") || url.startsWith("https://") || url.startsWith("{{"))) {
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * 通过URL生成路由name(去掉URL前缀斜杠,替换内容中的斜杠‘/’为-) 举例: URL = /isystem/role RouteName =
-     * isystem-role
-     *
-     * @return
-     */
-    private String urlToRouteName(String url) {
-        if (oConvertUtils.isNotEmpty(url)) {
-            if (url.startsWith("/")) {
-                url = url.substring(1);
-            }
-            url = url.replace("/", "-");
-
-            // 特殊标记
-            url = url.replace(":", "@");
-            return url;
-        } else {
-            return null;
-        }
-    }
+        List<SysDataPermission> parentList = metaList.stream()
+                .filter(permission -> Objects.isNull(permission.getParentId()))
+                .collect(Collectors.toList());
+        parentList.forEach(parentPermission -> {
+            List<SysDataPermission> childPermissionList = metaList.stream().filter(permission -> ObjectUtil.isNotNull(permission.getParentId()) && permission.getParentId().equals(parentPermission.getId()))
+                    .collect(Collectors.toList());
 
-    /**
-     * 根据菜单id来获取其对应的权限数据
-     *
-     * @param sysPermissionDataRule
-     * @return
-     */
-    @RequestMapping(value = "/getPermRuleListByPermId", method = RequestMethod.GET)
-    public Result<List<SysPermissionDataRule>> getPermRuleListByPermId(SysPermissionDataRule sysPermissionDataRule) {
-        List<SysPermissionDataRule> permRuleList = sysPermissionDataRuleService.getPermRuleListByPermId(sysPermissionDataRule.getPermissionId().toString());
-        Result<List<SysPermissionDataRule>> result = new Result<>();
-        result.setSuccess(true);
-        result.setResult(permRuleList);
-        return result;
-    }
-
-    /**
-     * 添加菜单权限数据
-     *
-     * @param sysPermissionDataRule
-     * @return
-     */
-    // @RequiresRoles({ "admin" })
-    @RequestMapping(value = "/addPermissionRule", method = RequestMethod.POST)
-    public Result<SysPermissionDataRule> addPermissionRule(@RequestBody SysPermissionDataRule sysPermissionDataRule) {
-        Result<SysPermissionDataRule> result = new Result<SysPermissionDataRule>();
-        try {
-            sysPermissionDataRule.setCreateTime(new Date());
-            sysPermissionDataRuleService.savePermissionDataRule(sysPermissionDataRule);
-            result.success("添加成功!");
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
-            result.error500("操作失败");
-        }
-        return result;
-    }
-
-    // @RequiresRoles({ "admin" })
-    @RequestMapping(value = "/editPermissionRule", method = {RequestMethod.PUT, RequestMethod.POST})
-    public Result<SysPermissionDataRule> editPermissionRule(@RequestBody SysPermissionDataRule sysPermissionDataRule) {
-        Result<SysPermissionDataRule> result = new Result<SysPermissionDataRule>();
-        try {
-            sysPermissionDataRuleService.saveOrUpdate(sysPermissionDataRule);
-            result.success("更新成功!");
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
-            result.error500("操作失败");
-        }
-        return result;
-    }
-
-    /**
-     * 删除菜单权限数据
-     *
-     * @param id
-     * @return
-     */
-    // @RequiresRoles({ "admin" })
-    @RequestMapping(value = "/deletePermissionRule", method = RequestMethod.DELETE)
-    public Result<SysPermissionDataRule> deletePermissionRule(@RequestParam(name = "id", required = true) String id) {
-        Result<SysPermissionDataRule> result = new Result<SysPermissionDataRule>();
-        try {
-            sysPermissionDataRuleService.deletePermissionDataRule(id);
-            result.success("删除成功!");
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
-            result.error500("操作失败");
-        }
-        return result;
-    }
-
-    /**
-     * 查询菜单权限数据
-     *
-     * @param sysPermissionDataRule
-     * @return
-     */
-    @RequestMapping(value = "/queryPermissionRule", method = RequestMethod.GET)
-    public Result<List<SysPermissionDataRule>> queryPermissionRule(SysPermissionDataRule sysPermissionDataRule) {
-        Result<List<SysPermissionDataRule>> result = new Result<>();
-        try {
-            List<SysPermissionDataRule> permRuleList = sysPermissionDataRuleService.queryPermissionRule(sysPermissionDataRule);
-            result.setResult(permRuleList);
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
-            result.error500("操作失败");
-        }
-        return result;
-    }
-
-    /**
-     * 部门权限表
-     *
-     * @param departId
-     * @return
-     */
-    @RequestMapping(value = "/queryDepartPermission", method = RequestMethod.GET)
-    public Result<List<String>> queryDepartPermission(@RequestParam(name = "departId", required = true) String departId) {
-        Result<List<String>> result = new Result<>();
-        try {
-            List<SysDepartPermission> list =
-                    sysDepartPermissionService.list(new QueryWrapper<SysDepartPermission>().lambda().eq(SysDepartPermission::getDepartId, departId));
-            result.setResult(list.stream().map(SysDepartPermission -> String.valueOf(SysDepartPermission.getPermissionId())).collect(Collectors.toList()));
-            result.setSuccess(true);
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
-        }
-        return result;
-    }
-
-    /**
-     * 保存部门授权
-     *
-     * @return
-     */
-    @RequestMapping(value = "/saveDepartPermission", method = RequestMethod.POST)
-    // @RequiresRoles({ "admin" })
-    public Result<String> saveDepartPermission(@RequestBody JSONObject json) {
-        long start = System.currentTimeMillis();
-        Result<String> result = new Result<>();
-        try {
-            String departId = json.getString("departId");
-            String permissionIds = json.getString("permissionIds");
-            String lastPermissionIds = json.getString("lastpermissionIds");
-            this.sysDepartPermissionService.saveDepartPermission(departId, permissionIds, lastPermissionIds);
-            result.success("保存成功!");
-            log.info("======部门授权成功=====耗时:" + (System.currentTimeMillis() - start) + "毫秒");
-        } catch (Exception e) {
-            result.error500("授权失败!");
-            log.error(e.getMessage(), e);
-        }
-        return result;
+            JSONObject json = new JSONObject();
+            List<Map<String, Object>> params = new ArrayList<>();
+            childPermissionList.forEach(childPermission -> {
+                Map<String, Object> map = new HashMap<>();
+
+                String[] split = childPermission.getPerms().split(StrUtil.COLON);
+                String perms = split.length == 2 ? split[1] : childPermission.getPerms();
+                map.put("name", childPermission.getName());
+                map.put("perms", perms);
+                map.put("type", childPermission.getType());
+                map.put("status", childPermission.getStatus());
+                map.put("describe", childPermission.getDescription());
+                params.add(map);
+            });
+
+            json.put(parentPermission.getPerms(), params);
+            jsonArray.add(json);
+        });
     }
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/entity/SysDataPermission.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/entity/SysDataPermission.java
index d1bd6a2..cf64ccb 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/entity/SysDataPermission.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/entity/SysDataPermission.java
@@ -3,6 +3,7 @@ package org.jeecg.modules.system.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonInclude;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/mapper/xml/SysDataPermissionMapper.xml b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/mapper/xml/SysDataPermissionMapper.xml
index ed1dc0f..9165bc6 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/mapper/xml/SysDataPermissionMapper.xml
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/mapper/xml/SysDataPermissionMapper.xml
@@ -27,7 +27,7 @@
         ,name
         ,icon
         ,is_leaf
-        FROM sys_permission
+        FROM sys_data_permission
         WHERE 1=1
         <choose>
             <when test="parentId != null and parentId != ''">
@@ -43,21 +43,19 @@
     <select id="queryByUser" parameterType="Object" resultMap="SysDataPermission">
         SELECT * FROM (
         SELECT p.*
-        FROM sys_permission p
+        FROM sys_data_permission p
         WHERE (exists(
-        select a.id from sys_role_permission a
+        select a.id from sys_role_data_permission a
         join sys_role b on a.role_id = b.id
         join sys_user_role c on c.role_id = b.id
         join sys_user d on d.id = c.user_id
         where p.id = a.permission_id AND d.username = #{username,jdbcType=VARCHAR}
-        )
-        or (p.url like '%:code' and p.url like '/online%' and p.hidden = 1)
-        or p.url = '/online')
+        ))
         and p.del_flag = 0
         <!--update begin Author:lvdandan  Date:20200213 for:加入部门权限 -->
         UNION
         SELECT p.*
-        FROM sys_permission p
+        FROM sys_data_permission p
         WHERE exists(
         select a.id from sys_depart_role_permission a
         join sys_depart_role b on a.role_id = b.id
@@ -70,13 +68,12 @@
         ) h order by h.sort_no ASC
     </select>
 
-
     <!-- 根据用户账号查询菜单权限 -->
     <select id="queryCountByUsername" parameterType="Object" resultType="int">
         select sum(cnt) from (
         select count(*) as cnt
-        from sys_role_permission a
-        join sys_permission b on a.permission_id = b.id
+        from sys_role_data_permission a
+        join sys_data_permission b on a.permission_id = b.id
         join sys_role c on a.role_id = c.id
         join sys_user_role d on d.role_id = c.id
         join sys_user e on d.user_id = e.id
@@ -84,12 +81,9 @@
         <if test="permission.id !=null and permission.id != ''">
             and b.id = #{permission.id}
         </if>
-        <if test="permission.url !=null and permission.url != ''">
-            and b.url = #{permission.url}
-        </if>
         union all
         select count(*) as cnt
-        from sys_permission z
+        from sys_data_permission z
         join sys_depart_role_permission y on z.id = y.permission_id
         join sys_depart_role x on y.role_id = x.id
         join sys_depart_role_user w on w.drole_id = x.id
@@ -98,11 +92,6 @@
         <if test="permission.id !=null and permission.id != ''">
             and z.id = #{permission.id}
         </if>
-        <if test="permission.url !=null and permission.url != ''">
-            and z.url = #{permission.url}
-        </if>
         ) temp
     </select>
-
-
 </mapper>
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/service/impl/SysDataPermissionServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/service/impl/SysDataPermissionServiceImpl.java
index 61de602..fc2486d 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/service/impl/SysDataPermissionServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/service/impl/SysDataPermissionServiceImpl.java
@@ -214,6 +214,7 @@ public class SysDataPermissionServiceImpl extends ServiceImpl<SysDataPermissionM
     }
 
     @Override
+    @Cacheable(value = "sys:cache:userDataPermission", key = "#username", unless = "#result == null ")
     public List<SysDataPermission> queryByUser(String username) {
         return this.sysDataPermissionMapper.queryByUser(username);
     }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/service/impl/SysRoleDataPermissionServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/service/impl/SysRoleDataPermissionServiceImpl.java
index 40e9367..fbb03fe 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/service/impl/SysRoleDataPermissionServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/service/impl/SysRoleDataPermissionServiceImpl.java
@@ -9,6 +9,7 @@ import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.system.entity.SysRoleDataPermission;
 import org.jeecg.modules.system.mapper.SysRoleDataPermissionMapper;
 import org.jeecg.modules.system.service.ISysRoleDataPermissionService;
+import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletRequest;
@@ -18,8 +19,9 @@ import java.util.*;
  * <p>
  * 角色数据权限表 服务实现类
  * </p>
+ *
  * @Author scott
- * @since  2018-12-21
+ * @since 2018-12-21
  */
 @Service
 public class SysRoleDataPermissionServiceImpl extends ServiceImpl<SysRoleDataPermissionMapper, SysRoleDataPermission> implements ISysRoleDataPermissionService {
@@ -51,6 +53,7 @@ public class SysRoleDataPermissionServiceImpl extends ServiceImpl<SysRoleDataPer
     }
 
     @Override
+    @CacheEvict(value = "sys:cache:userDataPermission", allEntries = true)
     public void saveRoleDataPermission(String roleId, String permissionIds, String lastPermissionIds) {
         String ip = "";
         try {
@@ -79,15 +82,16 @@ public class SysRoleDataPermissionServiceImpl extends ServiceImpl<SysRoleDataPer
         if (delete != null && !delete.isEmpty()) {
             for (String permissionId : delete) {
                 this.remove(
-                    new QueryWrapper<SysRoleDataPermission>().lambda().eq(SysRoleDataPermission::getRoleId, roleId).eq(SysRoleDataPermission::getPermissionId, permissionId));
+                        new QueryWrapper<SysRoleDataPermission>().lambda().eq(SysRoleDataPermission::getRoleId, roleId).eq(SysRoleDataPermission::getPermissionId, permissionId));
             }
         }
     }
 
     /**
      * 从diff中找出main中没有的元素
-     * @param  main
-     * @param  diff
+     *
+     * @param main
+     * @param diff
      * @return
      */
     private List<String> getDiff(String main, String diff) {
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/util/DataPermissionDataUtil.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/system/util/DataPermissionDataUtil.java
deleted file mode 100644
index 03ce4d1..0000000
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/system/util/DataPermissionDataUtil.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package org.jeecg.modules.system.util;
-
-import org.jeecg.common.util.oConvertUtils;
-import org.jeecg.modules.system.entity.SysDataPermission;
-
-import java.util.List;
-
-/**
- * @Author: scott
- * @Date:   2019-04-03
- */
-public class DataPermissionDataUtil {
-
-    /**
-     * 智能处理错误数据,简化用户失误操作
-     * @param permission
-     */
-    public static SysDataPermission intelligentProcessData(SysDataPermission permission) {
-        if (permission == null) {
-            return null;
-        }
-        return permission;
-    }
-
-    /**
-     * 如果没有index页面 需要new 一个放到list中
-     * @param metaList
-     */
-    public static void addIndexPage(List<SysDataPermission> metaList) {
-        boolean hasIndexMenu = false;
-        for (SysDataPermission sysDataPermission : metaList) {
-            if ("首页".equals(sysDataPermission.getName())) {
-                hasIndexMenu = true;
-                break;
-            }
-        }
-        if (!hasIndexMenu) {
-            metaList.add(0, new SysDataPermission(true));
-        }
-    }
-
-    /**
-     * 判断是否授权首页
-     * @param  metaList
-     * @return
-     */
-    public static boolean hasIndexPage(List<SysDataPermission> metaList) {
-        boolean hasIndexMenu = false;
-        for (SysDataPermission sysDataPermission : metaList) {
-            if ("首页".equals(sysDataPermission.getName())) {
-                hasIndexMenu = true;
-                break;
-            }
-        }
-        return hasIndexMenu;
-    }
-
-}