Browse Source

权限添加

zhangjie 1 year ago
parent
commit
2334d71bd5
28 changed files with 3002 additions and 337 deletions
  1. 2356 0
      src/config/privilege.json
  2. 36 0
      src/hooks/usePermission.js
  3. 3 1
      src/views/project-quality/project-quality-manage/issues-feedback/index.vue
  4. 34 25
      src/views/resource-guard/person-guard/person-allocate/index.vue
  5. 16 3
      src/views/resource-guard/person-guard/person-files/index.vue
  6. 20 5
      src/views/service-unit/dispatch/dispatch-manage/index.vue
  7. 10 3
      src/views/service-unit/service-unit-manage/range-manage/index.vue
  8. 16 3
      src/views/service-unit/service-unit-manage/regional-planning/index.vue
  9. 64 49
      src/views/service-unit/service-unit-manage/unit-manage/index.vue
  10. 14 3
      src/views/sop/sop-manage/device-out-in/index.vue
  11. 62 43
      src/views/sop/sop-manage/office-sop/index.vue
  12. 5 2
      src/views/sop/sop-manage/project-change-report/index.vue
  13. 62 36
      src/views/sop/sop-manage/student-sop/index.vue
  14. 34 25
      src/views/sop/sop-monitor/delay-warning/index.vue
  15. 34 25
      src/views/sop/sop-monitor/violation-registration/index.vue
  16. 16 3
      src/views/system/config-manage/checkin-manage/index.vue
  17. 20 4
      src/views/system/config-manage/customer-manage/index.vue
  18. 18 3
      src/views/system/config-manage/device-manage/index.vue
  19. 16 3
      src/views/system/config-manage/service-level-manage/index.vue
  20. 17 5
      src/views/system/config-manage/supplier-manage/index.vue
  21. 46 33
      src/views/system/notice-log/notice-manage/index.vue
  22. 22 24
      src/views/system/task/task-manage/index.vue
  23. 6 3
      src/views/user/auth-manage/role-manage/index.vue
  24. 10 5
      src/views/user/auth-manage/user-manage/index.vue
  25. 23 5
      src/views/user/org-struct-manage/struct-manage/index.vue
  26. 6 0
      src/views/work-hours/work-hours-manage/abnormal-check/wait-check.vue
  27. 32 24
      src/views/work-hours/work-hours-manage/work-attendance/index.vue
  28. 4 2
      src/views/work-hours/work-hours-manage/work-statistics/index.vue

+ 2356 - 0
src/config/privilege.json

