소스 검색

修改菜单和角色使用字符标识

xusl 2 년 전
부모
커밋
ceaa3d2013

+ 37 - 0
backend/src/main/java/com/jiayue/ssi/constant/PermissionCharacter.java

@@ -0,0 +1,37 @@
+package com.jiayue.ssi.constant;
+/**
+* 权限字符
+*
+* @author xsl
+* @since 2023/06/02
+*/
+public class PermissionCharacter {
+    /**
+     * 系统管理
+     */
+    public static final String P_XTGL = "XTGL";
+    /**
+     * 审计管理
+     */
+    public static final String P_SJGL = "SJGL";
+    /**
+     * 审计业务
+     */
+    public static final String P_SJYW = "SJYW";
+    /**
+     * 审核管理
+     */
+    public static final String P_SHGL = "SHGL";
+    /**
+     * 业务管理
+     */
+    public static final String P_YWGL = "YWGL";
+    /**
+     * 业务配置
+     */
+    public static final String P_YWPZ = "YWPZ";
+    /**
+     * 业务操作
+     */
+    public static final String P_YWCZ = "YWCZ";
+}

+ 15 - 3
backend/src/main/java/com/jiayue/ssi/controller/SysMenuController.java

@@ -12,7 +12,9 @@ import com.jiayue.ssi.backenum.BusinessType;
 import com.jiayue.ssi.constant.CustomException;
 import com.jiayue.ssi.constant.UserConstants;
 import com.jiayue.ssi.entity.SysMenu;
+import com.jiayue.ssi.entity.SysRole;
 import com.jiayue.ssi.service.SysMenuService;