@@ -0,0 +1,2356 @@
+[
+  {
+    "id": "49",
+    "name": "服务单元管理",
+    "url": "serviceManage",
+    "type": "MENU",
+    "parentId": "-1",
+    "sequence": 2,
+    "children": [
+      {
+        "id": "50",
+        "name": "派单管理",
+        "url": "crmManage",
+        "type": "MENU",
+        "parentId": "49",
+        "sequence": 1,
+        "children": [
+          {
+            "id": "51",
+            "name": "派单管理",
+            "url": "crm",
+            "type": "MENU",
+            "parentId": "50",
+            "sequence": 1,
+            "children": [],
+            "buttons": [
+              {
+                "id": "211",
+                "name": "新增",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "51",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "212",
+                "name": "作废",
+                "url": "Cancel",
+                "type": "BUTTON",
+                "parentId": "51",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "213",
+                "name": "批量划定",
+                "url": "BatchDelimit",
+                "type": "BUTTON",
+                "parentId": "51",
+                "sequence": 3,
+                "enable": true
+              },
+              {
+                "id": "214",
+                "name": "查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "51",
+                "sequence": 4,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "215",
+                "name": "划定",
+                "url": "Delimit",
+                "type": "LINK",
+                "parentId": "51",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "216",
+                "name": "修改",
+                "url": "Update",
+                "type": "LINK",
+                "parentId": "51",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "217",
+                "name": "重新划定",
+                "url": "ReDelimit",
+                "type": "LINK",
+                "parentId": "51",
+                "sequence": 3,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "209",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "51",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "210",
+                "name": "查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "51",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "52",
+            "name": "统计查询",
+            "url": "crmCount",
+            "type": "MENU",
+            "parentId": "50",
+            "sequence": 2,
+            "children": []
+          }
+        ]
+      },
+      {
+        "id": "53",
+        "name": "服务单元管理",
+        "url": "serviceChildManage",
+        "type": "MENU",
+        "parentId": "49",
+        "sequence": 2,
+        "children": [
+          {
+            "id": "54",
+            "name": "服务单元管理",
+            "url": "service",
+            "type": "MENU",
+            "parentId": "53",
+            "sequence": 1,
+            "children": [],
+            "buttons": [
+              {
+                "id": "220",
+                "name": "新增",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "54",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "221",
+                "name": "查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "54",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "222",
+                "name": "修改",
+                "url": "Update",
+                "type": "LINK",
+                "parentId": "54",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "223",
+                "name": "作废",
+                "url": "Cancel",
+                "type": "LINK",
+                "parentId": "54",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "224",
+                "name": "设置考勤组",
+                "url": "Set",
+                "type": "LINK",
+                "parentId": "54",
+                "sequence": 3,
+                "enable": true
+              },
+              {
+                "id": "225",
+                "name": "发布",
+                "url": "Publish",
+                "type": "LINK",
+                "parentId": "54",
+                "sequence": 4,
+                "enable": true
+              },
+              {
+                "id": "226",
+                "name": "重启",
+                "url": "Restart",
+                "type": "LINK",
+                "parentId": "54",
+                "sequence": 5,
+                "enable": true
+              },
+              {
+                "id": "227",
+                "name": "关闭",
+                "url": "Close",
+                "type": "LINK",
+                "parentId": "54",
+                "sequence": 6,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "218",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "54",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "219",
+                "name": "查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "54",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "55",
+            "name": "服务范围管理",
+            "url": "serviceScope",
+            "type": "MENU",
+            "parentId": "53",
+            "sequence": 2,
+            "children": [],
+            "buttons": [
+              {
+                "id": "230",
+                "name": "新增服务范围",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "55",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "231",
+                "name": "查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "55",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "232",
+                "name": "移除",
+                "url": "Delete",
+                "type": "LINK",
+                "parentId": "55",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "228",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "55",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "229",
+                "name": "查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "55",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "56",
+            "name": "服务区域规划",
+            "url": "serviceRegion",
+            "type": "MENU",
+            "parentId": "53",
+            "sequence": 3,
+            "children": [],
+            "buttons": [
+              {
+                "id": "235",
+                "name": "新增",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "56",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "236",
+                "name": "查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "56",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "237",
+                "name": "修改",
+                "url": "Update",
+                "type": "LINK",
+                "parentId": "56",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "238",
+                "name": "删除",
+                "url": "Delete",
+                "type": "LINK",
+                "parentId": "56",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "233",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "56",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "234",
+                "name": "查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "56",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "57",
+            "name": "统计查询",
+            "url": "serviceCount",
+            "type": "MENU",
+            "parentId": "53",
+            "sequence": 4,
+            "children": []
+          }
+        ]
+      }
+    ]
+  },
+  {
+    "id": "39",
+    "name": "SOP管理",
+    "url": "sopManage",
+    "type": "MENU",
+    "parentId": "-1",
+    "sequence": 3,
+    "children": [
+      {
+        "id": "40",
+        "name": "SOP管理",
+        "url": "sopChildManage",
+        "type": "MENU",
+        "parentId": "39",
+        "sequence": 1,
+        "children": [
+          {
+            "id": "41",
+            "name": "教务处SOP管理",
+            "url": "office",
+            "type": "MENU",
+            "parentId": "40",
+            "sequence": 1,
+            "children": [],
+            "buttons": [
+              {
+                "id": "173",
+                "name": "作废",
+                "url": "Cancel",
+                "type": "BUTTON",
+                "parentId": "41",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "174",
+                "name": "查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "41",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "175",
+                "name": "填报",
+                "url": "Fill",
+                "type": "LINK",
+                "parentId": "41",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "176",
+                "name": "计划变更报备",
+                "url": "ProjectExchange",
+                "type": "LINK",
+                "parentId": "41",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "177",
+                "name": "新增SOP",
+                "url": "AddSop",
+                "type": "LINK",
+                "parentId": "41",
+                "sequence": 3,
+                "enable": true
+              },
+              {
+                "id": "178",
+                "name": "新增违规 ",
+                "url": "AddViolation",
+                "type": "LINK",
+                "parentId": "41",
+                "sequence": 4,
+                "enable": true
+              },
+              {
+                "id": "179",
+                "name": "上报质量问题",
+                "url": "ProblemSubmit",
+                "type": "LINK",
+                "parentId": "41",
+                "sequence": 5,
+                "enable": true
+              },
+              {
+                "id": "3037",
+                "name": "编辑",
+                "url": "Edit",
+                "type": "LINK",
+                "parentId": "41",
+                "sequence": 6,
+                "enable": true
+              },
+              {
+                "id": "3038",
+                "name": "作废",
+                "url": "Cancel",
+                "type": "LINK",
+                "parentId": "41",
+                "sequence": 7,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "171",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "41",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "172",
+                "name": "查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "41",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "42",
+            "name": "研究生SOP管理",
+            "url": "cloudMark",
+            "type": "MENU",
+            "parentId": "40",
+            "sequence": 2,
+            "children": [],
+            "buttons": [
+              {
+                "id": "182",
+                "name": "作废",
+                "url": "Cancel",
+                "type": "BUTTON",
+                "parentId": "42",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "183",
+                "name": "查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "42",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "184",
+                "name": "填报",
+                "url": "Fill",
+                "type": "LINK",
+                "parentId": "42",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "185",
+                "name": "计划变更报备",
+                "url": "ProjectExchange",
+                "type": "LINK",
+                "parentId": "42",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "186",
+                "name": "新增违规 ",
+                "url": "AddViolation",
+                "type": "LINK",
+                "parentId": "42",
+                "sequence": 3,
+                "enable": true
+              },
+              {
+                "id": "187",
+                "name": "上报质量问题",
+                "url": "ProblemSubmit",
+                "type": "LINK",
+                "parentId": "42",
+                "sequence": 4,
+                "enable": true
+              },
+              {
+                "id": "3039",
+                "name": "编辑",
+                "url": "Edit",
+                "type": "LINK",
+                "parentId": "42",
+                "sequence": 6,
+                "enable": true
+              },
+              {
+                "id": "3040",
+                "name": "作废",
+                "url": "Cancel",
+                "type": "LINK",
+                "parentId": "42",
+                "sequence": 7,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "180",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "42",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "181",
+                "name": "查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "42",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "43",
+            "name": "设备出入库登记",
+            "url": "deviceInOutSop",
+            "type": "MENU",
+            "parentId": "40",
+            "sequence": 3,
+            "children": [],
+            "buttons": [
+              {
+                "id": "190",
+                "name": "新增",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "43",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "191",
+                "name": "作废",
+                "url": "Cancel",
+                "type": "BUTTON",
+                "parentId": "43",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "192",
+                "name": "查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "43",
+                "sequence": 3,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "188",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "43",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "189",
+                "name": "查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "43",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "44",
+            "name": "项目计划变更报备",
+            "url": "projectExchange",
+            "type": "MENU",
+            "parentId": "40",
+            "sequence": 4,
+            "children": [],
+            "buttons": [
+              {
+                "id": "196",
+                "name": "查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "44",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "3024",
+                "name": "处理申请",
+                "url": "Finish",
+                "type": "LINK",
+                "parentId": "44",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "193",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "44",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "194",
+                "name": "查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "44",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          }
+        ]
+      },
+      {
+        "id": "45",
+        "name": "SOP监控",
+        "url": "sopControlManage",
+        "type": "MENU",
+        "parentId": "39",
+        "sequence": 2,
+        "children": [
+          {
+            "id": "46",
+            "name": "SOP监控台",
+            "url": "sopControl",
+            "type": "MENU",
+            "parentId": "45",
+            "sequence": 1,
+            "children": []
+          },
+          {
+            "id": "47",
+            "name": "延期预警",
+            "url": "delayWarn",
+            "type": "MENU",
+            "parentId": "45",
+            "sequence": 2,
+            "children": [],
+            "buttons": [
+              {
+                "id": "199",
+                "name": "查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "47",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "200",
+                "name": "跟进",
+                "url": "Follow",
+                "type": "LINK",
+                "parentId": "47",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "201",
+                "name": "关闭",
+                "url": "Close",
+                "type": "LINK",
+                "parentId": "47",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "202",
+                "name": "重启",
+                "url": "Restart",
+                "type": "LINK",
+                "parentId": "47",
+                "sequence": 3,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "197",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "47",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "198",
+                "name": "查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "47",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "48",
+            "name": "违规登记",
+            "url": "violation",
+            "type": "MENU",
+            "parentId": "45",
+            "sequence": 3,
+            "children": [],
+            "buttons": [
+              {
+                "id": "205",
+                "name": "查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "48",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "206",
+                "name": "跟进",
+                "url": "Follow",
+                "type": "LINK",
+                "parentId": "48",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "207",
+                "name": "关闭",
+                "url": "Close",
+                "type": "LINK",
+                "parentId": "48",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "208",
+                "name": "重启",
+                "url": "Restart",
+                "type": "LINK",
+                "parentId": "48",
+                "sequence": 3,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "203",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "48",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "204",
+                "name": "查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "48",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          }
+        ]
+      }
+    ]
+  },
+  {
+    "id": "31",
+    "name": "资源保障",
+    "url": "resourceManage",
+    "type": "MENU",
+    "parentId": "-1",
+    "sequence": 4,
+    "children": [
+      {
+        "id": "32",
+        "name": "人资保障",
+        "url": "humanManage",
+        "type": "MENU",
+        "parentId": "31",
+        "sequence": 1,
+        "children": [
+          {
+            "id": "33",
+            "name": "人员档案管理",
+            "url": "userArchives",
+            "type": "MENU",
+            "parentId": "32",
+            "sequence": 1,
+            "children": [],
+            "buttons": [
+              {
+                "id": "154",
+                "name": "新增",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "33",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "155",
+                "name": "批量导入",
+                "url": "BatchImport",
+                "type": "BUTTON",
+                "parentId": "33",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "158",
+                "name": "批量导出",
+                "url": "BatchExport",
+                "type": "BUTTON",
+                "parentId": "33",
+                "sequence": 3,
+                "enable": true
+              },
+              {
+                "id": "159",
+                "name": "作废",
+                "url": "Cancel",
+                "type": "BUTTON",
+                "parentId": "33",
+                "sequence": 4,
+                "enable": true
+              },
+              {
+                "id": "157",
+                "name": "查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "33",
+                "sequence": 5,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "160",
+                "name": "修改",
+                "url": "Update",
+                "type": "LINK",
+                "parentId": "33",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "153",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "33",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "156",
+                "name": "查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "33",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "34",
+            "name": "人员调配",
+            "url": "userAllocate",
+            "type": "MENU",
+            "parentId": "32",
+            "sequence": 2,
+            "children": [],
+            "buttons": [
+              {
+                "id": "163",
+                "name": "查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "34",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "2026",
+                "name": "批量调配",
+                "url": "AllocateBatch",
+                "type": "BUTTON",
+                "parentId": "34",
+                "sequence": 4,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "164",
+                "name": "调配",
+                "url": "Allocate",
+                "type": "LINK",
+                "parentId": "34",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "165",
+                "name": "发布SOP",
+                "url": "Publish",
+                "type": "LINK",
+                "parentId": "34",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "166",
+                "name": "撤销发布",
+                "url": "UnPublish",
+                "type": "LINK",
+                "parentId": "34",
+                "sequence": 3,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "161",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "34",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "162",
+                "name": "查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "34",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "35",
+            "name": "人资监控",
+            "url": "userArchivesControl",
+            "type": "MENU",
+            "parentId": "32",
+            "sequence": 3,
+            "children": []
+          }
+        ]
+      },
+      {
+        "id": "36",
+        "name": "设备保障",
+        "url": "deviceManage",
+        "type": "MENU",
+        "parentId": "31",
+        "sequence": 2,
+        "children": [
+          {
+            "id": "37",
+            "name": "出入库登记查询",
+            "url": "deviceInOut",
+            "type": "MENU",
+            "parentId": "36",
+            "sequence": 1,
+            "children": [],
+            "buttons": [
+              {
+                "id": "169",
+                "name": "查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "37",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "167",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "37",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "168",
+                "name": "查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "37",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "38",
+            "name": "设备资源监控",
+            "url": "deviceControl",
+            "type": "MENU",
+            "parentId": "36",
+            "sequence": 2,
+            "children": [],
+            "lists": [
+              {
+                "id": "170",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "38",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          }
+        ]
+      }
+    ]
+  },
+  {
+    "id": "24",
+    "name": "工时管理",
+    "url": "hoursManage",
+    "type": "MENU",
+    "parentId": "-1",
+    "sequence": 5,
+    "children": [
+      {
+        "id": "25",
+        "name": "工时管理",
+        "url": "hoursChildManage",
+        "type": "MENU",
+        "parentId": "24",
+        "sequence": 1,
+        "children": [
+          {
+            "id": "26",
+            "name": "考勤打卡",
+            "url": "ding",
+            "type": "MENU",
+            "parentId": "25",
+            "sequence": 1,
+            "children": []
+          },
+          {
+            "id": "1044",
+            "name": "考勤明细查询",
+            "url": "dingDetail",
+            "type": "MENU",
+            "parentId": "25",
+            "sequence": 1,
+            "children": []
+          },
+          {
+            "id": "27",
+            "name": "异常审核",
+            "url": "exception",
+            "type": "MENU",
+            "parentId": "25",
+            "sequence": 2,
+            "children": [],
+            "buttons": [
+              {
+                "id": "132",
+                "name": "待审核-批量通过",
+                "url": "BatchPass",
+                "type": "BUTTON",
+                "parentId": "27",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "135",
+                "name": "待审核-批量不通过",
+                "url": "BatchNoPass",
+                "type": "BUTTON",
+                "parentId": "27",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "134",
+                "name": "待审核-查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "27",
+                "sequence": 3,
+                "enable": true
+              },
+              {
+                "id": "140",
+                "name": "已审核-查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "27",
+                "sequence": 3,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "136",
+                "name": "待审核-通过",
+                "url": "Pass",
+                "type": "LINK",
+                "parentId": "27",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "137",
+                "name": "待审核-不通过",
+                "url": "NoPass",
+                "type": "LINK",
+                "parentId": "27",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "131",
+                "name": "待审核-列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "27",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "138",
+                "name": "已审核-列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "27",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "133",
+                "name": "待审核-查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "27",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "139",
+                "name": "已审核-查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "27",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "28",
+            "name": "考勤提交",
+            "url": "dingSubmit",
+            "type": "MENU",
+            "parentId": "25",
+            "sequence": 3,
+            "children": [],
+            "buttons": [
+              {
+                "id": "142",
+                "name": "批量提交",
+                "url": "BatchSubmit",
+                "type": "BUTTON",
+                "parentId": "28",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "145",
+                "name": "批量导出",
+                "url": "BatchExport",
+                "type": "BUTTON",
+                "parentId": "28",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "144",
+                "name": "查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "28",
+                "sequence": 3,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "146",
+                "name": "提交",
+                "url": "Submit",
+                "type": "LINK",
+                "parentId": "28",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "147",
+                "name": "撤回/取消撤回",
+                "url": "Reject",
+                "type": "LINK",
+                "parentId": "28",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "141",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "28",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "143",
+                "name": "查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "28",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "29",
+            "name": "工时统计",
+            "url": "hourSubmit",
+            "type": "MENU",
+            "parentId": "25",
+            "sequence": 4,
+            "children": [],
+            "buttons": [
+              {
+                "id": "149",
+                "name": "导出",
+                "url": "Export",
+                "type": "BUTTON",
+                "parentId": "29",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "151",
+                "name": "查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "29",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "152",
+                "name": "撤回/取消撤回",
+                "url": "Reject",
+                "type": "LINK",
+                "parentId": "29",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "148",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "29",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "150",
+                "name": "查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "29",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "30",
+            "name": "考勤监控预警",
+            "url": "dingWarn",
+            "type": "MENU",
+            "parentId": "25",
+            "sequence": 5,
+            "children": []
+          }
+        ]
+      }
+    ]
+  },
+  {
+    "id": "19",
+    "name": "项目质量管理",
+    "url": "projectQualityManage",
+    "type": "MENU",
+    "parentId": "-1",
+    "sequence": 6,
+    "children": [
+      {
+        "id": "20",
+        "name": "项目质量管理",
+        "url": "projectChildQualityManage",
+        "type": "MENU",
+        "parentId": "19",
+        "sequence": 1,
+        "children": [
+          {
+            "id": "21",
+            "name": "质量问题反馈",
+            "url": "qualityProblem",
+            "type": "MENU",
+            "parentId": "20",
+            "sequence": 1,
+            "children": [],
+            "buttons": [
+              {
+                "id": "128",
+                "name": "作废",
+                "url": "Cancel",
+                "type": "BUTTON",
+                "parentId": "21",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "130",
+                "name": "查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "21",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "127",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "21",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "129",
+                "name": "查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "21",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "23",
+            "name": "质量监控分析",
+            "url": "qualityProblemControl",
+            "type": "MENU",
+            "parentId": "20",
+            "sequence": 2,
+            "children": []
+          }
+        ]
+      }
+    ]
+  },
+  {
+    "id": "11",
+    "name": "用户管理",
+    "url": "userManage",
+    "type": "MENU",
+    "parentId": "-1",
+    "sequence": 7,
+    "children": [
+      {
+        "id": "12",
+        "name": "组织架构管理",
+        "url": "orgManage",
+        "type": "MENU",
+        "parentId": "11",
+        "sequence": 1,
+        "children": [
+          {
+            "id": "13",
+            "name": "组织架构管理",
+            "url": "org",
+            "type": "MENU",
+            "parentId": "12",
+            "sequence": 1,
+            "children": [],
+            "buttons": [
+              {
+                "id": "112",
+                "name": "新增",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "13",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "116",
+                "name": "查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "13",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "114",
+                "name": "修改",
+                "url": "Update",
+                "type": "LINK",
+                "parentId": "13",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "115",
+                "name": "启用/禁用",
+                "url": "Enable",
+                "type": "LINK",
+                "parentId": "13",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "111",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "13",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "113",
+                "name": "查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "13",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          }
+        ]
+      },
+      {
+        "id": "14",
+        "name": "用户权限管理",
+        "url": "userPrivilegeManage",
+        "type": "MENU",
+        "parentId": "11",
+        "sequence": 2,
+        "children": [
+          {
+            "id": "15",
+            "name": "用户管理",
+            "url": "user",
+            "type": "MENU",
+            "parentId": "14",
+            "sequence": 1,
+            "children": [],
+            "buttons": [
+              {
+                "id": "118",
+                "name": "新增",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "15",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "122",
+                "name": "查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "15",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "120",
+                "name": "修改",
+                "url": "Update",
+                "type": "LINK",
+                "parentId": "15",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "121",
+                "name": "启用/禁用",
+                "url": "Enable",
+                "type": "LINK",
+                "parentId": "15",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "17",
+                "name": "修改密码",
+                "url": "UpdatePwd",
+                "type": "LINK",
+                "parentId": "15",
+                "sequence": 3,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "117",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "15",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "119",
+                "name": "查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "15",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "16",
+            "name": "角色管理",
+            "url": "role",
+            "type": "MENU",
+            "parentId": "14",
+            "sequence": 2,
+            "children": [],
+            "buttons": [
+              {
+                "id": "124",
+                "name": "新增",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "16",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "125",
+                "name": "修改",
+                "url": "Update",
+                "type": "LINK",
+                "parentId": "16",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "126",
+                "name": "删除",
+                "url": "Delete",
+                "type": "LINK",
+                "parentId": "16",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "123",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "16",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          }
+        ]
+      }
+    ]
+  },
+  {
+    "id": "1",
+    "name": "系统管理",
+    "url": "systemManage",
+    "type": "MENU",
+    "parentId": "-1",
+    "sequence": 8,
+    "children": [
+      {
+        "id": "2",
+        "name": "配置管理",
+        "url": "configureManage",
+        "type": "MENU",
+        "parentId": "1",
+        "sequence": 1,
+        "children": [
+          {
+            "id": "3",
+            "name": "客户配置",
+            "url": "custom",
+            "type": "MENU",
+            "parentId": "2",
+            "sequence": 1,
+            "children": [],
+            "buttons": [
+              {
+                "id": "79",
+                "name": "新增",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "3",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "80",
+                "name": "批量导入",
+                "url": "BatchImport",
+                "type": "BUTTON",
+                "parentId": "3",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "75",
+                "name": "查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "3",
+                "sequence": 3,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "77",
+                "name": "修改",
+                "url": "Update",
+                "type": "LINK",
+                "parentId": "3",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "78",
+                "name": "删除",
+                "url": "Delete",
+                "type": "LINK",
+                "parentId": "3",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "74",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "3",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "76",
+                "name": "查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "3",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "4",
+            "name": "供应商配置",
+            "url": "supplier",
+            "type": "MENU",
+            "parentId": "2",
+            "sequence": 2,
+            "children": [],
+            "buttons": [
+              {
+                "id": "81",
+                "name": "新增",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "4",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "83",
+                "name": "修改",
+                "url": "Update",
+                "type": "LINK",
+                "parentId": "4",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "84",
+                "name": "启用/禁用",
+                "url": "Enable",
+                "type": "LINK",
+                "parentId": "4",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "82",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "4",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "5",
+            "name": "设备配置",
+            "url": "device",
+            "type": "MENU",
+            "parentId": "2",
+            "sequence": 3,
+            "children": [],
+            "buttons": [
+              {
+                "id": "87",
+                "name": "新增",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "5",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "88",
+                "name": "作废",
+                "url": "Cancel",
+                "type": "BUTTON",
+                "parentId": "5",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "105",
+                "name": "查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "5",
+                "sequence": 3,
+                "enable": true
+              },
+              {
+                "id": "1048",
+                "name": "批量启用",
+                "url": "BatchEnable",
+                "type": "BUTTON",
+                "parentId": "5",
+                "sequence": 4,
+                "enable": true
+              },
+              {
+                "id": "1049",
+                "name": "批量禁用",
+                "url": "BatchUnEnable",
+                "type": "BUTTON",
+                "parentId": "5",
+                "sequence": 5,
+                "enable": true
+              },
+              {
+                "id": "1050",
+                "name": "批量导入",
+                "url": "BatchImport",
+                "type": "BUTTON",
+                "parentId": "5",
+                "sequence": 6,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "85",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "5",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "86",
+                "name": "查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "5",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "6",
+            "name": "服务档位配置",
+            "url": "level",
+            "type": "MENU",
+            "parentId": "2",
+            "sequence": 4,
+            "children": [],
+            "buttons": [
+              {
+                "id": "90",
+                "name": "新增",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "6",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "91",
+                "name": "修改",
+                "url": "Update",
+                "type": "LINK",
+                "parentId": "6",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "92",
+                "name": "删除",
+                "url": "Delete",
+                "type": "LINK",
+                "parentId": "6",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "89",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "6",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "7",
+            "name": "考勤配置",
+            "url": "dingConfigure",
+            "type": "MENU",
+            "parentId": "2",
+            "sequence": 5,
+            "children": [],
+            "buttons": [
+              {
+                "id": "94",
+                "name": "新增",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "7",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "106",
+                "name": "查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "7",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "95",
+                "name": "修改",
+                "url": "Update",
+                "type": "LINK",
+                "parentId": "7",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "96",
+                "name": "删除",
+                "url": "Delete",
+                "type": "LINK",
+                "parentId": "7",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "93",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "7",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "97",
+                "name": "查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "7",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          }
+        ]
+      },
+      {
+        "id": "8",
+        "name": "系统日志",
+        "url": "logManage",
+        "type": "MENU",
+        "parentId": "1",
+        "sequence": 2,
+        "children": [
+          {
+            "id": "9",
+            "name": "通知公告管理",
+            "url": "noticeManage",
+            "type": "MENU",
+            "parentId": "8",
+            "sequence": 1,
+            "children": [],
+            "buttons": [
+              {
+                "id": "99",
+                "name": "新增",
+                "url": "Add",
+                "type": "BUTTON",
+                "parentId": "9",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "107",
+                "name": "查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "9",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "104",
+                "name": "发布",
+                "url": "Publish",
+                "type": "LINK",
+                "parentId": "9",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "100",
+                "name": "撤销",
+                "url": "Cancel",
+                "type": "LINK",
+                "parentId": "9",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "101",
+                "name": "回执查询",
+                "url": "Select",
+                "type": "LINK",
+                "parentId": "9",
+                "sequence": 2,
+                "enable": true
+              },
+              {
+                "id": "103",
+                "name": "修改",
+                "url": "Update",
+                "type": "LINK",
+                "parentId": "9",
+                "sequence": 3,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "98",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "9",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "102",
+                "name": "查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "9",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          },
+          {
+            "id": "10",
+            "name": "日志查询",
+            "url": "log",
+            "type": "MENU",
+            "parentId": "8",
+            "sequence": 2,
+            "children": [],
+            "buttons": [
+              {
+                "id": "110",
+                "name": "查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "10",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "108",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "10",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "109",
+                "name": "查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "10",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          }
+        ]
+      },
+      {
+        "id": "239",
+        "name": "任务管理",
+        "url": "taskManage",
+        "type": "MENU",
+        "parentId": "1",
+        "sequence": 3,
+        "children": [
+          {
+            "id": "240",
+            "name": "任务管理",
+            "url": "task",
+            "type": "MENU",
+            "parentId": "239",
+            "sequence": 1,
+            "children": [],
+            "buttons": [
+              {
+                "id": "243",
+                "name": "查询",
+                "url": "Select",
+                "type": "BUTTON",
+                "parentId": "240",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "links": [
+              {
+                "id": "244",
+                "name": "导出日志",
+                "url": "Export",
+                "type": "LINK",
+                "parentId": "240",
+                "sequence": 1,
+                "enable": true
+              },
+              {
+                "id": "245",
+                "name": "下载文件",
+                "url": "Download",
+                "type": "LINK",
+                "parentId": "240",
+                "sequence": 2,
+                "enable": true
+              }
+            ],
+            "lists": [
+              {
+                "id": "241",
+                "name": "列表",
+                "url": "List",
+                "type": "LIST",
+                "parentId": "240",
+                "sequence": 1,
+                "enable": true
+              }
+            ],
+            "conditions": [
+              {
+                "id": "242",
+                "name": "查询条件",
+                "url": "Condition",
+                "type": "CONDITION",
+                "parentId": "240",
+                "sequence": 1,
+                "enable": true
+              }
+            ]
+          }
+        ]
+      }
+    ]
+  }
+]

+ 36 - 0
src/hooks/usePermission.js

@@ -0,0 +1,36 @@
+import { useUserStore } from '@/store';
+import { reactive } from 'vue';
+import { useRoute } from 'vue-router';
+
+export default function usePermission() {
+  const userStore = useUserStore();
+  const route = useRoute();
+  const perm = reactive({});
+
+  function checkPrivilege(type, field, routeAlias = null) {
+    let routerName = routeAlias || route.meta.alias;
+    const keys = field
+      .split(',')
+      .map((item) => `${routerName}_${type}_${item}`);
+
+    return keys.some((key) => userStore.finePermissionIds.includes(key));
+  }
+
+  function updatePerm() {
+    const routeAlias = route.meta.alias + '_';
+    const validKeys = userStore.finePermissionIds
+      .filter((item) => item.startsWith(routeAlias))
+      .map((item) => item.replace(routeAlias, ''));
+
+    validKeys.forEach((key) => {
+      perm[key] = true;
+    });
+  }
+  updatePerm();
+
+  return {
+    checkPrivilege,
+    updatePerm,
+    perm,
+  };
+}

+ 3 - 1
src/views/project-quality/project-quality-manage/issues-feedback/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="flex flex-col h-full">
-    <div class="page-action">
+    <div v-if="perm.BUTTON_Cancel" class="page-action">
       <t-button
         theme="primary"
         :disabled="!selectedRowKeys.length"
@@ -80,6 +80,8 @@ import {
   ISSUES_REASON_TYPE,
   ISSUES_TYPE,
 } from '@/config/constants';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
 
 const selectedRowKeys = ref([]);
 const selectChange = (value) => {

+ 34 - 25
src/views/resource-guard/person-guard/person-allocate/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="person-allocate flex flex-col h-full">
-    <div class="page-action">
+    <div v-if="perm.BUTTON_AllocateBatch" class="page-action">
       <t-button
         theme="primary"
         :disabled="!selectedRowKeys.length"
@@ -84,30 +84,36 @@
         </template>
         <template #operate="{ row }">
           <div class="table-operations">
-            <t-link
-              v-if="row.crmStatus === 'UN_PUBLISH'"
-              theme="primary"
-              hover="color"
-              @click="handleDeploy(row)"
-            >
-              调配
-            </t-link>
-            <t-link
-              v-if="row.crmStatus === 'UN_PUBLISH'"
-              theme="primary"
-              hover="color"
-              @click="handleSubmitSop(row)"
-            >
-              发布SOP
-            </t-link>
-            <t-link
-              v-if="row.crmStatus === 'PUBLISH'"
-              theme="danger"
-              hover="color"
-              @click="handleCancelSubmitSop(row)"
-            >
-              撤销发布
-            </t-link>
+            <template v-if="perm.LINK_Allocate">
+              <t-link
+                v-if="row.crmStatus === 'UN_PUBLISH'"
+                theme="primary"
+                hover="color"
+                @click="handleDeploy(row)"
+              >
+                调配
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_Publish">
+              <t-link
+                v-if="row.crmStatus === 'UN_PUBLISH'"
+                theme="primary"
+                hover="color"
+                @click="handleSubmitSop(row)"
+              >
+                发布SOP
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_UnPublish">
+              <t-link
+                v-if="row.crmStatus === 'PUBLISH'"
+                theme="danger"
+                hover="color"
+                @click="handleCancelSubmitSop(row)"
+              >
+                撤销发布
+              </t-link>
+            </template>
           </div>
         </template>
       </t-table>
@@ -115,6 +121,7 @@
 
     <!-- PersonDeployDialog -->
     <person-deploy-dialog
+      v-if="perm.LINK_Allocate"
       v-model:visible="showPersonDeployDialog"
       :curRow="curRow"
       @success="personDeploySuccess"
@@ -137,6 +144,8 @@ import {
 } from '@/api/resource-guard';
 import { customerTypeFilter } from '@/utils/filter';
 import PersonDeployDialog from './person-deploy-dialog.vue';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
 
 const curRow = ref(null);
 const showPersonDeployDialog = ref(false);

+ 16 - 3
src/views/resource-guard/person-guard/person-files/index.vue

@@ -2,11 +2,12 @@
   <div class="flex flex-col h-full">
     <div class="page-action">
       <t-space size="small">
-        <t-button theme="primary" @click="handleAdd">
+        <t-button v-if="perm.BUTTON_Add" theme="primary" @click="handleAdd">
           <template #icon><svg-icon name="add-circle" color="#fff" /></template>
           新增
         </t-button>
         <upload-button
+          v-if="perm.BUTTON_BatchImport"
           upload-url="/api/admin/user/archives/import"
           param-file-name="MultipartFile"
         >
@@ -15,11 +16,16 @@
             >批量导入
           </t-button>
         </upload-button>
-        <t-button variant="outline" @click="multExport">
+        <t-button
+          v-if="perm.BUTTON_BatchExport"
+          variant="outline"
+          @click="multExport"
+        >
           <template #icon><svg-icon name="export" color="#262626" /></template
           >批量导出
         </t-button>
         <t-button
+          v-if="perm.BUTTON_Cancel"
           variant="outline"
           :disabled="!selectedRowKeys.length"
           @click="handleDestroy"
@@ -111,7 +117,12 @@
         </template>
         <template #operate="{ row }">
           <div class="table-operations" @click.stop>
-            <t-link theme="primary" hover="color" @click="handleEdit(row)">
+            <t-link
+              v-if="perm.LINK_Update"
+              theme="primary"
+              hover="color"
+              @click="handleEdit(row)"
+            >
               修改
             </t-link>
           </div>
@@ -150,6 +161,8 @@ import {
   genderTypeFilter,
   educationTypeFilter,
 } from '@/utils/filter';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
 
 const curRow = ref(null);
 const showAddPersonFileDialog = ref(false);

+ 20 - 5
src/views/service-unit/dispatch/dispatch-manage/index.vue

@@ -1,11 +1,12 @@
 <template>
   <div class="dispatch-manage flex flex-col h-full">
     <div class="page-action">
-      <t-button theme="primary" @click="handleAdd">
+      <t-button v-if="perm.BUTTON_Add" theme="primary" @click="handleAdd">
         <template #icon><svg-icon name="add-circle" color="#fff" /></template>
         新增</t-button
       >
       <t-button
+        v-if="perm.BUTTON_Cancel"
         variant="outline"
         :disabled="!selectedRowKeys.length"
         @click="handleBatchDisable"
@@ -14,6 +15,7 @@
         作废
       </t-button>
       <t-button
+        v-if="perm.BUTTON_BatchDelimit"
         variant="outline"
         :disabled="!selectedRowKeys.length"
         @click="handleMultDelineation"
@@ -75,14 +77,21 @@
         </template>
         <template #operate="{ row }">
           <div class="table-operations" @click.stop>
+            <template v-if="perm.LINK_Delimit || perm.LINK_ReDelimit">
+              <t-link
+                theme="primary"
+                hover="color"
+                @click="handleDelineation(row)"
+              >
+                {{ row.serviceId ? '重新划定' : '划定' }}
+              </t-link>
+            </template>
             <t-link
+              v-if="perm.LINK_Update"
               theme="primary"
               hover="color"
-              @click="handleDelineation(row)"
+              @click="handleEdit(row)"
             >
-              {{ row.serviceId ? '重新划定' : '划定' }}
-            </t-link>
-            <t-link theme="primary" hover="color" @click="handleEdit(row)">
               修改
             </t-link>
           </div>
@@ -91,12 +100,16 @@
     </div>
 
     <AddDispatchDialog
+      v-if="perm.BUTTON_Add || perm.LINK_Update"
       v-model:visible="showAddDispatchDialog"
       :curRow="curRow"
       @success="fetchData"
     ></AddDispatchDialog>
     <!-- DelineationDialog -->
     <mult-delineation-dialog
+      v-if="
+        perm.LINK_Delimit || perm.LINK_ReDelimit || perm.BUTTON_BatchDelimit
+      "
       v-model:visible="showMultDelineationDialog"
       :crm-ids="curCrmIds"
       :dialog-title="curRow?.serviceId ? '重新划定服务单元' : undefined"
@@ -163,6 +176,8 @@ import { reactive, ref, computed, onMounted } from 'vue';
 import { omit } from 'lodash';
 import { DialogPlugin, MessagePlugin } from 'tdesign-vue-next';
 import { FactCheckIcon } from 'tdesign-icons-vue-next';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
 
 import {
   dispatchQueryApi,

+ 10 - 3
src/views/service-unit/service-unit-manage/range-manage/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="unit-manage flex flex-col h-full">
-    <div class="page-action">
+    <div v-if="perm.BUTTON_Add" class="page-action">
       <t-button theme="primary" @click="handleAddRange">
         <template #icon><svg-icon name="add-circle" color="#fff" /></template>
         新增服务范围
@@ -52,7 +52,12 @@
         </template>
         <template #operate="{ row }">
           <div class="table-operations">
-            <t-link theme="danger" hover="color" @click="handleDelete(row)">
+            <t-link
+              v-if="perm.LINK_Delete"
+              theme="danger"
+              hover="color"
+              @click="handleDelete(row)"
+            >
               移除
             </t-link>
           </div>
@@ -62,6 +67,7 @@
 
     <!-- AddRangeDialog -->
     <add-range-dialog
+      v-if="perm.BUTTON_Add"
       v-model:visible="showAddRangeDialog"
       @success="fetchData"
     ></add-range-dialog>
@@ -70,7 +76,6 @@
 
 <script setup name="RangeManage">
 import { ref, reactive, onMounted } from 'vue';
-import { useRouter } from 'vue-router';
 import { DialogPlugin, MessagePlugin } from 'tdesign-vue-next';
 import { ErrorCircleFilledIcon } from 'tdesign-icons-vue-next';
 import {
@@ -83,6 +88,8 @@ import { CUSTOMER_TYPE } from '@/config/constants';
 import { dictToOptionList } from '@/utils/tool';
 import { customerTypeFilter } from '@/utils/filter';
 import AddRangeDialog from './add-range-dialog.vue';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
 
 const showAddRangeDialog = ref(false);
 

+ 16 - 3
src/views/service-unit/service-unit-manage/regional-planning/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="unit-manage flex flex-col h-full">
-    <div class="page-action">
+    <div v-if="perm.BUTTON_Add" class="page-action">
       <t-button theme="primary" @click="handleAdd">
         <template #icon><svg-icon name="add-circle" color="#fff" /></template
         >新增大区
@@ -40,10 +40,20 @@
       >
         <template #operate="{ row }">
           <div class="table-operations">
-            <t-link theme="primary" hover="color" @click="handleEdit(row)">
+            <t-link
+              v-if="perm.LINK_Update"
+              theme="primary"
+              hover="color"
+              @click="handleEdit(row)"
+            >
               修改大区
             </t-link>
-            <t-link theme="primary" hover="color" @click="handleDelete(row)">
+            <t-link
+              v-if="perm.LINK_Delete"
+              theme="primary"
+              hover="color"
+              @click="handleDelete(row)"
+            >
               删除
             </t-link>
           </div>
@@ -52,6 +62,7 @@
     </div>
 
     <AddRegionDialog
+      v-if="perm.BUTTON_Add || perm.LINK_Update"
       v-model:visible="showAddRegionDialog"
       :curRow="curRow"
       @success="fetchData"
@@ -68,6 +79,8 @@ import {
 } from '@/api/service-unit';
 import useFetchTable from '@/hooks/useFetchTable';
 import AddRegionDialog from './add-region-dialog.vue';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
 
 const curRow = ref(null);
 const showAddRegionDialog = ref(false);

+ 64 - 49
src/views/service-unit/service-unit-manage/unit-manage/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="unit-manage flex flex-col h-full">
-    <div class="page-action">
+    <div v-if="perm.BUTTON_Add" class="page-action">
       <t-button theme="primary" @click="handleAdd">
         <template #icon><svg-icon name="add-circle" color="#fff" /></template>
         新增服务单元</t-button
@@ -49,60 +49,73 @@
         </template>
         <template #operate="{ row }">
           <div class="table-operations">
-            <t-link
-              v-if="row.status !== 'FINISH'"
-              theme="primary"
-              hover="color"
-              @click="handleEdit(row)"
-            >
-              修改
-            </t-link>
-            <t-link
-              v-if="row.status === 'NEW'"
-              theme="primary"
-              hover="color"
-              @click="handlePublish(row)"
-            >
-              发布
-            </t-link>
-            <t-link
-              v-if="row.status === 'NEW'"
-              theme="primary"
-              hover="color"
-              @click="handleDestroy(row)"
-            >
-              作废
-            </t-link>
-            <t-link
-              v-if="row.status === 'FINISH'"
-              theme="primary"
-              hover="color"
-              @click="handleRestart(row)"
-            >
-              重启
-            </t-link>
-            <t-link
-              v-if="row.status === 'PUBLISH'"
-              theme="primary"
-              hover="color"
-              @click="handleCloze(row)"
-            >
-              关闭
-            </t-link>
-            <t-link
-              v-if="row.status === 'NEW'"
-              theme="primary"
-              hover="color"
-              @click="handleSetGroup(row)"
-            >
-              设置考勤组
-            </t-link>
+            <template v-if="perm.LINK_Update">
+              <t-link
+                v-if="row.status !== 'FINISH'"
+                theme="primary"
+                hover="color"
+                @click="handleEdit(row)"
+              >
+                修改
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_Publish">
+              <t-link
+                v-if="row.status === 'NEW'"
+                theme="primary"
+                hover="color"
+                @click="handlePublish(row)"
+              >
+                发布
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_Cancel">
+              <t-link
+                v-if="row.status === 'NEW'"
+                theme="primary"
+                hover="color"
+                @click="handleDestroy(row)"
+              >
+                作废
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_Restart">
+              <t-link
+                v-if="row.status === 'FINISH'"
+                theme="primary"
+                hover="color"
+                @click="handleRestart(row)"
+              >
+                重启
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_Close">
+              <t-link
+                v-if="row.status === 'PUBLISH'"
+                theme="primary"
+                hover="color"
+                @click="handleCloze(row)"
+              >
+                关闭
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_Set">
+              <t-link
+                v-if="row.status === 'NEW'"
+                theme="primary"
+                hover="color"
+                @click="handleSetGroup(row)"
+              >
+                设置考勤组
+              </t-link>
+            </template>
           </div>
         </template>
       </t-table>
     </div>
 
     <AddUnitDialog
+      v-if="perm.LINK_Update || perm.BUTTON_Add"
       v-model:visible="showAddUnitDialog"
       :curRow="curRow"
       @success="fetchData"
@@ -127,6 +140,8 @@ import {
   serviceUnitPublishApi,
 } from '@/api/service-unit';
 import { useRouter } from 'vue-router';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
 
 const showAddUnitDialog = ref(false);
 const curRow = ref(null);

+ 14 - 3
src/views/sop/sop-manage/device-out-in/index.vue

@@ -2,11 +2,18 @@
   <div class="office-sop flex flex-col h-full">
     <div class="page-action">
       <t-space size="small">
-        <t-button theme="primary" @click="showAddDeviceDialog = true">
+        <t-button
+          v-if="perm.BUTTON_Add"
+          theme="primary"
+          @click="showAddDeviceDialog = true"
+        >
           <template #icon><svg-icon name="add-circle" color="#fff" /></template>
           新增</t-button
         >
-        <t-button theme="default" :disabled="!selectedRowKeys.length"
+        <t-button
+          v-if="perm.BUTTON_Cancel"
+          theme="default"
+          :disabled="!selectedRowKeys.length"
           >作废</t-button
         >
       </t-space>
@@ -56,14 +63,16 @@
         </template>
       </t-table>
     </div>
+
     <AddDeviceDialog
+      v-if="perm.BUTTON_Add"
       v-model:visible="showAddDeviceDialog"
       @success="addSuccess"
     ></AddDeviceDialog>
   </div>
 </template>
 
-<script setup lang="jsx" name="DeviceOutIn">
+<script setup name="DeviceOutIn">
 import { ref, reactive, computed } from 'vue';
 import useFetchTable from '@/hooks/useFetchTable';
 import AddDeviceDialog from './add-device-dialog.vue';
@@ -72,6 +81,8 @@ import { omit } from 'lodash';
 import { DEVICE_USAGE_TYPE, RUNNING_STATUS } from '@/config/constants';
 import { dictToOptionList } from '@/utils/tool';
 import { timestampFilter, runningStatusFilter } from '@/utils/filter';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
 
 const selectedRowKeys = ref([]);
 const selectChange = (value) => {

+ 62 - 43
src/views/sop/sop-manage/office-sop/index.vue

@@ -2,6 +2,7 @@
   <div class="office-sop flex flex-col h-full">
     <div class="page-action">
       <t-button
+        v-if="perm.BUTTON_Cancel"
         theme="primary"
         :disabled="!selectedRowKeys.length"
         @click="handleBatchCancel"
@@ -86,48 +87,60 @@
         </template>
         <template #operate="{ row }">
           <div class="table-operations">
-            <t-link
-              theme="primary"
-              hover="color"
-              @click="editSopFlowHandle(row, 'fill')"
-            >
-              填报
-            </t-link>
-            <t-link
-              theme="primary"
-              hover="color"
-              @click="editSopFlowHandle(row, 'new')"
-            >
-              新增SOP
-            </t-link>
-            <t-link
-              theme="primary"
-              hover="color"
-              @click="createViolationHandle(row)"
-            >
-              新增违规
-            </t-link>
-            <t-link
-              theme="primary"
-              hover="color"
-              @click="createQualityIssueHandle(row)"
-            >
-              上报质量问题
-            </t-link>
-            <t-link
-              theme="primary"
-              hover="color"
-              @click="planChangeHandle(row)"
-            >
-              计划变更报备
-            </t-link>
-            <t-link
-              theme="primary"
-              hover="color"
-              @click="editSopFlowHandle(row, 'edit')"
-            >
-              编辑
-            </t-link>
+            <template v-if="perm.LINK_Fill">
+              <t-link
+                theme="primary"
+                hover="color"
+                @click="editSopFlowHandle(row, 'fill')"
+              >
+                填报
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_AddSop">
+              <t-link
+                theme="primary"
+                hover="color"
+                @click="editSopFlowHandle(row, 'new')"
+              >
+                新增SOP
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_AddViolation">
+              <t-link
+                theme="primary"
+                hover="color"
+                @click="createViolationHandle(row)"
+              >
+                新增违规
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_ProblemSubmit">
+              <t-link
+                theme="primary"
+                hover="color"
+                @click="createQualityIssueHandle(row)"
+              >
+                上报质量问题
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_ProjectExchange">
+              <t-link
+                theme="primary"
+                hover="color"
+                @click="planChangeHandle(row)"
+              >
+                计划变更报备
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_Edit">
+              <t-link
+                theme="primary"
+                hover="color"
+                @click="editSopFlowHandle(row, 'edit')"
+              >
+                编辑
+              </t-link>
+            </template>
           </div>
         </template>
       </t-table>
@@ -135,6 +148,7 @@
 
     <!-- SopStepDialog -->
     <sop-step-dialog
+      v-if="perm.LINK_Edit || perm.LINK_AddSop || perm.LINK_Fill"
       v-model:visible="showSopStepDialog"
       :sop="curSopData"
       :type="curSopType"
@@ -142,6 +156,7 @@
     ></sop-step-dialog>
     <!-- QualityIssueDialog -->
     <quality-issue-dialog
+      v-if="perm.LINK_ProblemSubmit"
       v-model:visible="showQualityIssueDialog"
       :sop="curSopData"
       type="new"
@@ -149,6 +164,7 @@
     ></quality-issue-dialog>
     <!-- PlanChangeDialog -->
     <plan-change-dialog
+      v-if="perm.LINK_ProjectExchange"
       v-model:visible="showPlanChangeDialog"
       :sop="curSopData"
       type="new"
@@ -156,13 +172,14 @@
     ></plan-change-dialog>
     <!-- AddViolationDialog -->
     <add-violation-dialog
+      v-if="perm.LINK_AddViolation"
       v-model:visible="showAddViolationDialog"
       :sop="curSopData"
     ></add-violation-dialog>
   </div>
 </template>
 
-<script setup lang="jsx" name="OfficeSop">
+<script setup name="OfficeSop">
 import { ref, reactive, computed } from 'vue';
 import useFetchTable from '@/hooks/useFetchTable';
 import { sopListApi, sopBatchCancelApi } from '@/api/sop';
@@ -174,6 +191,8 @@ import QualityIssueDialog from '../quality-issue/quality-issue-dialog.vue';
 import PlanChangeDialog from '../plan-change/plan-change-dialog.vue';
 import AddViolationDialog from '../../sop-monitor/violation-registration/add-violation-dialog.vue';
 import { useAppStore } from '@/store';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
 
 const appStore = useAppStore();
 

+ 5 - 2
src/views/sop/sop-manage/project-change-report/index.vue

@@ -38,7 +38,7 @@
           {{ timestampFilter(row[col.colKey]) }}
         </template>
         <template #operate="{ row }">
-          <div class="table-operations">
+          <div v-if="perm.LINK_Finish" class="table-operations">
             <t-link theme="primary" hover="color" @click="handleApply(row)">
               处理申请
             </t-link>
@@ -49,6 +49,7 @@
 
     <!-- PlanChangeDialog -->
     <plan-change-dialog
+      v-if="perm.LINK_Finish"
       v-model:visible="showPlanChangeDialog"
       :sop="curSopData"
       type="audit"
@@ -57,7 +58,7 @@
   </div>
 </template>
 
-<script setup lang="jsx" name="ProjectChangeReport">
+<script setup name="ProjectChangeReport">
 import { ref, reactive, computed } from 'vue';
 import useFetchTable from '@/hooks/useFetchTable';
 import { dictToOptionList } from '@/utils/tool';
@@ -65,6 +66,8 @@ import { omit } from 'lodash';
 import { useRouter } from 'vue-router';
 import { planChangeList } from '@/api/sop';
 import PlanChangeDialog from '../plan-change/plan-change-dialog.vue';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
 
 import {
   PLAN_CHANGE_TYPE,

+ 62 - 36
src/views/sop/sop-manage/student-sop/index.vue

@@ -2,6 +2,7 @@
   <div class="student-sop flex flex-col h-full">
     <div class="page-action">
       <t-button
+        v-if="perm.BUTTON_Cancel"
         theme="primary"
         :disabled="!selectedRowKeys.length"
         @click="handleBatchCancel"
@@ -86,41 +87,60 @@
         </template>
         <template #operate="{ row }">
           <div class="table-operations" @click.stop>
-            <t-link
-              theme="primary"
-              hover="color"
-              @click="editSopFlowHandle(row, 'fill')"
-            >
-              填报
-            </t-link>
-            <t-link
-              theme="primary"
-              hover="color"
-              @click="editSopFlowHandle(row, 'new')"
-            >
-              新增SOP
-            </t-link>
-            <t-link
-              theme="primary"
-              hover="color"
-              @click="createViolationHandle(row)"
-            >
-              新增违规
-            </t-link>
-            <t-link
-              theme="primary"
-              hover="color"
-              @click="createQualityIssueHandle(row)"
-            >
-              上报质量问题
-            </t-link>
-            <t-link
-              theme="primary"
-              hover="color"
-              @click="planChangeHandle(row)"
-            >
-              计划变更报备
-            </t-link>
+            <template v-if="perm.LINK_Fill">
+              <t-link
+                theme="primary"
+                hover="color"
+                @click="editSopFlowHandle(row, 'fill')"
+              >
+                填报
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_AddSop">
+              <t-link
+                theme="primary"
+                hover="color"
+                @click="editSopFlowHandle(row, 'new')"
+              >
+                新增SOP
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_AddViolation">
+              <t-link
+                theme="primary"
+                hover="color"
+                @click="createViolationHandle(row)"
+              >
+                新增违规
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_ProblemSubmit">
+              <t-link
+                theme="primary"
+                hover="color"
+                @click="createQualityIssueHandle(row)"
+              >
+                上报质量问题
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_ProjectExchange">
+              <t-link
+                theme="primary"
+                hover="color"
+                @click="planChangeHandle(row)"
+              >
+                计划变更报备
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_Edit">
+              <t-link
+                theme="primary"
+                hover="color"
+                @click="editSopFlowHandle(row, 'edit')"
+              >
+                编辑
+              </t-link>
+            </template>
           </div>
         </template>
       </t-table>
@@ -128,6 +148,7 @@
 
     <!-- SopStepDialog -->
     <sop-step-dialog
+      v-if="perm.LINK_Edit || perm.LINK_AddSop || perm.LINK_Fill"
       v-model:visible="showSopStepDialog"
       :sop="curSopData"
       :type="curSopType"
@@ -135,6 +156,7 @@
     ></sop-step-dialog>
     <!-- QualityIssueDialog -->
     <quality-issue-dialog
+      v-if="perm.LINK_ProblemSubmit"
       v-model:visible="showQualityIssueDialog"
       :sop="curSopData"
       type="new"
@@ -142,6 +164,7 @@
     ></quality-issue-dialog>
     <!-- PlanChangeDialog -->
     <PlanChangeDialog
+      v-if="perm.LINK_ProjectExchange"
       v-model:visible="showPlanChangeDialog"
       :sop="curSopData"
       type="new"
@@ -149,13 +172,14 @@
     ></PlanChangeDialog>
     <!-- AddViolationDialog -->
     <add-violation-dialog
+      v-if="perm.LINK_AddViolation"
       v-model:visible="showAddViolationDialog"
       :sop="curSopData"
     ></add-violation-dialog>
   </div>
 </template>
 
-<script setup lang="jsx" name="StudentSop">
+<script setup name="StudentSop">
 import { ref, reactive, computed } from 'vue';
 import useFetchTable from '@/hooks/useFetchTable';
 import { sopListApi, sopBatchCancelApi } from '@/api/sop';
@@ -167,6 +191,8 @@ import QualityIssueDialog from '../quality-issue/quality-issue-dialog.vue';
 import PlanChangeDialog from '../plan-change/plan-change-dialog.vue';
 import AddViolationDialog from '../../sop-monitor/violation-registration/add-violation-dialog.vue';
 import { useAppStore } from '@/store';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
 
 const appStore = useAppStore();
 

+ 34 - 25
src/views/sop/sop-monitor/delay-warning/index.vue

@@ -36,30 +36,36 @@
         </template>
         <template #operate="{ row }">
           <div class="table-operations">
-            <t-link
-              v-if="row.status !== 'CLOSE'"
-              theme="primary"
-              hover="color"
-              @click="handleFollow(row)"
-            >
-              跟进
-            </t-link>
-            <t-link
-              v-if="row.status === 'CLOSE'"
-              theme="primary"
-              hover="color"
-              @click="restartHandler(row)"
-            >
-              重启
-            </t-link>
-            <t-link
-              v-else
-              theme="primary"
-              hover="color"
-              @click="closeHandler(row)"
-            >
-              关闭
-            </t-link>
+            <template v-if="perm.LINK_Follow">
+              <t-link
+                v-if="row.status !== 'CLOSE'"
+                theme="primary"
+                hover="color"
+                @click="handleFollow(row)"
+              >
+                跟进
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_Restart">
+              <t-link
+                v-if="row.status === 'CLOSE'"
+                theme="primary"
+                hover="color"
+                @click="restartHandler(row)"
+              >
+                重启
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_Close">
+              <t-link
+                v-if="row.status !== 'CLOSE'"
+                theme="primary"
+                hover="color"
+                @click="closeHandler(row)"
+              >
+                关闭
+              </t-link>
+            </template>
           </div>
         </template>
       </t-table>
@@ -67,6 +73,7 @@
 
     <!-- DelayWarnFlowDialog -->
     <delay-warn-flow-dialog
+      v-if="perm.LINK_Follow"
       v-model:visible="showDelayWarnFlowDialog"
       :curRow="curRow"
       @success="fetchData"
@@ -74,7 +81,7 @@
   </div>
 </template>
 
-<script setup lang="jsx" name="DelayWarning">
+<script setup name="DelayWarning">
 import { reactive, ref, computed } from 'vue';
 import { getDelayWarnList, closeDelayWarn, restartDelayWarn } from '@/api/sop';
 import useFetchTable from '@/hooks/useFetchTable';
@@ -84,6 +91,8 @@ import { omit } from 'lodash';
 import { DialogPlugin, MessagePlugin } from 'tdesign-vue-next';
 import { warnTypeFilter, timestampFilter } from '@/utils/filter';
 import DelayWarnFlowDialog from './flow-dialog';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
 
 const showDelayWarnFlowDialog = ref(false);
 const curRow = ref({});

+ 34 - 25
src/views/sop/sop-monitor/violation-registration/index.vue

@@ -51,30 +51,36 @@
         </template>
         <template #operate="{ row }">
           <div class="table-operations">
-            <t-link
-              v-if="row.status !== 'CLOSE'"
-              theme="primary"
-              hover="color"
-              @click="handleFollow(row)"
-            >
-              跟进
-            </t-link>
-            <t-link
-              v-if="row.status === 'CLOSE'"
-              theme="primary"
-              hover="color"
-              @click="restartHandler(row)"
-            >
-              重启
-            </t-link>
-            <t-link
-              v-else
-              theme="primary"
-              hover="color"
-              @click="closeHandler(row)"
-            >
-              关闭
-            </t-link>
+            <template v-if="perm.LINK_Follow">
+              <t-link
+                v-if="row.status !== 'CLOSE'"
+                theme="primary"
+                hover="color"
+                @click="handleFollow(row)"
+              >
+                跟进
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_Restart">
+              <t-link
+                v-if="row.status === 'CLOSE'"
+                theme="primary"
+                hover="color"
+                @click="restartHandler(row)"
+              >
+                重启
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_Close">
+              <t-link
+                v-if="row.status !== 'CLOSE'"
+                theme="primary"
+                hover="color"
+                @click="closeHandler(row)"
+              >
+                关闭
+              </t-link>
+            </template>
           </div>
         </template>
       </t-table>
@@ -82,6 +88,7 @@
 
     <!-- FlowDialog -->
     <violation-flow-dialog
+      v-if="perm.LINK_Follow"
       v-model:visible="showViolationFlowDialog"
       :curRow="curRow"
       @confirm="fetchData"
@@ -89,7 +96,7 @@
   </div>
 </template>
 
-<script setup lang="jsx" name="ViolationRegistration">
+<script setup name="ViolationRegistration">
 import { reactive, ref, computed } from 'vue';
 import { getViolationList, closeViolation, restartViolation } from '@/api/sop';
 
@@ -100,6 +107,8 @@ import { omit } from 'lodash';
 import { DialogPlugin, MessagePlugin } from 'tdesign-vue-next';
 import { violationTypeFilter, timestampFilter } from '@/utils/filter';
 import ViolationFlowDialog from './flow-dialog.vue';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
 
 const showViolationFlowDialog = ref(false);
 const curRow = ref({});

+ 16 - 3
src/views/system/config-manage/checkin-manage/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="flex flex-col h-full">
-    <div class="page-action">
+    <div v-if="perm.BUTTON_Add" class="page-action">
       <t-button theme="primary" @click="handleAdd">
         <template #icon><svg-icon name="add-circle" color="#fff" /></template
         >新增考勤配置
@@ -85,10 +85,20 @@
         </template>
         <template #operate="{ row }">
           <div class="table-operations">
-            <t-link theme="primary" hover="color" @click="handleEdit(row)">
+            <t-link
+              v-if="perm.LINK_Update"
+              theme="primary"
+              hover="color"
+              @click="handleEdit(row)"
+            >
               修改
             </t-link>
-            <t-link theme="primary" hover="color" @click="handleDelete(row)">
+            <t-link
+              v-if="perm.LINK_Delete"
+              theme="primary"
+              hover="color"
+              @click="handleDelete(row)"
+            >
               删除
             </t-link>
           </div>
@@ -97,6 +107,7 @@
     </div>
 
     <edit-checkin-dialog
+      v-if="perm.LINK_Update || perm.BUTTON_Add"
       v-model:visible="showEditCheckinDialog"
       :curRow="curRow"
       @success="fetchData"
@@ -115,6 +126,8 @@ import { timestampFilter } from '@/utils/filter';
 import { SERVICE_UNIT_STATUS } from '@/config/constants';
 import { dictToOptionList } from '@/utils/tool';
 import { omit } from 'lodash';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
 
 const showEditCheckinDialog = ref(false);
 const curRow = ref(null);

+ 20 - 4
src/views/system/config-manage/customer-manage/index.vue

@@ -2,11 +2,14 @@
   <div class="flex flex-col h-full">
     <div class="page-action">
       <t-space size="small">
-        <t-button theme="primary" @click="handleAdd">
+        <t-button v-if="perm.BUTTON_Add" theme="primary" @click="handleAdd">
           <template #icon><svg-icon name="add-circle" color="#fff" /></template
           >新增客户
         </t-button>
-        <upload-button upload-url="/api/sys/custom/import">
+        <upload-button
+          v-if="perm.BUTTON_BatchImport"
+          upload-url="/api/sys/custom/import"
+        >
           <t-button variant="outline">
             <template #icon><svg-icon name="import" color="#262626" /></template
             >批量导入
@@ -55,10 +58,20 @@
         </template>
         <template #operate="{ row }">
           <div class="table-operations">
-            <t-link theme="primary" hover="color" @click="handleEdit(row)">
+            <t-link
+              v-if="perm.LINK_Update"
+              theme="primary"
+              hover="color"
+              @click="handleEdit(row)"
+            >
               修改
             </t-link>
-            <t-link theme="primary" hover="color" @click="handleDelete(row)">
+            <t-link
+              v-if="perm.LINK_Delete"
+              theme="primary"
+              hover="color"
+              @click="handleDelete(row)"
+            >
               删除
             </t-link>
           </div>
@@ -67,6 +80,7 @@
     </div>
 
     <edit-customer-dialog
+      v-if="perm.LINK_Update || perm.BUTTON_Add"
       v-model:visible="showEditCustomerDialog"
       :curRow="curRow"
       @success="fetchData"
@@ -83,6 +97,8 @@ import { customerQueryApi, customerDeleteApi } from '@/api/system';
 import { CUSTOMER_TYPE } from '@/config/constants';
 import { dictToOptionList } from '@/utils/tool';
 import { customerTypeFilter, timestampFilter } from '@/utils/filter';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
 
 const showEditCustomerDialog = ref(false);
 const curRow = ref(null);

+ 18 - 3
src/views/system/config-manage/device-manage/index.vue

@@ -2,11 +2,12 @@
   <div class="flex flex-col h-full">
     <div class="page-action">
       <t-space size="small">
-        <t-button theme="primary" @click="handleAdd">
+        <t-button v-if="perm.BUTTON_Add" theme="primary" @click="handleAdd">
           <template #icon><svg-icon name="add-circle" color="#fff" /></template
           >新增设备
         </t-button>
         <t-button
+          v-if="perm.BUTTON_Cancel"
           variant="outline"
           :disabled="!selectedRowKeys.length"
           @click="handleDestroy"
@@ -15,6 +16,7 @@
           批量作废
         </t-button>
         <t-button
+          v-if="perm.BUTTON_BatchEnable"
           variant="outline"
           :disabled="!selectedRowKeys.length"
           @click="handleEnable(selectedRowKeys, true)"
@@ -23,6 +25,7 @@
           批量启用
         </t-button>
         <t-button
+          v-if="perm.BUTTON_BatchUnEnable"
           variant="outline"
           :disabled="!selectedRowKeys.length"
           @click="handleEnable(selectedRowKeys, false)"
@@ -30,7 +33,10 @@
           <template #icon><svg-icon name="delete" color="#262626" /></template>
           批量禁用
         </t-button>
-        <upload-button upload-url="/api/sys/device/import">
+        <upload-button
+          v-if="perm.BUTTON_BatchImport"
+          upload-url="/api/sys/device/import"
+        >
           <t-button variant="outline">
             <template #icon><svg-icon name="import" color="#262626" /></template
             >批量导入
@@ -95,10 +101,16 @@
         </template>
         <template #operate="{ row }">
           <div class="table-operations">
-            <t-link theme="primary" hover="color" @click="handleEdit(row)">
+            <t-link
+              v-if="perm.LINK_Update"
+              theme="primary"
+              hover="color"
+              @click="handleEdit(row)"
+            >
               修改
             </t-link>
             <t-link
+              v-if="perm.LINK_Enable"
               theme="primary"
               hover="color"
               @click="handleEnable([row.id], !row.enable)"
@@ -111,6 +123,7 @@
     </div>
 
     <edit-device-dialog
+      v-if="perm.LINK_Update || perm.BUTTON_Add"
       v-model:visible="showEditDeviceDialog"
       :curRow="curRow"
       :brand-list="brandList"
@@ -137,6 +150,8 @@ import {
 } from '@/utils/filter';
 import { dictToOptionList } from '@/utils/tool';
 import { ABLE_TYPE, RUNNING_STATUS, INOUT_TYPE } from '@/config/constants';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
 
 const showEditDeviceDialog = ref(false);
 const curRow = ref(null);

+ 16 - 3
src/views/system/config-manage/service-level-manage/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="flex flex-col h-full">
-    <div class="page-action page-header">
+    <div v-if="perm.BUTTON_Add" class="page-action page-header">
       <t-button theme="primary" @click="handleAdd">
         <template #icon><svg-icon name="add-circle" color="#fff" /></template
         >新增服务档位
@@ -41,10 +41,20 @@
         </template>
         <template #operate="{ row }">
           <div class="table-operations">
-            <t-link theme="primary" hover="color" @click="handleEdit(row)">
+            <t-link
+              v-if="perm.LINK_Update"
+              theme="primary"
+              hover="color"
+              @click="handleEdit(row)"
+            >
               修改
             </t-link>
-            <t-link theme="primary" hover="color" @click="handleDelete(row)">
+            <t-link
+              v-if="perm.LINK_Delete"
+              theme="primary"
+              hover="color"
+              @click="handleDelete(row)"
+            >
               删除
             </t-link>
           </div>
@@ -53,6 +63,7 @@
     </div>
 
     <edit-service-level-dialog
+      v-if="perm.LINK_Update || perm.BUTTON_Add"
       v-model:visible="showEditServiceLevelDialog"
       :curRow="curRow"
       @success="fetchData"
@@ -67,6 +78,8 @@ import useFetchTable from '@/hooks/useFetchTable';
 import EditServiceLevelDialog from './edit-service-level-dialog.vue';
 import { serviceLevelQueryApi, serviceLevelDeleteApi } from '@/api/system';
 import { customerTypeFilter, timestampFilter } from '@/utils/filter';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
 
 const showEditServiceLevelDialog = ref(false);
 const curRow = ref(null);

+ 17 - 5
src/views/system/config-manage/supplier-manage/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="flex flex-col h-full">
-    <div class="page-action page-header">
+    <div v-if="perm.BUTTON_Add" class="page-action page-header">
       <t-button theme="primary" @click="handleAdd">
         <template #icon><svg-icon name="add-circle" color="#fff" /></template
         >新增供应商
@@ -31,12 +31,21 @@
         </template>
         <template #operate="{ row }">
           <div class="table-operations">
-            <t-link theme="primary" hover="color" @click="handleEdit(row)">
+            <t-link
+              v-if="perm.LINK_Update"
+              theme="primary"
+              hover="color"
+              @click="handleEdit(row)"
+            >
               修改
             </t-link>
-            <t-link theme=" primary" hover="color" @click="handleEnable(row)">{{
-              enableFilter(!row.enable)
-            }}</t-link>
+            <t-link
+              v-if="perm.LINK_Enable"
+              theme=" primary"
+              hover="color"
+              @click="handleEnable(row)"
+              >{{ enableFilter(!row.enable) }}</t-link
+            >
           </div>
         </template>
       </t-table>
@@ -44,6 +53,7 @@
 
     <!-- EditSupplierDialog -->
     <edit-supplier-dialog
+      v-if="perm.LINK_Update || perm.BUTTON_Add"
       v-model:visible="showEditSupplierDialog"
       :curRow="curRow"
       @success="fetchData"
@@ -58,6 +68,8 @@ import useFetchTable from '@/hooks/useFetchTable';
 import EditSupplierDialog from './edit-supplier-dialog.vue';
 import { supplierQueryApi, supplierEnableApi } from '@/api/system';
 import { enableFilter, supplierTypeFilter } from '@/utils/filter';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
 
 const showEditSupplierDialog = ref(false);
 const curRow = ref(null);

+ 46 - 33
src/views/system/notice-log/notice-manage/index.vue

@@ -1,11 +1,12 @@
 <template>
   <div class="flex flex-col h-full">
     <div class="page-action">
-      <t-button theme="primary" @click="handleAdd">
+      <t-button v-if="perm.BUTTON_Add" theme="primary" @click="handleAdd">
         <template #icon><svg-icon name="add-circle" color="#fff" /></template
         >新增通知公告
       </t-button>
       <t-button
+        v-if="perm.BUTTON_Cancel"
         variant="outline"
         :disabled="!selectedRowKeys.length"
         @click="handleDestroy"
@@ -54,50 +55,60 @@
         </template>
         <template #operate="{ col, row }">
           <div class="table-operations">
-            <t-link
-              v-if="row.status === 'PUBLISH'"
-              theme="danger"
-              hover="color"
-              @click="handleCancelPublish(row)"
-            >
-              撤销发布
-            </t-link>
-            <t-link
-              v-else
-              theme="primary"
-              hover="color"
-              @click="handlePublish(row)"
-            >
-              发布
-            </t-link>
-            <t-link
-              v-if="row.status === 'PUBLISH'"
-              theme="primary"
-              hover="color"
-              @click="handleFeedbackView(row)"
-            >
-              回执查询
-            </t-link>
-            <t-link
-              v-if="row.status !== 'PUBLISH'"
-              theme="primary"
-              hover="color"
-              @click="handleEdit(row)"
-            >
-              修改
-            </t-link>
+            <template v-if="perm.LINK_Cancel">
+              <t-link
+                v-if="row.status === 'PUBLISH'"
+                theme="danger"
+                hover="color"
+                @click="handleCancelPublish(row)"
+              >
+                撤销发布
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_Publish">
+              <t-link
+                v-if="row.status !== 'PUBLISH'"
+                theme="primary"
+                hover="color"
+                @click="handlePublish(row)"
+              >
+                发布
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_Select">
+              <t-link
+                v-if="row.status === 'PUBLISH'"
+                theme="primary"
+                hover="color"
+                @click="handleFeedbackView(row)"
+              >
+                回执查询
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_Update">
+              <t-link
+                v-if="row.status !== 'PUBLISH'"
+                theme="primary"
+                hover="color"
+                @click="handleEdit(row)"
+              >
+                修改
+              </t-link>
+            </template>
           </div>
         </template>
       </t-table>
     </div>
 
     <edit-notice-dialog
+      v-if="perm.LINK_Update || perm.BUTTON_Add"
       v-model:visible="showEditNoticeDialog"
       :curRow="curRow"
       @success="fetchData"
     ></edit-notice-dialog>
     <!-- NoticeMessageDialog -->
     <notice-message-dialog
+      v-if="perm.LINK_Select"
       v-model:visible="showNoticeMessageDialog"
       :curRow="curRow"
     ></notice-message-dialog>
@@ -120,6 +131,8 @@ import {
 import { dictToOptionList } from '@/utils/tool';
 import { NOTICE_TYPE, PUBLISH_STATUS } from '@/config/constants';
 import { noticeTypeFilter, timestampFilter } from '@/utils/filter';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
 
 const showEditNoticeDialog = ref(false);
 const showNoticeMessageDialog = ref(false);

+ 22 - 24
src/views/system/task/task-manage/index.vue

@@ -24,30 +24,26 @@
         </template>
         <template #operate="{ col, row }">
           <div class="table-operations">
-            <t-link
-              v-if="row.hasReportFile"
-              theme="primary"
-              hover="color"
-              @click="handleDownload(row, 'REPORT_FILE')"
-            >
-              导出日志
-            </t-link>
-            <t-link
-              v-if="row.hasResultFile"
-              theme="primary"
-              hover="color"
-              @click="handleDownload(row, 'EXPORT_FILE')"
-            >
-              下载文件
-            </t-link>
-            <!-- <t-link
-              v-if="row.hasImportFile"
-              theme="primary"
-              hover="color"
-              @click="handleDownload(row, 'IMPORT_FILE')"
-            >
-              下载导入文件
-            </t-link> -->
+            <template v-if="perm.LINK_Export">
+              <t-link
+                v-if="row.hasReportFile"
+                theme="primary"
+                hover="color"
+                @click="handleDownload(row, 'REPORT_FILE')"
+              >
+                导出日志
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_Download">
+              <t-link
+                v-if="row.hasResultFile"
+                theme="primary"
+                hover="color"
+                @click="handleDownload(row, 'EXPORT_FILE')"
+              >
+                下载文件
+              </t-link>
+            </template>
           </div>
         </template>
       </t-table>
@@ -69,6 +65,8 @@ import {
   DATA_TASK_TYPE,
 } from '@/config/constants';
 import { timestampFilter } from '@/utils/filter';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
 
 const fields = ref([
   {

+ 6 - 3
src/views/user/auth-manage/role-manage/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="role h-full">
-    <div v-perm="'role_BUTTON_Add'" class="page-action page-header">
+    <div v-if="perm.BUTTON_Add" class="page-action page-header">
       <t-button theme="primary" @click="handleAdd">
         <template #icon><svg-icon name="add-circle" color="#fff" /></template>
         新增角色
@@ -26,7 +26,7 @@
         <template #operate="{ row }">
           <div class="table-operations">
             <t-link
-              v-perm="'role_LINK_Update'"
+              v-if="perm.LINK_Update"
               theme="primary"
               hover="color"
               @click="handleEdit(row)"
@@ -34,7 +34,7 @@
               修改
             </t-link>
             <t-link
-              v-perm="'role_LINK_Delete'"
+              v-if="perm.LINK_Delete"
               theme="primary"
               hover="color"
               @click="handleDelete(row)"
@@ -48,6 +48,7 @@
 
     <!-- EditRoleDialog -->
     <edit-role-dialog
+      v-if="perm.BUTTON_Add || perm.LINK_Update"
       v-model:visible="showEditRoleDialog"
       :curRow="curRow"
       @success="fetchData"
@@ -61,6 +62,8 @@ import useFetchTable from '@/hooks/useFetchTable';
 import { getRoleList, deleteRole } from '@/api/user';
 import EditRoleDialog from './edit-role-dialog.vue';
 import { ref } from 'vue';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
 
 const showEditRoleDialog = ref(false);
 const curRow = ref(null);

+ 10 - 5
src/views/user/auth-manage/user-manage/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="user h-full">
-    <div v-perm="'user_BUTTON_Add'" class="page-action page-header">
+    <div v-if="perm.BUTTON_Add" class="page-action page-header">
       <t-button theme="primary" @click="handleAdd">
         <template #icon><svg-icon name="add-circle" color="#fff" /></template>
         新增用户
@@ -32,7 +32,7 @@
         <template #operate="{ row }">
           <div class="table-operations">
             <t-link
-              v-perm="'user_LINK_UpdatePwd'"
+              v-if="perm.LINK_UpdatePwd"
               theme="primary"
               hover="color"
               @click="handleModifyPwd(row)"
@@ -41,7 +41,7 @@
             </t-link>
 
             <t-link
-              v-perm="'user_LINK_Update'"
+              v-if="perm.LINK_Update"
               theme="primary"
               hover="color"
               @click="handleEdit(row)"
@@ -49,7 +49,7 @@
               修改
             </t-link>
             <t-link
-              v-perm="'user_LINK_Enable'"
+              v-if="perm.LINK_Enable"
               theme="primary"
               hover="color"
               @click="handleEnable(row)"
@@ -62,12 +62,14 @@
     </div>
 
     <AddUserDialog
+      v-if="perm.BUTTON_Add || perm.LINK_Update"
       v-model:visible="showAddUserDialog"
       :curRow="curRow"
       @success="addSuccess"
     ></AddUserDialog>
 
     <UpdateUserPwdDialog
+      v-if="perm.LINK_UpdatePwd"
       v-model:visible="showUpdateUserPwdDialog"
       :curRow="curRow"
       @success="updatePwdSuccess"
@@ -76,7 +78,7 @@
   </div>
 </template>
 
-<script setup name="User" lang="jsx">
+<script setup name="User">
 import { ref } from 'vue';
 import { getUserList } from '@/api/user';
 import useFetchTable from '@/hooks/useFetchTable';
@@ -84,6 +86,9 @@ import AddUserDialog from './add-user-dialog.vue';
 import UpdateUserPwdDialog from './update-user-pwd-dialog.vue';
 import { toggleUserStatus } from '@/api/user';
 import { DialogPlugin, MessagePlugin } from 'tdesign-vue-next';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
+
 const showAddUserDialog = ref(false);
 const showUpdateUserPwdDialog = ref(false);
 const curRow = ref(null);

+ 23 - 5
src/views/user/org-struct-manage/struct-manage/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="struct-manage h-full">
-    <div v-perm="'org_BUTTON_Add'" class="page-action page-header">
+    <div v-if="perm.BUTTON_Add" class="page-action page-header">
       <t-button theme="primary" @click="handleAdd">
         <template #icon><svg-icon name="add-circle" color="#fff" /></template>
         新增管理节点
@@ -24,13 +24,28 @@
         </template>
         <template #operate="{ row }">
           <div class="table-operations">
-            <t-link theme="primary" hover="color" @click="handleAdd(row)">
+            <t-link
+              v-if="perm.BUTTON_Add"
+              theme="primary"
+              hover="color"
+              @click="handleAdd(row)"
+            >
               新增
             </t-link>
-            <t-link theme="primary" hover="color" @click="handleEdit(row)">
+            <t-link
+              v-if="perm.LINK_Update"
+              theme="primary"
+              hover="color"
+              @click="handleEdit(row)"
+            >
               修改
             </t-link>
-            <t-link theme="primary" hover="color" @click="handleEnable(row)">
+            <t-link
+              v-if="perm.LINK_Enable"
+              theme="primary"
+              hover="color"
+              @click="handleEnable(row)"
+            >
               {{ enableFilter(!row.enable) }}
             </t-link>
             <!-- <t-link theme="primary" hover="color" @click="handleDelete(row)">
@@ -42,6 +57,7 @@
     </div>
 
     <AddNodeDialog
+      v-if="perm.BUTTON_Add || perm.LINK_Update"
       v-model:visible="showAddNodeDialog"
       :curRow="curRow"
       :orgTreeList="tableData || []"
@@ -50,7 +66,7 @@
   </div>
 </template>
 
-<script setup name="StructManage" lang="jsx">
+<script setup name="StructManage">
 import { computed, ref } from 'vue';
 import { MessagePlugin } from 'tdesign-vue-next';
 import { useRequest } from 'vue-request';
@@ -58,6 +74,8 @@ import { getOrgStructList, toggleOrgNodeStatus } from '@/api/user';
 import AddNodeDialog from './add-node-dialog.vue';
 import { enableFilter } from '@/utils/filter';
 import { omit } from 'lodash';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
 const showAddNodeDialog = ref(false);
 const curRow = ref({});
 

+ 6 - 0
src/views/work-hours/work-hours-manage/abnormal-check/wait-check.vue

@@ -2,6 +2,7 @@
   <div class="wait-check">
     <div class="page-action">
       <t-button
+        v-if="perm.BUTTON_BatchPass"
         variant="outline"
         :disabled="!selectedRowKeys.length"
         @click="handleAudit(selectedRowKeys, true)"
@@ -10,6 +11,7 @@
         >批量通过
       </t-button>
       <t-button
+        v-if="perm.BUTTON_BatchNoPass"
         variant="outline"
         :disabled="!selectedRowKeys.length"
         @click="handleAudit(selectedRowKeys, false)"
@@ -57,6 +59,7 @@
         <template #operate="{ row }">
           <div class="table-operations" @click.stop>
             <t-link
+              v-if="perm.LINK_Pass"
               theme="primary"
               hover="color"
               @click="handleAudit([row.taskId], true)"
@@ -64,6 +67,7 @@
               通过
             </t-link>
             <t-link
+              v-if="perm.LINK_NoPass"
               theme="danger"
               hover="color"
               @click="handleAudit([row.taskId], false)"
@@ -88,6 +92,8 @@ import {
   workHoursWaitCheckAuditApi,
 } from '@/api/work-hours';
 import { timestampFilter, customerTypeFilter } from '@/utils/filter';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
 
 const selectedRowKeys = ref([]);
 const selectChange = (value) => {

+ 32 - 24
src/views/work-hours/work-hours-manage/work-attendance/index.vue

@@ -2,12 +2,14 @@
   <div class="flex flex-col h-full">
     <div class="page-action">
       <t-button
+        v-if="perm.BUTTON_BatchSubmit"
         theme="primary"
         :disabled="!selectedRowKeys.length"
         @click="multSubmit"
         >批量提交</t-button
       >
       <t-button
+        v-if="perm.BUTTON_BatchExport"
         theme="primary"
         :disabled="!selectedRowKeys.length"
         @click="multExport"
@@ -77,30 +79,34 @@
         </template>
         <template #operate="{ row }">
           <div class="table-operations" @click.stop>
-            <t-link
-              v-if="row.submitStatus === 'WILL_SUBMIT'"
-              theme="primary"
-              hover="color"
-              @click="handleSubmit(row)"
-            >
-              提交
-            </t-link>
-            <t-link
-              v-if="row.submitStatus === 'ALREADY_SUBMIT'"
-              theme="primary"
-              hover="color"
-              @click="handleWithdraw(row)"
-            >
-              撤回
-            </t-link>
-            <t-link
-              v-if="row.submitStatus === 'APPLY_WITHDRAW'"
-              theme="primary"
-              hover="color"
-              @click="handleCancelWithdraw(row)"
-            >
-              取消撤回
-            </t-link>
+            <template v-if="perm.LINK_Submit">
+              <t-link
+                v-if="row.submitStatus === 'WILL_SUBMIT'"
+                theme="primary"
+                hover="color"
+                @click="handleSubmit(row)"
+              >
+                提交
+              </t-link>
+            </template>
+            <template v-if="perm.LINK_Reject">
+              <t-link
+                v-if="row.submitStatus === 'ALREADY_SUBMIT'"
+                theme="primary"
+                hover="color"
+                @click="handleWithdraw(row)"
+              >
+                撤回
+              </t-link>
+              <t-link
+                v-if="row.submitStatus === 'APPLY_WITHDRAW'"
+                theme="primary"
+                hover="color"
+                @click="handleCancelWithdraw(row)"
+              >
+                取消撤回
+              </t-link>
+            </template>
           </div>
         </template>
       </t-table>
@@ -127,6 +133,8 @@ import {
   roleTypeFilter,
 } from '@/utils/filter';
 import { randomCode } from '@/utils/tool';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
 
 const selectedRowKeys = ref([]);
 const selectedRowDatas = ref([]);

+ 4 - 2
src/views/work-hours/work-hours-manage/work-statistics/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="work-statistics flex flex-col h-full">
-    <div class="page-action">
+    <div v-if="perm.BUTTON_Export" class="page-action">
       <t-button theme="primary" @click="handleExport">
         <template #icon><svg-icon name="export" color="#fff" /></template
         >导出统计结果
@@ -65,7 +65,7 @@
           {{ flowStatusFilter(row[col.colKey]) }}
         </template>
         <template #operate="{ row }">
-          <div class="table-operations">
+          <div v-if="perm.LINK_Reject" class="table-operations">
             <t-link
               v-if="row.status === 'AUDITING'"
               theme="primary"
@@ -95,6 +95,8 @@ import {
 import { timestampFilter, flowStatusFilter } from '@/utils/filter';
 import { FLOW_STATUS } from '@/config/constants';
 import { dictToOptionList } from '@/utils/tool';
+import usePermission from '@/hooks/usePermission';
+const { perm } = usePermission();
 
 const fields = ref([
   {