+import com.jiayue.ssi.service.SysRoleService;
 import com.jiayue.ssi.util.RyStringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -35,6 +37,8 @@ public class SysMenuController {
 
     @Autowired
     private SysMenuService sysMenuService;
+    @Autowired
+    private SysRoleService sysRoleService;
 
     /**
      * 获取菜单列表
@@ -248,10 +252,13 @@ public class SysMenuController {
      */
     @GetMapping("/treeselect")
     @PreventReplay
-    public ResponseVO treeselect(SysMenu menu) throws CustomException {
+    public ResponseVO treeselect(String pc) throws CustomException {
         try {
+            SysMenu menu = new SysMenu();
+//            menu.setPc(pc);
+            // 查询出所有菜单
             List<SysMenu> menus = sysMenuService.selectMenuList(menu, SecurityContextUtil.getSysUser().getId());
-            return ResponseVO.success(sysMenuService.buildMenuTreeSelect(menus));
+            return ResponseVO.success(sysMenuService.buildMenuTreeSelect(menus,pc));
         } catch (Exception e) {
             throw new CustomException("获取菜单下拉树列表异常", e);
         }
@@ -276,10 +283,15 @@ public class SysMenuController {
             else{
                 return ResponseVO.fail("角色id不能为空!");
             }
+            SysRole sysRole = sysRoleService.selectRoleById(roleid);
+            if (sysRole==null){
+                return ResponseVO.fail("找不到角色不能查找角色关联树!");
+            }
+
             List<SysMenu> menus = sysMenuService.selectMenuList(SecurityContextUtil.getSysUser().getId());
             Map<String, Object> map = new HashMap<>();
             map.put("checkedKeys", sysMenuService.selectMenuListByRoleId(roleid));
-            map.put("menus", sysMenuService.buildMenuTreeSelect(menus));
+            map.put("menus", sysMenuService.buildMenuTreeSelect(menus,sysRole.getRoleKey()));
             return ResponseVO.success(map);
         } catch (Exception e) {
             throw new CustomException("获取对应角色菜单列表树异常", e);

+ 15 - 2
backend/src/main/java/com/jiayue/ssi/controller/SysRoleController.java

@@ -126,6 +126,8 @@ public class SysRoleController {
                 return ResponseVO.fail("角色权限不能为空!");
             } else if (role.getRoleKey().length() > 50) {
                 return ResponseVO.fail("角色权限不能超过50个字符!");
+            } else if ("XTGL".equals(role.getRoleKey()) || "SJGL".equals(role.getRoleKey())) {
+                return ResponseVO.fail("内置角色不能再次添加!");
             }
             if (role.getRoleSort() == null) {
                 return ResponseVO.fail("角色排序不能为空!");
@@ -166,7 +168,7 @@ public class SysRoleController {
         try {
             SysRole existRole = roleService.getById(role.getRoleId());
             if (existRole == null) {
-                return ResponseVO.fail("非法访问不能修改!");
+                return ResponseVO.fail("没有角色,不能修改!");
             }
             if (StringUtils.isEmpty(role.getRoleName())) {
                 return ResponseVO.fail("角色名称不能为空!");
@@ -177,7 +179,10 @@ public class SysRoleController {
                 return ResponseVO.fail("角色权限不能为空!");
             } else if (role.getRoleKey().length() > 50) {
                 return ResponseVO.fail("角色权限不能超过50个字符!");
+            } else if ("XTGL".equals(role.getRoleKey()) || "SJGL".equals(role.getRoleKey())) {
+                return ResponseVO.fail("内置角色不能修改!");
             }
+
             if (role.getRoleSort() == null) {
                 return ResponseVO.fail("角色排序不能为空!");
             }
@@ -244,8 +249,16 @@ public class SysRoleController {
             if (StringUtils.isEmpty(roleId)) {
                 return ResponseVO.fail("id不能为空!");
             }
+            SysRole existRole = roleService.getById(Long.parseLong(roleId));
+            if (existRole == null) {
+                return ResponseVO.fail("没有角色,不能修改!");
+            }
+            else if ("XTGL".equals(existRole.getRoleKey()) || "SJGL".equals(existRole.getRoleKey())){
+                return ResponseVO.fail("内置角色不能删除!");
+            }
+
             if (roleService.countUserRoleByRoleId(Long.parseLong(roleId))>0) {
-                return ResponseVO.fail("菜单已分配,不允许删除");
+                return ResponseVO.fail("角色已被用户使用,不允许删除");
             }
             int bo = roleService.deleteRoleById(Long.parseLong(roleId));
             if (bo > 0) {

+ 1 - 1
backend/src/main/java/com/jiayue/ssi/controller/SysUserController.java

@@ -117,7 +117,7 @@ public class SysUserController {
             }
 
             SysRole sysRole = sysRoleService.selectRoleListByUserId();
-            if (!"xtgly".equals(sysRole.getRoleKey())){
+            if ("YWGL".equals(sysRole.getRoleKey())){
                 // 业务管理员员
                 wrapper.eq("usertype", "1");
             }

+ 11 - 0
backend/src/main/java/com/jiayue/ssi/entity/SysMenu.java

@@ -46,6 +46,17 @@ public class SysMenu extends BaseEntity {
     /** 组件路径 */
     private String component;
 
+    public String getPc() {
+        return pc;
+    }
+
+    public void setPc(String pc) {
+        this.pc = pc;
+    }
+
+    /** 字符标识 */
+    private String pc;
+
     /** 路由参数 */
     private String query;
 

+ 2 - 2
backend/src/main/java/com/jiayue/ssi/service/SysMenuService.java

@@ -84,14 +84,14 @@ public interface SysMenuService  extends IService<SysMenu> {
      * @param menus 菜单列表
      * @return 下拉树结构列表
      */
-    List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus);
+    List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus,String pc);
     /**
      * 构建前端所需要树结构
      *
      * @param menus 菜单列表
      * @return 树结构列表
      */
-    List<SysMenu> buildMenuTree(List<SysMenu> menus);
+    List<SysMenu> buildMenuTree(List<SysMenu> menus,String pc);
     /**
      * 根据用户查询系统菜单列表
      *

+ 112 - 12
backend/src/main/java/com/jiayue/ssi/service/impl/SysMenuServiceImpl.java

@@ -3,6 +3,8 @@ package com.jiayue.ssi.service.impl;
 import java.util.*;
 import java.util.stream.Collectors;
 
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jiayue.ssi.constant.Constants;
 import com.jiayue.ssi.constant.UserConstants;
@@ -227,6 +229,37 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
     }
 
     /**
+     * 角色新增页面获取菜单递归列表
+     *
+     * @param list 分类表
+     * @param t 子节点
+     */
+    private void recursionFnForRole(List<SysMenu> list, SysMenu t) {
+        // 得到子节点列表
+        List<SysMenu> childList = getChildListForRole(list, t);
+        t.setChildren(childList);
+        for (SysMenu tChild : childList) {
+            if (hasChild(list, tChild)) {
+                recursionFnForRole(list, tChild);
+            }
+        }
+    }
+    /**
+     * 角色新增页面得到子节点列表
+     */
+    private List<SysMenu> getChildListForRole(List<SysMenu> list, SysMenu t) {
+        List<SysMenu> tlist = new ArrayList<SysMenu>();
+        Iterator<SysMenu> it = list.iterator();
+        while (it.hasNext()) {
+            SysMenu n = (SysMenu)it.next();
+            if (n.getParentId().longValue() == t.getMenuId().longValue()) {
+                tlist.add(n);
+            }
+        }
+        return tlist;
+    }
+
+    /**
      * 递归列表
      *
      * @param list 分类表
@@ -355,12 +388,13 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
      * 构建前端所需要下拉树结构
      *
      * @param menus 菜单列表
+     * @param pc 字符标识
      * @return 下拉树结构列表
      */
     @Override
-    public List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus)
+    public List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus,String pc)
     {
-        List<SysMenu> menuTrees = buildMenuTree(menus);
+        List<SysMenu> menuTrees = buildMenuTree(menus,pc);
         return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList());
     }
 
@@ -371,26 +405,92 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
      * @return 树结构列表
      */
     @Override
-    public List<SysMenu> buildMenuTree(List<SysMenu> menus)
+    public List<SysMenu> buildMenuTree(List<SysMenu> menus,String pc)
     {
-        List<SysMenu> returnList = new ArrayList<SysMenu>();
-        List<Long> tempList = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList());
-        for (Iterator<SysMenu> iterator = menus.iterator(); iterator.hasNext();)
+//        List<SysMenu> returnList = new ArrayList<SysMenu>();
+//        List<Long> tempList = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList());
+//        for (Iterator<SysMenu> iterator = menus.iterator(); iterator.hasNext();)
+//        {
+//            SysMenu menu = (SysMenu) iterator.next();
+//            // 如果是顶级节点, 遍历该父节点的所有子节点
+//            if (!tempList.contains(menu.getParentId()))
+//            {
+//                recursionFn(menus, menu);
+//                returnList.add(menu);
+//            }
+//        }
+//        if (returnList.isEmpty())
+//        {
+//            returnList = menus;
+//        }
+
+
+        List<SysMenu> initList = new ArrayList<SysMenu>();
+        Set<SysMenu> set = new HashSet<>();
+        // 找出所有的字符标识子节点
+        List<SysMenu> childNodeList = new ArrayList<>();
+
+        for (SysMenu sysMenu:menus){
+            if (sysMenu.getPc()!=null){
+                if (sysMenu.getPc().indexOf(pc)>-1){
+                    recursionFn(menus, sysMenu);
+                    childNodeList.add(sysMenu);
+                }
+            }
+        }
+        // 加入到返回集合中
+        initList.addAll(childNodeList);
+        for (SysMenu sysMenu:childNodeList){
+            set.addAll(getDeptUpList(menus,sysMenu));
+        }
+
+        initList.addAll(set);
+
+        List<SysMenu> filterList = new ArrayList<SysMenu>();
+        List<Long> tempList1 = initList.stream().map(SysMenu::getMenuId).collect(Collectors.toList());
+        for (Iterator<SysMenu> iterator = initList.iterator(); iterator.hasNext();)
         {
             SysMenu menu = (SysMenu) iterator.next();
             // 如果是顶级节点, 遍历该父节点的所有子节点
-            if (!tempList.contains(menu.getParentId()))
+            if (!tempList1.contains(menu.getParentId()))
             {
-                recursionFn(menus, menu);
-                returnList.add(menu);
+                recursionFn(initList, menu);
+                filterList.add(menu);
             }
         }
-        if (returnList.isEmpty())
+        if (filterList.isEmpty())
         {
-            returnList = menus;
+            filterList = initList;
         }
-        return returnList;
+
+        filterList.sort(Comparator.comparing(SysMenu::getOrderNum));
+
+        return filterList;
     }
+
+    /**
+     * 向上查询所有上级
+     * @param deptAll 所有集合
+     * @param leafNodeDept 叶子节点
+     */
+    public static Set<SysMenu> getDeptUpList(List<SysMenu> deptAll,SysMenu leafNodeDept){
+        if(ObjectUtil.isNotEmpty(leafNodeDept)){
+            Set<SysMenu> set = new HashSet<>();
+            Long parentId = leafNodeDept.getParentId();
+            List<SysMenu> parentDepts = deptAll.stream().filter(item -> item.getMenuId().equals(parentId)).collect(Collectors.toList());
+            if(CollectionUtil.isNotEmpty(parentDepts)){
+                SysMenu parentDept = parentDepts.get(0);
+                set.add(parentDept);
+                Set<SysMenu> deptUpTree = getDeptUpList(deptAll, parentDept);
+                if(deptUpTree!=null){
+                    set.addAll(deptUpTree);
+                }
+                return set;
+            }
+        }
+        return null;
+    }
+
     /**
      * 根据用户查询系统菜单列表
      *

+ 2 - 2
backend/src/main/resources/application.yml

@@ -52,9 +52,9 @@ spring:
           ssl:
             #本地测试,先放开ssl
             enable: true
-            required: true
+            required: false
           #开启debug模式,这样邮件发送过程的日志会在控制台打印出来,方便排查错误
-        debug: true
+        debug: false
 
 #mybatis plus
 #mybatis-plus:

+ 8 - 1
backend/src/main/resources/mapper/system/SysMenuMapper.xml

@@ -12,6 +12,7 @@
 		<result property="orderNum"       column="order_num"      />
 		<result property="path"           column="path"           />
 		<result property="component"      column="component"      />
+		<result property="pc"          column="pc"          />
 		<result property="query"          column="query"          />
 		<result property="isFrame"        column="is_frame"       />
 		<result property="isCache"        column="is_cache"       />
@@ -29,7 +30,7 @@
 	</resultMap>
 
 	<sql id="selectMenuVo">
-        select menu_id, menu_name, parent_id, order_num, path, component, `query`, is_frame, is_cache, menu_type, visible, status, ifnull(perms,'') as perms, icon, create_time
+        select menu_id, menu_name, parent_id, order_num, path, component,pc, `query`, is_frame, is_cache, menu_type, visible, status, ifnull(perms,'') as perms, icon, create_time
 		from sys_menu
     </sql>
 
@@ -46,6 +47,9 @@
 			<if test="status != null and status != ''">
 				AND status = #{status}
 			</if>
+			<if test="pc != null and pc != ''">
+				AND pc = #{pc}
+			</if>
 		</where>
 		order by parent_id, order_num
 	</select>
@@ -145,6 +149,7 @@
 			<if test="orderNum != null">order_num = #{orderNum},</if>
 			<if test="path != null and path != ''">path = #{path},</if>
 			<if test="component != null">component = #{component},</if>
+			<if test="pc != null">pc = #{pc},</if>
 			<if test="query != null">`query` = #{query},</if>
 			<if test="isFrame != null and isFrame != ''">is_frame = #{isFrame},</if>
 			<if test="isCache != null and isCache != ''">is_cache = #{isCache},</if>
@@ -168,6 +173,7 @@
 		<if test="orderNum != null">order_num,</if>
 		<if test="path != null and path != ''">path,</if>
 		<if test="component != null and component != ''">component,</if>
+		<if test="pc != null and pc != ''">pc,</if>
 		<if test="query != null and query != ''">`query`,</if>
 		<if test="isFrame != null and isFrame != ''">is_frame,</if>
 		<if test="isCache != null and isCache != ''">is_cache,</if>
@@ -187,6 +193,7 @@
 		<if test="orderNum != null">#{orderNum},</if>
 		<if test="path != null and path != ''">#{path},</if>
 		<if test="component != null and component != ''">#{component},</if>
+		<if test="pc != null and pc != ''">#{pc},</if>
 		<if test="query != null and query != ''">#{query},</if>
 		<if test="isFrame != null and isFrame != ''">#{isFrame},</if>
 		<if test="isCache != null and isCache != ''">#{isCache},</if>

+ 68 - 36
ui/src/views/sysManager/roleManager/index.vue

@@ -12,14 +12,17 @@
         />
       </el-form-item>
       <el-form-item label="字符标识" prop="roleKey">
-        <el-input
-          maxlength="50"
+        <el-select
           v-model="queryParams.roleKey"
-          placeholder="请输入字符标识"
-          clearable
-          style="width: 240px"
-          @keyup.enter.native="handleQuery"
-        />
+          placeholder="请选择字符标识"
+        >
+          <el-option
+            v-for="item in pcOptions"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value">
+          </el-option>
+        </el-select>
       </el-form-item>
       <el-form-item label="状态" prop="status">
         <el-select
@@ -120,7 +123,19 @@
           <el-input v-model="form.roleName" maxlength="15" placeholder="请输入角色名称" :disabled="edit"/>
         </el-form-item>
         <el-form-item label="字符标识" prop="roleKey">
-          <el-input v-model="form.roleKey" maxlength="50" placeholder="请输入字符标识" :disabled="edit"/>
+          <el-select
+            @change="changepc"
+            v-model="form.roleKey"
+            placeholder="请选择字符标识"
+            :disabled="edit"
+          >
+            <el-option
+              v-for="item in pcOptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value">
+            </el-option>
+          </el-select>
         </el-form-item>
         <el-form-item label="角色顺序" prop="roleSort">
           <el-input-number v-model="form.roleSort" controls-position="right" :min="0" :disabled="edit"/>
@@ -169,7 +184,7 @@
             ref="menu"
             node-key="id"
             :check-strictly="!form.menuCheckStrictly"
-            empty-text="加载中,请稍候"
+            empty-text="无数据,请选择字符标识!"
             :props="defaultProps"
           ></el-tree>
         </el-form-item>
@@ -273,6 +288,15 @@ export default {
       menuNodeAll: false,
       deptExpand: true,
       deptNodeAll: false,
+      pcOptions: [
+        {value: 'XTGL', label: 'XTGL'},
+        {value: 'SJGL', label: 'SJGL'},
+        {value: 'SHGL', label: 'SHGL'},
+        {value: 'YWGL', label: 'YWGL'},
+        {value: 'SJYW', label: 'SJYW'},
+        {value: 'YWPZ', label: 'YWPZ'},
+        {value: 'YWCZ', label: 'YWCZ'}
+      ],
       // 日期范围
       dateRange: [],
       // 数据范围选项
@@ -332,6 +356,9 @@ export default {
     this.getList();
   },
   methods: {
+    changepc(value){
+      this.getMenuTreeselect(value);
+    },
     // 列表状态格式化
     typeFormat({cellValue}) {
       let belongTo = '未知的类型'
@@ -396,7 +423,7 @@ export default {
       return belongTo
     },
     /** 查询菜单树结构 */
-    async getMenuTreeselect() {
+    async getMenuTreeselect(pc) {
       let sysTime
       let lk
       await this.$axios.get('/sysPolicyController/getLicenseKey').then((res) => {
@@ -405,6 +432,7 @@ export default {
       }).catch((error) => {
       })
       var searchParams = {
+        pc: pc,
         sysTime: sysTime,
         lk: lk
       }
@@ -432,7 +460,6 @@ export default {
       }
       this.$axios.get('/sysMenuController/roleMenuTreeselect',
         {params: param}).then((res) => {
-        console.log(res.data)
         this.menuOptions = res.data.menus;
         return res.data
       }).catch((error) => {
@@ -453,11 +480,13 @@ export default {
     },
     // 取消按钮
     cancel() {
+      this.menuOptions=[];
       this.open = false;
       this.reset();
     },
     // 取消按钮(数据权限)
     cancelDataScope() {
+      this.deptOptions=[];
       this.openDataScope = false;
       this.reset();
     },
@@ -547,7 +576,7 @@ export default {
     /** 新增按钮操作 */
     handleAdd: debounce(function () {
       this.reset();
-      this.getMenuTreeselect();
+      // this.getMenuTreeselect();
       this.open = true;
       this.title = "添加角色";
       this.edit = false;
@@ -564,11 +593,31 @@ export default {
         return
       }
 
-      if (_selectData.roleKey == 'xtgly' || _selectData.roleKey == 'sjgly') {
+      if (_selectData.roleKey == 'XTGL' || _selectData.roleKey == 'SJGL') {
         this.edit=true;
       }
       const roleId = _selectData.roleId
 
+      let sysTime
+      let lk
+      await this.$axios.get('/sysPolicyController/getLicenseKey').then((res) => {
+        sysTime = res.data.sysTime
+        lk = res.data.lk
+      }).catch((error) => {
+      })
+
+      var param = {
+        roleId: roleId,
+        sysTime: sysTime,
+        lk: lk
+      }
+      await this.$axios.get('/sysRoleController/getInfo',
+        {params: param}).then((res2) => {
+        this.form = res2.data;
+        this.open = true;
+      })
+      this.title = "修改角色";
+
       let sysTime1
       let lk1
       await this.$axios.get('/sysPolicyController/getLicenseKey').then((res) => {
@@ -586,32 +635,13 @@ export default {
         {params: param1}).then((res) => {
         this.menuOptions = res.data.menus;
         let checkedKeys = res.data.checkedKeys
+        console.log(checkedKeys)
         checkedKeys.forEach((v) => {
           this.$nextTick(() => {
             this.$refs.menu.setChecked(v, true, false);
           })
         })
       })
-
-      let sysTime
-      let lk
-      await this.$axios.get('/sysPolicyController/getLicenseKey').then((res) => {
-        sysTime = res.data.sysTime
-        lk = res.data.lk
-      }).catch((error) => {
-      })
-
-      var param = {
-        roleId: roleId,
-        sysTime: sysTime,
-        lk: lk
-      }
-      await this.$axios.get('/sysRoleController/getInfo',
-        {params: param}).then((res2) => {
-        this.form = res2.data;
-        this.open = true;
-      })
-      this.title = "修改角色";
     }, 1000),
     /** 选择角色权限范围触发 */
     dataScopeSelectChange(value) {
@@ -628,12 +658,12 @@ export default {
     submitForm: debounce(function () {
       this.$refs["form"].validate(async valid => {
         if (valid) {
-          if (this.form.roleKey.trim() == 'xtgly' || this.form.roleKey.trim() == 'sjgly') {
+          if (this.form.roleKey.trim() == 'XTGL' || this.form.roleKey.trim() == 'SJGL') {
             if (this.form.builtIn != '0') {
               // 不是内置用户则拦截
               this.$message({
                 type: 'warning',
-                message: '字符标识不能是xtgly或sjgly!'
+                message: '内置角色标识XTGL和SJGL不能再次添加!'
               });
               return
             }
@@ -658,6 +688,7 @@ export default {
                 this.open = false;
                 this.reset();
                 this.getList();
+                this.menuOptions=[];
               }
               if (res.code == 1) {
                 this.$message.error(res.data)
@@ -674,6 +705,7 @@ export default {
                 this.open = false;
                 this.reset();
                 this.getList();
+                this.menuOptions=[];
               }
               if (res.code == 1) {
                 this.$message.error(res.data)
@@ -708,7 +740,7 @@ export default {
         return
       }
 
-      if (_selectData.roleKey == 'xtgly' || _selectData.roleKey == 'sjgly') {
+      if (_selectData.roleKey == 'XTGL' || _selectData.roleKey == 'SJGL') {
         this.$message({
           type: 'warning',
           message: '内置角色不能删除!'

+ 36 - 1
ui/src/views/sysManager/sysMenu/index.vue

@@ -50,6 +50,7 @@
           <svg-icon :icon-class="scope.row.icon" />
         </template>
       </el-table-column>
+      <el-table-column prop="pc" label="字符标识" width="200"></el-table-column>
       <el-table-column prop="orderNum" label="排序" width="60"></el-table-column>
       <el-table-column prop="perms" label="权限标识" :show-overflow-tooltip="true"></el-table-column>
       <el-table-column prop="component" label="组件路径" :show-overflow-tooltip="true"></el-table-column>
@@ -245,6 +246,22 @@
               </el-radio-group>
             </el-form-item>
           </el-col>
+          <el-col :span="12" v-if="form.menuType == 'C'">
+            <el-form-item label="字符标识" prop="pc">
+              <el-select
+                multiple
+                v-model="form.pc"
+                placeholder="请选择字符标识"
+              >
+                <el-option
+                  v-for="item in pcOptions"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value">
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
         </el-row>
       </el-form>
       <div slot="footer" class="dialog-footer">
@@ -267,6 +284,15 @@ export default {
   components: { Treeselect, IconSelect },
   data() {
     return {
+      pcOptions: [
+        {value: 'XTGL', label: 'XTGL'},
+        {value: 'SJGL', label: 'SJGL'},
+        {value: 'SHGL', label: 'SHGL'},
+        {value: 'YWGL', label: 'YWGL'},
+        {value: 'SJYW', label: 'SJYW'},
+        {value: 'YWPZ', label: 'YWPZ'},
+        {value: 'YWCZ', label: 'YWCZ'}
+      ],
       // 遮罩层
       loading: true,
       // 显示搜索条件
@@ -303,6 +329,9 @@ export default {
         menuName: [
           { required: true, message: "菜单名称不能为空", trigger: "blur" }
         ],
+        pc: [
+          { required: true, message: "字符标识不能为空", trigger: "blur" }
+        ],
         orderNum: [
           { required: true, message: "菜单顺序不能为空", trigger: "blur" }
         ],
@@ -451,6 +480,10 @@ export default {
       await this.$axios.get('/sysMenuController/getDetailInfo',
         {params: searchParams}).then((res) => {
         this.form = res.data
+        if (this.form.pc!=null){
+          this.form.pc = this.form.pc.split(",")
+        }
+
         this.open = true
         this.title = "修改菜单"
       }).catch((error) => {
@@ -468,7 +501,9 @@ export default {
             lk = res.data.lk
           }).catch((error) => {
           })
-
+          if (this.form.pc!=null){
+            this.form.pc = this.form.pc.join(",")
+          }
           this.form.sysTime = sysTime
           this.form.lk = lk
           if (this.form.menuId != undefined) {