From 4692aca991b499f09dcd9fc44804795321961576 Mon Sep 17 00:00:00 2001
From: loulijun2021 <1694218219@qq.com>
Date: 星期五, 28 七月 2023 15:56:35 +0800
Subject: [PATCH] 1.角色权限demo

---
 src/utils/request.js                       |    2 
 src/views/login/index.vue                  |    1 
 src/layout/components/Navbar.vue           |    2 
 package.json                               |    1 
 src/router/index.js                        | 1229 ++++++++++++++++++++--------------------
 src/views/basicSettings/rolePermission.vue |  538 +++++++++++++++++
 6 files changed, 1,161 insertions(+), 612 deletions(-)

diff --git a/package.json b/package.json
index b3b1b5c..3e0a585 100644
--- a/package.json
+++ b/package.json
@@ -40,6 +40,7 @@
     "vue-easy-print": "0.0.8",
     "vue-print-nb": "^1.7.5",
     "vue-router": "3.0.6",
+    "vue-splitpane": "^1.0.6",
     "vuedraggable": "^2.24.3"
   },
   "devDependencies": {
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
index 88cc92e..620839c 100644
--- a/src/layout/components/Navbar.vue
+++ b/src/layout/components/Navbar.vue
@@ -239,7 +239,7 @@
     this.stu_torgname = getCookie('stu_torgname') === '' ? '绯荤粺绠$悊鍛�' : getCookie('stu_torgname')
   },
   mounted() {
-    this.getHubConnectionBuilder()
+    // this.getHubConnectionBuilder()
   },
   computed: {
     ...mapGetters([
diff --git a/src/router/index.js b/src/router/index.js
index 60e4598..0bc14a8 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -84,6 +84,625 @@
   }
   // { path: '*', redirect: '/404', hidden: true }
 ]
+
+// 鏈笂浜戞ā鍧�
+export const asyncRoutes = [
+  // {
+  //   path: '/gtt',
+  //   component: Layout,
+  //   redirect: '/gtt/back',
+  //   name: '鍩虹璁剧疆',
+  //   code: '1001',
+  //   meta: { code: '1001', title: '鍩虹璁剧疆', icon: 'tree' },
+  //   alwaysShow: true, // 褰揷hildren鍙湁涓�涓椂锛屼篃鏄剧ず鐖惰彍鍗�
+  //   children: [{
+  //     path: 'back',
+  //     name: 'YYQDCancel',
+  //     code: '1011',
+  //     component: () => import('@/views/gantt_back/gantt_back'),
+  //     meta: { code: '1011', title: '鐢ㄦ埛娓呭崟', icon: '', keepAlive: true }
+  //   }, {
+  //     path: 'zdpc2',
+  //     name: 'YYQDCancel',
+  //     code: '1012',
+  //     component: () => import('@/views/gantt_back/zdpc2'),
+  //     meta: { code: '1012', title: '鑷姩鎺掔▼2', icon: '', keepAlive: true }
+  //   }]
+  // },
+  {
+    path: '/basicSettings',
+    component: Layout,
+    redirect: '/basicSettings/organizationList',
+    name: '鍩虹璁剧疆',
+    code: '1001',
+    meta: { code: '1001', title: '鍩虹璁剧疆', icon: 'tree2' },
+    alwaysShow: true, // 褰揷hildren鍙湁涓�涓椂锛屼篃鏄剧ず鐖惰彍鍗�
+    children: [
+      {
+        path: 'organizationList',
+        name: 'organizationListCancel',
+        code: '1010',
+        component: () => import('@/views/basicSettings/organizationList'),
+        meta: { code: '1010', title: '缁勭粐鏋舵瀯', icon: '', keepAlive: true }
+      }, {
+        path: 'userList',
+        name: 'userListCancel',
+        code: '1011',
+        component: () => import('@/views/basicSettings/userList'),
+        meta: { code: '1011', title: '鐢ㄦ埛娓呭崟', icon: '', keepAlive: true }
+      }, {
+        path: 'roleList',
+        name: 'roleListCancel',
+        code: '1012',
+        component: () => import('@/views/basicSettings/roleList'),
+        meta: { code: '1012', title: '瑙掕壊娓呭崟', icon: '', keepAlive: true }
+      }, {
+        path: 'contactUnitList',
+        name: 'contactUnitListCancel',
+        code: '1013',
+        component: () => import('@/views/basicSettings/contactUnitList'),
+        meta: { code: '1013', title: '寰�鏉ュ崟浣�', icon: '', keepAlive: true }
+      }, {
+        path: 'rolePermission',
+        name: 'rolePermissionCancel',
+        code: '1014',
+        component: () => import('@/views/basicSettings/rolePermission'),
+        meta: { code: '1014', title: '瀹夌伅璁剧疆', icon: '', keepAlive: true }
+      }
+      // {
+      //   path: 'installationLampSetting',
+      //   name: 'installationLampSettingCancel',
+      //   code: '1014',
+      //   component: () => import('@/views/basicSettings/installationLampSetting'),
+      //   meta: { code: '1014', title: '瀹夌伅璁剧疆', icon: '', keepAlive: true }
+      // }
+    ]
+  },
+  {
+    path: '/deviceManager',
+    component: Layout,
+    redirect: '/deviceManager/deviceType',
+    name: '璁惧绠$悊',
+    code: '1002',
+    meta: { code: '1002', title: '璁惧绠$悊', icon: 'example' },
+    alwaysShow: true,
+    children: [
+      {
+        path: 'deviceType',
+        name: 'deviceTypeCancel',
+        code: '1020',
+        component: () => import('@/views/deviceManager/deviceType'),
+        meta: { code: '1020', title: '璁惧绫诲瀷', icon: '', keepAlive: true }
+      },
+      {
+        path: 'deviceGroup',
+        name: 'deviceGroupCancel',
+        code: '1021',
+        component: () => import('@/views/deviceManager/deviceGroup'),
+        meta: { code: '1021', title: '璁惧缁�', icon: '', keepAlive: true }
+      }, {
+        path: 'deviceList',
+        name: 'deviceListCancel',
+        code: '1022',
+        component: () => import('@/views/deviceManager/deviceList'),
+        meta: { code: '1022', title: '璁惧娓呭崟', icon: '', keepAlive: true }
+      },
+      {
+        path: 'checkStandard',
+        name: 'checkStandardCancel',
+        code: '1023',
+        component: () => import('@/views/deviceManager/checkStandard'),
+        meta: { code: '1023', title: '鐐规鏍囧噯', icon: '', keepAlive: true }
+      },
+      {
+        path: 'checkPosition',
+        name: 'checkPositionCancel',
+        code: '1024',
+        component: () => import('@/views/deviceManager/checkPosition'),
+        meta: { code: '1024', title: '鐐规閮ㄤ綅', icon: '', keepAlive: true }
+      },
+      {
+        path: 'maintainStandard',
+        name: 'maintainStandardCancel',
+        code: '1025',
+        component: () => import('@/views/deviceManager/maintainStandard'),
+        meta: { code: '1025', title: '淇濆吇鏍囧噯', icon: '', keepAlive: true }
+      },
+      {
+        path: 'maintainPosition',
+        name: 'maintainPositionCancel',
+        code: '1026',
+        component: () => import('@/views/deviceManager/maintainPosition'),
+        meta: { code: '1026', title: '淇濆吇閮ㄤ綅', icon: '', keepAlive: true }
+      },
+      {
+        path: 'checkRecord',
+        name: 'checkRecordCancel',
+        code: '1027',
+        component: () => import('@/views/deviceManager/checkRecord'),
+        meta: { code: '1027', title: '鐐规璁板綍', icon: '', keepAlive: true }
+      },
+      {
+        path: 'maintainRecord',
+        name: 'maintainRecordCancel',
+        code: '1028',
+        component: () => import('@/views/deviceManager/maintainRecord'),
+        meta: { code: '1028', title: '淇濆吇璁板綍', icon: '', keepAlive: true }
+      },
+      {
+        path: 'repairRecord',
+        code: '1029',
+        name: 'repairRecordCancel',
+        component: () => import('@/views/deviceManager/repairRecord'),
+        meta: { code: '1029', title: '缁翠慨璁板綍', icon: '', keepAlive: true }
+      },
+      {
+        path: 'repairRequestRecord',
+        name: 'repairRequestRecordCancel',
+        code: '1019',
+        component: () => import('@/views/deviceManager/repairRequestRecord'),
+        meta: { code: '1019', title: '璁惧鐢宠缁翠慨璁板綍', icon: '', keepAlive: true }
+      }
+    ]
+  },
+  {
+    path: '/gzgl',
+    component: Layout,
+    redirect: '/gzgl/gzlx',
+    name: '宸ヨ绠$悊',
+    code: '1003',
+    meta: { code: '1003', title: '宸ヨ绠$悊', icon: 'component' },
+    alwaysShow: true,
+    children: [
+      {
+        path: 'gzlx',
+        name: 'GZLXCancel',
+        code: '1030',
+        component: () => import('@/views/gzgl/gzlx'),
+        meta: { code: '1030', title: '宸ヨ绫诲瀷', icon: '', keepAlive: true }
+      }, {
+        path: 'sjxj',
+        name: 'SJXJCancel',
+        code: '1039',
+        component: () => import('@/views/gzgl/sjxj'),
+        meta: { code: '1039', title: '涓婃満涓嬫満', icon: '', keepAlive: true }
+      }, {
+        path: 'ckrk',
+        name: 'CKRKCancel',
+        code: '1040',
+        component: () => import('@/views/gzgl/ckrk'),
+        meta: { code: '1040', title: '鍑哄簱鍏ュ簱', icon: '', keepAlive: true }
+      }, {
+        path: 'gzqd',
+        name: 'GZQDCancel',
+        code: '1031',
+        component: () => import('@/views/gzgl/gzqd'),
+        meta: { code: '1031', title: '宸ヨ娓呭崟', icon: '', keepAlive: true }
+      }, {
+        path: 'djbz',
+        name: 'DJBZCancel',
+        code: '1032',
+        component: () => import('@/views/gzgl/djbz'),
+        meta: { code: '1032', title: '鐐规鏍囧噯', icon: '', keepAlive: true }
+      }, {
+        path: 'djbw',
+        name: 'DJBWCancel',
+        code: '1033',
+        component: () => import('@/views/gzgl/djbw'),
+        meta: { code: '1033', title: '鐐规閮ㄤ綅', icon: '', keepAlive: true }
+      }, {
+        path: 'bybz',
+        name: 'BYBZCancel',
+        code: '1034',
+        component: () => import('@/views/gzgl/bybz'),
+        meta: { code: '1034', title: '淇濆吇鏍囧噯', icon: '', keepAlive: true }
+      }, {
+        path: 'bybw',
+        name: 'BYBWCancel',
+        code: '1035',
+        component: () => import('@/views/gzgl/bybw'),
+        meta: { code: '1035', title: '淇濆吇閮ㄤ綅', icon: '', keepAlive: true }
+      }, {
+        path: 'djjl',
+        name: 'DJJLCancel',
+        code: '1036',
+        component: () => import('@/views/gzgl/djjl'),
+        meta: { code: '1036', title: '鐐规璁板綍', icon: '', keepAlive: true }
+      }, {
+        path: 'byjl',
+        name: 'BYJLCancel',
+        code: '1037',
+        component: () => import('@/views/gzgl/byjl'),
+        meta: { code: '1037', title: '淇濆吇璁板綍', icon: '', keepAlive: true }
+      }, {
+        path: 'gzwx',
+        name: 'GZWXCancel',
+        code: '1038',
+        component: () => import('@/views/gzgl/gzwx'),
+        meta: { code: '1038', title: '宸ヨ缁翠慨', icon: '', keepAlive: true }
+      }
+    ]
+  },
+  {
+    path: '/materialManager',
+    component: Layout,
+    redirect: '/materialManager/storehouseDefine',
+    name: '鐗╂枡绠$悊',
+    code: '1004',
+    meta: { code: '1004', title: '鐗╂枡绠$悊', icon: 'table' },
+    alwaysShow: true,
+    children: [
+      {
+        path: 'storehouseDefine',
+        name: 'storehouseDefineCancel',
+        code: '1050',
+        component: () => import('@/views/materialManager/storehouseDefine'),
+        meta: { code: '1050', title: '浠撳簱瀹氫箟', icon: '', keepAlive: true }
+      },
+      {
+        path: 'locationDefine',
+        name: 'locationDefineCancel',
+        code: '1051',
+        component: () => import('@/views/materialManager/locationDefine'),
+        meta: { code: '1051', title: '搴撲綅瀹氫箟', icon: '', keepAlive: true }
+      }, {
+        path: 'containerType',
+        name: 'containerTypeCancel',
+        code: '1052',
+        component: () => import('@/views/materialManager/containerType'),
+        meta: { code: '1052', title: '瀹瑰櫒绫诲瀷', icon: '', keepAlive: true }
+      }, {
+        path: 'containerList',
+        name: 'containerListCancel',
+        code: '1053',
+        component: () => import('@/views/materialManager/containerList'),
+        meta: { code: '1053', title: '瀹瑰櫒娓呭崟', icon: '', keepAlive: true }
+      }, {
+        path: 'inOutboundRecord',
+        name: 'inOutboundRecordCancel',
+        code: '1054',
+        component: () => import('@/views/materialManager/inOutboundRecord'),
+        meta: { code: '1054', title: '鍑哄叆搴撹褰�', icon: '', keepAlive: true }
+      }, {
+        path: 'inventoryQuery',
+        name: 'inventoryQueryCancel',
+        code: '1055',
+        component: () => import('@/views/materialManager/inventoryQuery'),
+        meta: { code: '1055', title: '搴撳瓨鏌ヨ', icon: '', keepAlive: true }
+      }
+    ]
+  },
+  {
+    path: '/makeModel',
+    component: Layout,
+    redirect: '/makeModel/InventoryList',
+    name: '鍒堕�犳ā鍨�',
+    code: '1005',
+    meta: { code: '1005', title: '鍒堕�犳ā鍨�', icon: 'icu' },
+    alwaysShow: true,
+    children: [
+      {
+        path: 'materialType',
+        name: 'materialTypeCancel',
+        code: '1060',
+        component: () => import('@/views/makeModel/materialType'),
+        meta: { code: '1060', title: '鐗╂枡绫诲瀷', icon: '', keepAlive: true }
+      },
+      {
+        path: 'InventoryList',
+        name: 'InventoryListCancel',
+        code: '1061',
+        component: () => import('@/views/makeModel/InventoryList'),
+        meta: { code: '1061', title: '瀛樿揣妗f', icon: '', keepAlive: true }
+      }, {
+        path: 'materialList',
+        name: 'materialListCancel',
+        code: '1062',
+        component: () => import('@/views/makeModel/materialList'),
+        meta: { code: '1062', title: '鐗╂枡娓呭崟', icon: '', keepAlive: true }
+      },
+      {
+        path: 'processRoute',
+        name: 'processRouteCancel',
+        code: '1063',
+        component: () => import('@/views/makeModel/processRoute'),
+        meta: { code: '1063', title: '宸ヨ壓璺嚎', icon: '', keepAlive: true }
+      }, {
+        path: 'processDefine',
+        name: 'processDefineCancel',
+        code: '1064',
+        component: () => import('@/views/makeModel/processDefine'),
+        meta: { code: '1064', title: '宸ュ簭瀹氫箟', icon: '', keepAlive: true }
+      },
+      {
+        path: 'meterPrice',
+        name: 'meterPriceCancel',
+        code: '1065',
+        component: () => import('@/views/makeModel/meterPrice'),
+        meta: { code: '1065', title: '鑺傛媿宸ヤ环', icon: '', keepAlive: true }
+      }
+    ]
+  },
+  {
+    path: '/produceManager',
+    component: Layout,
+    redirect: '/produceManager/produceOrder',
+    name: '鐢熶骇绠$悊',
+    code: '1006',
+    meta: { code: '1006', title: '鐢熶骇绠$悊', icon: 'production' },
+    alwaysShow: true,
+    children: [
+      {
+        path: 'produceOrder',
+        name: 'produceOrderCancel',
+        code: '1070',
+        component: () => import('@/views/produceManager/produceOrder'),
+        meta: { code: '1070', title: '鐢熶骇璁㈠崟', icon: '', keepAlive: true }
+      }, {
+        path: 'workOrder',
+        name: 'workOrderCancel',
+        code: '1071',
+        component: () => import('@/views/produceManager/workOrder'),
+        meta: { code: '1071', title: '宸ュ崟', icon: '', keepAlive: true }
+      }, {
+        path: 'workOrderDispatch',
+        name: 'workOrderDispatchCancel',
+        code: '1072',
+        component: () => import('@/views/produceManager/workOrderDispatch'),
+        meta: { code: '1072', title: '宸ュ崟娲惧伐', icon: '', keepAlive: true }
+      }, {
+        path: 'produceStartOrder',
+        name: 'produceStartOrderCancel',
+        code: '1073',
+        component: () => import('@/views/produceManager/produceStartOrder'),
+        meta: { code: '1073', title: '鐢熶骇寮�鎶ュ伐', icon: '', keepAlive: true }
+      }, {
+        path: 'workOrderBatchClose',
+        name: 'workOrderBatchCloseCancel',
+        code: '1074',
+        component: () => import('@/views/produceManager/workOrderBatchClose'),
+        meta: { code: '1074', title: '宸ュ崟鎵归噺鍏抽棴', icon: '', keepAlive: true }
+      }, {
+        path: 'capacityPlanning',
+        name: 'capacityPlanningCancel',
+        code: '1075',
+        component: () => import('@/views/produceManager/capacityPlanning'),
+        meta: { code: '1075', title: '浜ц兘瑙勫垝', icon: '', keepAlive: true }
+      }, {
+        path: 'AutoScheduling',
+        name: 'AutoSchedulingCancel',
+        code: '1076',
+        component: () => import('@/views/produceManager/AutoScheduling'),
+        meta: { code: '1076', title: '鑷姩鎺掔▼', icon: '', keepAlive: true }
+      }, {
+        path: 'productWarehouse',
+        name: 'productWarehouseCancel',
+        code: '1077',
+        component: () => import('@/views/produceManager/productWarehouse'),
+        meta: { code: '1077', title: '鐢熶骇鍏ュ簱', icon: '', keepAlive: true }
+      }
+    ]
+  },
+  {
+    path: '/qualityManager',
+    component: Layout,
+    redirect: '/qualityManager/defectDefine',
+    name: '璐ㄩ噺绠$悊',
+    code: '1007',
+    meta: { code: '1007', title: '璐ㄩ噺绠$悊', icon: 'quality' },
+    alwaysShow: true,
+    children: [
+      {
+        path: 'qualityStandard',
+        name: 'qualityStandardCancel',
+        code: '1080',
+        component: () => import('@/views/qualityManager/qualityStandard'),
+        meta: { code: '1080', title: '璐ㄦ鏍囧噯', icon: '', keepAlive: true }
+      }, {
+        path: 'defectDefine',
+        name: 'defectDefineCancel',
+        code: '1081',
+        component: () => import('@/views/qualityManager/defectDefine'),
+        meta: { code: '1081', title: '缂洪櫡瀹氫箟', icon: '', keepAlive: true }
+      }, {
+        path: 'processCheck',
+        name: 'processCheckCancel',
+        code: '1082',
+        component: () => import('@/views/qualityManager/processCheck'),
+        meta: { code: '1082', title: '宸ュ簭妫�楠�', icon: '', keepAlive: true }
+      }, {
+        path: 'logisticsCheck',
+        name: 'logisticsCheckCancel',
+        code: '1083',
+        component: () => import('@/views/qualityManager/logisticsCheck'),
+        meta: { code: '1083', title: '鐗╂祦妫�楠�', icon: '', keepAlive: true }
+      }, {
+        path: 'defectStatistics',
+        name: 'defectStatisticsCancel',
+        code: '1084',
+        component: () => import('@/views/qualityManager/defectStatistics'),
+        meta: { code: '1084', title: '缂洪櫡缁熻', icon: '', keepAlive: true }
+      },
+      {
+        path: 'processCheckStandard',
+        name: 'processCheckStandardCancel',
+        code: '1085',
+        component: () => import('@/views/qualityManager/processCheckStandard'),
+        meta: { code: '1085', title: '宸ュ簭妫�楠屾爣鍑�', icon: '', keepAlive: true }
+      },
+      {
+        path: 'processCheckItem',
+        name: 'processCheckItemCancel',
+        code: '1086',
+        component: () => import('@/views/qualityManager/processCheckItem'),
+        meta: { code: '1086', title: '宸ュ簭妫�楠岄」鐩�', icon: '', keepAlive: true }
+      }, {
+        path: 'processCheckRecord',
+        name: 'processCheckRecordCancel',
+        code: '1087',
+        component: () => import('@/views/qualityManager/processCheckRecord'),
+        meta: { code: '1087', title: '宸ュ簭妫�楠岃褰�', icon: '', keepAlive: true }
+      }, {
+        path: 'qualityPlaning',
+        name: 'ZJFACancel',
+        code: '1088',
+        component: () => import('@/views/qualityManager/qualityPlaning'),
+        meta: { code: '1088', title: '璐ㄦ鏂规', icon: '', keepAlive: true }
+      }
+    ]
+  },
+  {
+    path: '/reportManager',
+    component: Layout,
+    redirect: '/reportManager/groupSalaryList',
+    name: '鎶ヨ〃绠$悊',
+    code: '1008',
+    meta: { code: '1008', title: '鎶ヨ〃绠$悊', icon: 'bbgl' },
+    alwaysShow: true,
+    children: [
+      {
+        path: 'produceSchedule',
+        name: 'produceScheduleCancel',
+        code: '1098',
+        component: () => import('@/views/reportManager/produceSchedule'),
+        meta: { code: '1098', title: '鐢熶骇杩涘害鎶ヨ〃', icon: '', keepAlive: true }
+      }, {
+        path: 'groupSalaryList',
+        name: 'groupSalaryListCancel',
+        code: '1090',
+        component: () => import('@/views/reportManager/groupSalaryList'),
+        meta: { code: '1090', title: '鐝粍宸ヨ祫缁熻', icon: '', keepAlive: true }
+      }, {
+        path: 'personSalaryList',
+        name: 'personSalaryListCancel',
+        code: '1091',
+        component: () => import('@/views/reportManager/personSalaryList'),
+        meta: { code: '1091', title: '浜哄憳宸ヨ祫', icon: '', keepAlive: true }
+      }, {
+        path: 'subcontractingOperation',
+        name: 'subcontractingOperationCancel',
+        code: '1092',
+        component: () => import('@/views/reportManager/subcontractingOperation'),
+        meta: { code: '1092', title: '濮斿宸ュ簭', icon: '', keepAlive: true }
+      }, {
+        path: 'defectDetailList',
+        name: 'defectDetailListCancel',
+        code: '1093',
+        component: () => import('@/views/reportManager/defectDetailList'),
+        meta: { code: '1093', title: '涓嶈壇鏄庣粏', icon: '', keepAlive: true }
+      }, {
+        path: 'abnormalQualityList',
+        name: 'abnormalQualityListCancel',
+        code: '1094',
+        component: () => import('@/views/reportManager/abnormalQualityList'),
+        meta: { code: '1094', title: '鍝佽川寮傚父', icon: '', keepAlive: true }
+      }, {
+        path: 'repairDetailList',
+        name: 'repairDetailListCancel',
+        code: '1095',
+        component: () => import('@/views/reportManager/repairDetailList'),
+        meta: { code: '1095', title: '缁翠慨鏄庣粏', icon: '', keepAlive: true }
+      }, {
+        path: 'installationLampList',
+        name: 'installationLampListCancel',
+        code: '1096',
+        component: () => import('@/views/reportManager/installationLampList'),
+        meta: { code: '1096', title: '瀹夌伅鎶ヨ〃', icon: '', keepAlive: true }
+      }, {
+        path: 'logisticsCheck',
+        name: 'logisticsCheckCancel',
+        code: '1097',
+        component: () => import('@/views/reportManager/logisticsCheck'),
+        meta: { code: '1097', title: '鐗╂祦妫�楠屾姤琛�', icon: '', keepAlive: true }
+      }
+    ]
+  },
+  {
+    path: '/systemSettings',
+    component: Layout,
+    redirect: '/systemSettings/bmgz',
+    name: '绯荤粺璁剧疆',
+    code: '1009',
+    meta: { code: '1009', title: '绯荤粺璁剧疆', icon: 'xtsz' },
+    alwaysShow: true,
+    children: [
+      {
+        path: 'codingRules',
+        name: 'codingRulesCancel',
+        code: '1101',
+        component: () => import('@/views/systemSettings/codingRules'),
+        meta: { code: '1101', title: '缂栫爜瑙勫垯', icon: '', keepAlive: true }
+      }, {
+        path: 'passwordEdit',
+        name: 'passwordEditCancel',
+        code: '1102',
+        component: () => import('@/views/systemSettings/passwordEdit'),
+        meta: { code: '1102', title: '瀵嗙爜淇敼', icon: '', keepAlive: true }
+      }, {
+        path: 'systemLog',
+        name: 'systemLogCancel',
+        code: '1103',
+        component: () => import('@/views/systemSettings/systemLog'),
+        meta: { code: '1103', title: '绯荤粺鏃ュ織', icon: '', keepAlive: true }
+      }, {
+        path: 'sopUpload',
+        name: 'sopUploadCancel',
+        code: '1104',
+        component: () => import('@/views/systemSettings/sopUpload'),
+        meta: { code: '1104', title: 'SOP涓婁紶', icon: '', keepAlive: true }
+      }, {
+        path: 'shopNotice',
+        name: 'shopNoticeCancel',
+        code: '1105',
+        component: () => import('@/views/systemSettings/shopNotice'),
+        meta: { code: '1105', title: '杞﹂棿鍏憡', icon: '', keepAlive: true }
+      }
+    ]
+  },
+  {
+    path: '/purchasesManager',
+    component: Layout,
+    redirect: '/purchasesManager/purchasesList',
+    name: '閲囪喘绠$悊',
+    code: '1000',
+    meta: { code: '1000', title: '閲囪喘绠$悊', icon: 'cggl' },
+    alwaysShow: true,
+    children: [
+      {
+        path: 'purchasesList',
+        name: 'CGDDCancel',
+        code: '1201',
+        component: () => import('@/views/purchasesManager/purchasesList'),
+        meta: { code: '1201', title: '閲囪喘璁㈠崟', icon: '', keepAlive: true }
+      }, {
+        path: 'arrivalNoticeList',
+        name: 'arrivalNoticeListCancel',
+        code: '1202',
+        component: () => import('@/views/purchasesManager/arrivalNoticeList'),
+        meta: { code: '1202', title: '閲囪喘鏀惰揣鍗�', icon: '', keepAlive: true }
+      }, {
+        path: 'salesStatisticsList',
+        name: 'salesStatisticsCancel',
+        code: '1203',
+        component: () => import('@/views/purchasesManager/salesStatisticsList'),
+        meta: { code: '1203', title: '閿�鍞鍗�', icon: '', keepAlive: true }
+      }, {
+        path: 'goodsStatisticsList',
+        name: 'goodsStatisticsListCancel',
+        code: '1204',
+        component: () => import('@/views/purchasesManager/goodsStatisticsList'),
+        meta: { code: '1204', title: '閿�璐у崟', icon: '', keepAlive: true }
+      }, {
+        path: 'InventoryLedgerList',
+        name: 'InventoryLedgerListCancel',
+        code: '1205',
+        component: () => import('@/views/purchasesManager/InventoryLedgerList'),
+        meta: { code: '1205', title: '搴撳瓨鍙拌处', icon: '', keepAlive: true }
+      }
+    ]
+  }
+]
+
 // 涓婁簯妯″潡
 export const asyncRoutesCloud = [
   // 1.绯荤粺绠$悊锛堝熀纭�璁剧疆绫伙級
@@ -713,616 +1332,6 @@
   //   ]
   // }
 
-]
-// 鏈笂浜戞ā鍧�
-export const asyncRoutes = [
-  // {
-  //   path: '/gtt',
-  //   component: Layout,
-  //   redirect: '/gtt/back',
-  //   name: '鍩虹璁剧疆',
-  //   code: '1001',
-  //   meta: { code: '1001', title: '鍩虹璁剧疆', icon: 'tree' },
-  //   alwaysShow: true, // 褰揷hildren鍙湁涓�涓椂锛屼篃鏄剧ず鐖惰彍鍗�
-  //   children: [{
-  //     path: 'back',
-  //     name: 'YYQDCancel',
-  //     code: '1011',
-  //     component: () => import('@/views/gantt_back/gantt_back'),
-  //     meta: { code: '1011', title: '鐢ㄦ埛娓呭崟', icon: '', keepAlive: true }
-  //   }, {
-  //     path: 'zdpc2',
-  //     name: 'YYQDCancel',
-  //     code: '1012',
-  //     component: () => import('@/views/gantt_back/zdpc2'),
-  //     meta: { code: '1012', title: '鑷姩鎺掔▼2', icon: '', keepAlive: true }
-  //   }]
-  // },
-  {
-    path: '/basicSettings',
-    component: Layout,
-    redirect: '/basicSettings/organizationList',
-    name: '鍩虹璁剧疆',
-    code: '1001',
-    meta: { code: '1001', title: '鍩虹璁剧疆', icon: 'tree2' },
-    alwaysShow: true, // 褰揷hildren鍙湁涓�涓椂锛屼篃鏄剧ず鐖惰彍鍗�
-    children: [
-      {
-        path: 'organizationList',
-        name: 'organizationListCancel',
-        code: '1010',
-        component: () => import('@/views/basicSettings/organizationList'),
-        meta: { code: '1010', title: '缁勭粐鏋舵瀯', icon: '', keepAlive: true }
-      }, {
-        path: 'userList',
-        name: 'userListCancel',
-        code: '1011',
-        component: () => import('@/views/basicSettings/userList'),
-        meta: { code: '1011', title: '鐢ㄦ埛娓呭崟', icon: '', keepAlive: true }
-      }, {
-        path: 'roleList',
-        name: 'roleListCancel',
-        code: '1012',
-        component: () => import('@/views/basicSettings/roleList'),
-        meta: { code: '1012', title: '瑙掕壊娓呭崟', icon: '', keepAlive: true }
-      }, {
-        path: 'contactUnitList',
-        name: 'contactUnitListCancel',
-        code: '1013',
-        component: () => import('@/views/basicSettings/contactUnitList'),
-        meta: { code: '1013', title: '寰�鏉ュ崟浣�', icon: '', keepAlive: true }
-      }, {
-        path: 'installationLampSetting',
-        name: 'installationLampSettingCancel',
-        code: '1014',
-        component: () => import('@/views/basicSettings/installationLampSetting'),
-        meta: { code: '1014', title: '瀹夌伅璁剧疆', icon: '', keepAlive: true }
-      }
-    ]
-  },
-  {
-    path: '/deviceManager',
-    component: Layout,
-    redirect: '/deviceManager/deviceType',
-    name: '璁惧绠$悊',
-    code: '1002',
-    meta: { code: '1002', title: '璁惧绠$悊', icon: 'example' },
-    alwaysShow: true,
-    children: [
-      {
-        path: 'deviceType',
-        name: 'deviceTypeCancel',
-        code: '1020',
-        component: () => import('@/views/deviceManager/deviceType'),
-        meta: { code: '1020', title: '璁惧绫诲瀷', icon: '', keepAlive: true }
-      },
-      {
-        path: 'deviceGroup',
-        name: 'deviceGroupCancel',
-        code: '1021',
-        component: () => import('@/views/deviceManager/deviceGroup'),
-        meta: { code: '1021', title: '璁惧缁�', icon: '', keepAlive: true }
-      }, {
-        path: 'deviceList',
-        name: 'deviceListCancel',
-        code: '1022',
-        component: () => import('@/views/deviceManager/deviceList'),
-        meta: { code: '1022', title: '璁惧娓呭崟', icon: '', keepAlive: true }
-      },
-      {
-        path: 'checkStandard',
-        name: 'checkStandardCancel',
-        code: '1023',
-        component: () => import('@/views/deviceManager/checkStandard'),
-        meta: { code: '1023', title: '鐐规鏍囧噯', icon: '', keepAlive: true }
-      },
-      {
-        path: 'checkPosition',
-        name: 'checkPositionCancel',
-        code: '1024',
-        component: () => import('@/views/deviceManager/checkPosition'),
-        meta: { code: '1024', title: '鐐规閮ㄤ綅', icon: '', keepAlive: true }
-      },
-      {
-        path: 'maintainStandard',
-        name: 'maintainStandardCancel',
-        code: '1025',
-        component: () => import('@/views/deviceManager/maintainStandard'),
-        meta: { code: '1025', title: '淇濆吇鏍囧噯', icon: '', keepAlive: true }
-      },
-      {
-        path: 'maintainPosition',
-        name: 'maintainPositionCancel',
-        code: '1026',
-        component: () => import('@/views/deviceManager/maintainPosition'),
-        meta: { code: '1026', title: '淇濆吇閮ㄤ綅', icon: '', keepAlive: true }
-      },
-      {
-        path: 'checkRecord',
-        name: 'checkRecordCancel',
-        code: '1027',
-        component: () => import('@/views/deviceManager/checkRecord'),
-        meta: { code: '1027', title: '鐐规璁板綍', icon: '', keepAlive: true }
-      },
-      {
-        path: 'maintainRecord',
-        name: 'maintainRecordCancel',
-        code: '1028',
-        component: () => import('@/views/deviceManager/maintainRecord'),
-        meta: { code: '1028', title: '淇濆吇璁板綍', icon: '', keepAlive: true }
-      },
-      {
-        path: 'repairRecord',
-        code: '1029',
-        name: 'repairRecordCancel',
-        component: () => import('@/views/deviceManager/repairRecord'),
-        meta: { code: '1029', title: '缁翠慨璁板綍', icon: '', keepAlive: true }
-      },
-      {
-        path: 'repairRequestRecord',
-        name: 'repairRequestRecordCancel',
-        code: '1019',
-        component: () => import('@/views/deviceManager/repairRequestRecord'),
-        meta: { code: '1019', title: '璁惧鐢宠缁翠慨璁板綍', icon: '', keepAlive: true }
-      }
-    ]
-  },
-  {
-    path: '/gzgl',
-    component: Layout,
-    redirect: '/gzgl/gzlx',
-    name: '宸ヨ绠$悊',
-    code: '1003',
-    meta: { code: '1003', title: '宸ヨ绠$悊', icon: 'component' },
-    alwaysShow: true,
-    children: [
-      {
-        path: 'gzlx',
-        name: 'GZLXCancel',
-        code: '1030',
-        component: () => import('@/views/gzgl/gzlx'),
-        meta: { code: '1030', title: '宸ヨ绫诲瀷', icon: '', keepAlive: true }
-      }, {
-        path: 'sjxj',
-        name: 'SJXJCancel',
-        code: '1039',
-        component: () => import('@/views/gzgl/sjxj'),
-        meta: { code: '1039', title: '涓婃満涓嬫満', icon: '', keepAlive: true }
-      }, {
-        path: 'ckrk',
-        name: 'CKRKCancel',
-        code: '1040',
-        component: () => import('@/views/gzgl/ckrk'),
-        meta: { code: '1040', title: '鍑哄簱鍏ュ簱', icon: '', keepAlive: true }
-      }, {
-        path: 'gzqd',
-        name: 'GZQDCancel',
-        code: '1031',
-        component: () => import('@/views/gzgl/gzqd'),
-        meta: { code: '1031', title: '宸ヨ娓呭崟', icon: '', keepAlive: true }
-      }, {
-        path: 'djbz',
-        name: 'DJBZCancel',
-        code: '1032',
-        component: () => import('@/views/gzgl/djbz'),
-        meta: { code: '1032', title: '鐐规鏍囧噯', icon: '', keepAlive: true }
-      }, {
-        path: 'djbw',
-        name: 'DJBWCancel',
-        code: '1033',
-        component: () => import('@/views/gzgl/djbw'),
-        meta: { code: '1033', title: '鐐规閮ㄤ綅', icon: '', keepAlive: true }
-      }, {
-        path: 'bybz',
-        name: 'BYBZCancel',
-        code: '1034',
-        component: () => import('@/views/gzgl/bybz'),
-        meta: { code: '1034', title: '淇濆吇鏍囧噯', icon: '', keepAlive: true }
-      }, {
-        path: 'bybw',
-        name: 'BYBWCancel',
-        code: '1035',
-        component: () => import('@/views/gzgl/bybw'),
-        meta: { code: '1035', title: '淇濆吇閮ㄤ綅', icon: '', keepAlive: true }
-      }, {
-        path: 'djjl',
-        name: 'DJJLCancel',
-        code: '1036',
-        component: () => import('@/views/gzgl/djjl'),
-        meta: { code: '1036', title: '鐐规璁板綍', icon: '', keepAlive: true }
-      }, {
-        path: 'byjl',
-        name: 'BYJLCancel',
-        code: '1037',
-        component: () => import('@/views/gzgl/byjl'),
-        meta: { code: '1037', title: '淇濆吇璁板綍', icon: '', keepAlive: true }
-      }, {
-        path: 'gzwx',
-        name: 'GZWXCancel',
-        code: '1038',
-        component: () => import('@/views/gzgl/gzwx'),
-        meta: { code: '1038', title: '宸ヨ缁翠慨', icon: '', keepAlive: true }
-      }
-    ]
-  },
-  {
-    path: '/materialManager',
-    component: Layout,
-    redirect: '/materialManager/storehouseDefine',
-    name: '鐗╂枡绠$悊',
-    code: '1004',
-    meta: { code: '1004', title: '鐗╂枡绠$悊', icon: 'table' },
-    alwaysShow: true,
-    children: [
-      {
-        path: 'storehouseDefine',
-        name: 'storehouseDefineCancel',
-        code: '1050',
-        component: () => import('@/views/materialManager/storehouseDefine'),
-        meta: { code: '1050', title: '浠撳簱瀹氫箟', icon: '', keepAlive: true }
-      },
-      {
-        path: 'locationDefine',
-        name: 'locationDefineCancel',
-        code: '1051',
-        component: () => import('@/views/materialManager/locationDefine'),
-        meta: { code: '1051', title: '搴撲綅瀹氫箟', icon: '', keepAlive: true }
-      }, {
-        path: 'containerType',
-        name: 'containerTypeCancel',
-        code: '1052',
-        component: () => import('@/views/materialManager/containerType'),
-        meta: { code: '1052', title: '瀹瑰櫒绫诲瀷', icon: '', keepAlive: true }
-      }, {
-        path: 'containerList',
-        name: 'containerListCancel',
-        code: '1053',
-        component: () => import('@/views/materialManager/containerList'),
-        meta: { code: '1053', title: '瀹瑰櫒娓呭崟', icon: '', keepAlive: true }
-      }, {
-        path: 'inOutboundRecord',
-        name: 'inOutboundRecordCancel',
-        code: '1054',
-        component: () => import('@/views/materialManager/inOutboundRecord'),
-        meta: { code: '1054', title: '鍑哄叆搴撹褰�', icon: '', keepAlive: true }
-      }, {
-        path: 'inventoryQuery',
-        name: 'inventoryQueryCancel',
-        code: '1055',
-        component: () => import('@/views/materialManager/inventoryQuery'),
-        meta: { code: '1055', title: '搴撳瓨鏌ヨ', icon: '', keepAlive: true }
-      }
-    ]
-  },
-  {
-    path: '/makeModel',
-    component: Layout,
-    redirect: '/makeModel/InventoryList',
-    name: '鍒堕�犳ā鍨�',
-    code: '1005',
-    meta: { code: '1005', title: '鍒堕�犳ā鍨�', icon: 'icu' },
-    alwaysShow: true,
-    children: [
-      {
-        path: 'materialType',
-        name: 'materialTypeCancel',
-        code: '1060',
-        component: () => import('@/views/makeModel/materialType'),
-        meta: { code: '1060', title: '鐗╂枡绫诲瀷', icon: '', keepAlive: true }
-      },
-      {
-        path: 'InventoryList',
-        name: 'InventoryListCancel',
-        code: '1061',
-        component: () => import('@/views/makeModel/InventoryList'),
-        meta: { code: '1061', title: '瀛樿揣妗f', icon: '', keepAlive: true }
-      }, {
-        path: 'materialList',
-        name: 'materialListCancel',
-        code: '1062',
-        component: () => import('@/views/makeModel/materialList'),
-        meta: { code: '1062', title: '鐗╂枡娓呭崟', icon: '', keepAlive: true }
-      },
-      {
-        path: 'processRoute',
-        name: 'processRouteCancel',
-        code: '1063',
-        component: () => import('@/views/makeModel/processRoute'),
-        meta: { code: '1063', title: '宸ヨ壓璺嚎', icon: '', keepAlive: true }
-      }, {
-        path: 'processDefine',
-        name: 'processDefineCancel',
-        code: '1064',
-        component: () => import('@/views/makeModel/processDefine'),
-        meta: { code: '1064', title: '宸ュ簭瀹氫箟', icon: '', keepAlive: true }
-      },
-      {
-        path: 'meterPrice',
-        name: 'meterPriceCancel',
-        code: '1065',
-        component: () => import('@/views/makeModel/meterPrice'),
-        meta: { code: '1065', title: '鑺傛媿宸ヤ环', icon: '', keepAlive: true }
-      }
-    ]
-  },
-  {
-    path: '/produceManager',
-    component: Layout,
-    redirect: '/produceManager/produceOrder',
-    name: '鐢熶骇绠$悊',
-    code: '1006',
-    meta: { code: '1006', title: '鐢熶骇绠$悊', icon: 'production' },
-    alwaysShow: true,
-    children: [
-      {
-        path: 'produceOrder',
-        name: 'produceOrderCancel',
-        code: '1070',
-        component: () => import('@/views/produceManager/produceOrder'),
-        meta: { code: '1070', title: '鐢熶骇璁㈠崟', icon: '', keepAlive: true }
-      }, {
-        path: 'workOrder',
-        name: 'workOrderCancel',
-        code: '1071',
-        component: () => import('@/views/produceManager/workOrder'),
-        meta: { code: '1071', title: '宸ュ崟', icon: '', keepAlive: true }
-      }, {
-        path: 'workOrderDispatch',
-        name: 'workOrderDispatchCancel',
-        code: '1072',
-        component: () => import('@/views/produceManager/workOrderDispatch'),
-        meta: { code: '1072', title: '宸ュ崟娲惧伐', icon: '', keepAlive: true }
-      }, {
-        path: 'produceStartOrder',
-        name: 'produceStartOrderCancel',
-        code: '1073',
-        component: () => import('@/views/produceManager/produceStartOrder'),
-        meta: { code: '1073', title: '鐢熶骇寮�鎶ュ伐', icon: '', keepAlive: true }
-      }, {
-        path: 'workOrderBatchClose',
-        name: 'workOrderBatchCloseCancel',
-        code: '1074',
-        component: () => import('@/views/produceManager/workOrderBatchClose'),
-        meta: { code: '1074', title: '宸ュ崟鎵归噺鍏抽棴', icon: '', keepAlive: true }
-      }, {
-        path: 'capacityPlanning',
-        name: 'capacityPlanningCancel',
-        code: '1075',
-        component: () => import('@/views/produceManager/capacityPlanning'),
-        meta: { code: '1075', title: '浜ц兘瑙勫垝', icon: '', keepAlive: true }
-      }, {
-        path: 'AutoScheduling',
-        name: 'AutoSchedulingCancel',
-        code: '1076',
-        component: () => import('@/views/produceManager/AutoScheduling'),
-        meta: { code: '1076', title: '鑷姩鎺掔▼', icon: '', keepAlive: true }
-      }, {
-        path: 'productWarehouse',
-        name: 'productWarehouseCancel',
-        code: '1077',
-        component: () => import('@/views/produceManager/productWarehouse'),
-        meta: { code: '1077', title: '鐢熶骇鍏ュ簱', icon: '', keepAlive: true }
-      }
-    ]
-  },
-  {
-    path: '/qualityManager',
-    component: Layout,
-    redirect: '/qualityManager/defectDefine',
-    name: '璐ㄩ噺绠$悊',
-    code: '1007',
-    meta: { code: '1007', title: '璐ㄩ噺绠$悊', icon: 'quality' },
-    alwaysShow: true,
-    children: [
-      {
-        path: 'qualityStandard',
-        name: 'qualityStandardCancel',
-        code: '1080',
-        component: () => import('@/views/qualityManager/qualityStandard'),
-        meta: { code: '1080', title: '璐ㄦ鏍囧噯', icon: '', keepAlive: true }
-      }, {
-        path: 'defectDefine',
-        name: 'defectDefineCancel',
-        code: '1081',
-        component: () => import('@/views/qualityManager/defectDefine'),
-        meta: { code: '1081', title: '缂洪櫡瀹氫箟', icon: '', keepAlive: true }
-      }, {
-        path: 'processCheck',
-        name: 'processCheckCancel',
-        code: '1082',
-        component: () => import('@/views/qualityManager/processCheck'),
-        meta: { code: '1082', title: '宸ュ簭妫�楠�', icon: '', keepAlive: true }
-      }, {
-        path: 'logisticsCheck',
-        name: 'logisticsCheckCancel',
-        code: '1083',
-        component: () => import('@/views/qualityManager/logisticsCheck'),
-        meta: { code: '1083', title: '鐗╂祦妫�楠�', icon: '', keepAlive: true }
-      }, {
-        path: 'defectStatistics',
-        name: 'defectStatisticsCancel',
-        code: '1084',
-        component: () => import('@/views/qualityManager/defectStatistics'),
-        meta: { code: '1084', title: '缂洪櫡缁熻', icon: '', keepAlive: true }
-      },
-      {
-        path: 'processCheckStandard',
-        name: 'processCheckStandardCancel',
-        code: '1085',
-        component: () => import('@/views/qualityManager/processCheckStandard'),
-        meta: { code: '1085', title: '宸ュ簭妫�楠屾爣鍑�', icon: '', keepAlive: true }
-      },
-      {
-        path: 'processCheckItem',
-        name: 'processCheckItemCancel',
-        code: '1086',
-        component: () => import('@/views/qualityManager/processCheckItem'),
-        meta: { code: '1086', title: '宸ュ簭妫�楠岄」鐩�', icon: '', keepAlive: true }
-      }, {
-        path: 'processCheckRecord',
-        name: 'processCheckRecordCancel',
-        code: '1087',
-        component: () => import('@/views/qualityManager/processCheckRecord'),
-        meta: { code: '1087', title: '宸ュ簭妫�楠岃褰�', icon: '', keepAlive: true }
-      }, {
-        path: 'qualityPlaning',
-        name: 'ZJFACancel',
-        code: '1088',
-        component: () => import('@/views/qualityManager/qualityPlaning'),
-        meta: { code: '1088', title: '璐ㄦ鏂规', icon: '', keepAlive: true }
-      }
-    ]
-  },
-  {
-    path: '/reportManager',
-    component: Layout,
-    redirect: '/reportManager/groupSalaryList',
-    name: '鎶ヨ〃绠$悊',
-    code: '1008',
-    meta: { code: '1008', title: '鎶ヨ〃绠$悊', icon: 'bbgl' },
-    alwaysShow: true,
-    children: [
-      {
-        path: 'produceSchedule',
-        name: 'produceScheduleCancel',
-        code: '1098',
-        component: () => import('@/views/reportManager/produceSchedule'),
-        meta: { code: '1098', title: '鐢熶骇杩涘害鎶ヨ〃', icon: '', keepAlive: true }
-      }, {
-        path: 'groupSalaryList',
-        name: 'groupSalaryListCancel',
-        code: '1090',
-        component: () => import('@/views/reportManager/groupSalaryList'),
-        meta: { code: '1090', title: '鐝粍宸ヨ祫缁熻', icon: '', keepAlive: true }
-      }, {
-        path: 'personSalaryList',
-        name: 'personSalaryListCancel',
-        code: '1091',
-        component: () => import('@/views/reportManager/personSalaryList'),
-        meta: { code: '1091', title: '浜哄憳宸ヨ祫', icon: '', keepAlive: true }
-      }, {
-        path: 'subcontractingOperation',
-        name: 'subcontractingOperationCancel',
-        code: '1092',
-        component: () => import('@/views/reportManager/subcontractingOperation'),
-        meta: { code: '1092', title: '濮斿宸ュ簭', icon: '', keepAlive: true }
-      }, {
-        path: 'defectDetailList',
-        name: 'defectDetailListCancel',
-        code: '1093',
-        component: () => import('@/views/reportManager/defectDetailList'),
-        meta: { code: '1093', title: '涓嶈壇鏄庣粏', icon: '', keepAlive: true }
-      }, {
-        path: 'abnormalQualityList',
-        name: 'abnormalQualityListCancel',
-        code: '1094',
-        component: () => import('@/views/reportManager/abnormalQualityList'),
-        meta: { code: '1094', title: '鍝佽川寮傚父', icon: '', keepAlive: true }
-      }, {
-        path: 'repairDetailList',
-        name: 'repairDetailListCancel',
-        code: '1095',
-        component: () => import('@/views/reportManager/repairDetailList'),
-        meta: { code: '1095', title: '缁翠慨鏄庣粏', icon: '', keepAlive: true }
-      }, {
-        path: 'installationLampList',
-        name: 'installationLampListCancel',
-        code: '1096',
-        component: () => import('@/views/reportManager/installationLampList'),
-        meta: { code: '1096', title: '瀹夌伅鎶ヨ〃', icon: '', keepAlive: true }
-      }, {
-        path: 'logisticsCheck',
-        name: 'logisticsCheckCancel',
-        code: '1097',
-        component: () => import('@/views/reportManager/logisticsCheck'),
-        meta: { code: '1097', title: '鐗╂祦妫�楠屾姤琛�', icon: '', keepAlive: true }
-      }
-    ]
-  },
-  {
-    path: '/systemSettings',
-    component: Layout,
-    redirect: '/systemSettings/bmgz',
-    name: '绯荤粺璁剧疆',
-    code: '1009',
-    meta: { code: '1009', title: '绯荤粺璁剧疆', icon: 'xtsz' },
-    alwaysShow: true,
-    children: [
-      {
-        path: 'codingRules',
-        name: 'codingRulesCancel',
-        code: '1101',
-        component: () => import('@/views/systemSettings/codingRules'),
-        meta: { code: '1101', title: '缂栫爜瑙勫垯', icon: '', keepAlive: true }
-      }, {
-        path: 'passwordEdit',
-        name: 'passwordEditCancel',
-        code: '1102',
-        component: () => import('@/views/systemSettings/passwordEdit'),
-        meta: { code: '1102', title: '瀵嗙爜淇敼', icon: '', keepAlive: true }
-      }, {
-        path: 'systemLog',
-        name: 'systemLogCancel',
-        code: '1103',
-        component: () => import('@/views/systemSettings/systemLog'),
-        meta: { code: '1103', title: '绯荤粺鏃ュ織', icon: '', keepAlive: true }
-      }, {
-        path: 'sopUpload',
-        name: 'sopUploadCancel',
-        code: '1104',
-        component: () => import('@/views/systemSettings/sopUpload'),
-        meta: { code: '1104', title: 'SOP涓婁紶', icon: '', keepAlive: true }
-      }, {
-        path: 'shopNotice',
-        name: 'shopNoticeCancel',
-        code: '1105',
-        component: () => import('@/views/systemSettings/shopNotice'),
-        meta: { code: '1105', title: '杞﹂棿鍏憡', icon: '', keepAlive: true }
-      }
-    ]
-  },
-  {
-    path: '/purchasesManager',
-    component: Layout,
-    redirect: '/purchasesManager/purchasesList',
-    name: '閲囪喘绠$悊',
-    code: '1000',
-    meta: { code: '1000', title: '閲囪喘绠$悊', icon: 'cggl' },
-    alwaysShow: true,
-    children: [
-      {
-        path: 'purchasesList',
-        name: 'CGDDCancel',
-        code: '1201',
-        component: () => import('@/views/purchasesManager/purchasesList'),
-        meta: { code: '1201', title: '閲囪喘璁㈠崟', icon: '', keepAlive: true }
-      }, {
-        path: 'arrivalNoticeList',
-        name: 'arrivalNoticeListCancel',
-        code: '1202',
-        component: () => import('@/views/purchasesManager/arrivalNoticeList'),
-        meta: { code: '1202', title: '閲囪喘鏀惰揣鍗�', icon: '', keepAlive: true }
-      }, {
-        path: 'salesStatisticsList',
-        name: 'salesStatisticsCancel',
-        code: '1203',
-        component: () => import('@/views/purchasesManager/salesStatisticsList'),
-        meta: { code: '1203', title: '閿�鍞鍗�', icon: '', keepAlive: true }
-      }, {
-        path: 'goodsStatisticsList',
-        name: 'goodsStatisticsListCancel',
-        code: '1204',
-        component: () => import('@/views/purchasesManager/goodsStatisticsList'),
-        meta: { code: '1204', title: '閿�璐у崟', icon: '', keepAlive: true }
-      }, {
-        path: 'InventoryLedgerList',
-        name: 'InventoryLedgerListCancel',
-        code: '1205',
-        component: () => import('@/views/purchasesManager/InventoryLedgerList'),
-        meta: { code: '1205', title: '搴撳瓨鍙拌处', icon: '', keepAlive: true }
-      }
-    ]
-  }
 ]
 
 const createRouter = () => new Router({
diff --git a/src/utils/request.js b/src/utils/request.js
index 3cb3d4e..9317949 100644
--- a/src/utils/request.js
+++ b/src/utils/request.js
@@ -42,7 +42,7 @@
     if (res.code === '300' || res.code === '303') {
       if (res.code === '300') {
         Message({
-          message: res.Message || 'Error',
+          message: res.message || 'Error',
           type: 'error',
           duration: 5 * 1000
         })
diff --git a/src/views/basicSettings/rolePermission.vue b/src/views/basicSettings/rolePermission.vue
new file mode 100644
index 0000000..5a3242e
--- /dev/null
+++ b/src/views/basicSettings/rolePermission.vue
@@ -0,0 +1,538 @@
+<template>
+  <div>
+    <div class="body" :style="{height:mainHeight+'px'}">
+      <div class="bodyTopButtonGroup" style="justify-content: space-between">
+        <el-button v-waves type="primary" icon="el-icon-circle-plus-outline">鏂板</el-button>
+        <el-button v-waves icon="el-icon-download">瀵煎叆</el-button>
+      </div>
+
+      <div class="bodyTopFormGroup">
+        <el-form
+          ref="form"
+          :model="form"
+          label-width="100px"
+          inline
+          style="display: flex;"
+        >
+          <div class="elForm">
+            <el-form-item label="姣嶄欢缂栫爜" style=" display: flex;">
+              <el-input v-model="form.OrgCode" placeholder="璇疯緭鍏�" style="width: 200px" />
+            </el-form-item>
+            <el-form-item label="姣嶄欢鍚嶇О" style=" display: flex;">
+              <el-input v-model="form.OrgName" placeholder="璇疯緭鍏�" style="width: 200px" />
+            </el-form-item>
+            <el-form-item label="姣嶄欢瑙勬牸" style=" display: flex;">
+              <el-input v-model="form.OrgName" placeholder="璇疯緭鍏�" style="width: 200px" />
+            </el-form-item>
+
+            <el-form-item label="鐗堟湰缂栧彿" style=" display: flex;">
+              <el-input v-model="form.OrgName" placeholder="璇疯緭鍏�" style="width: 200px" />
+            </el-form-item>
+            <el-form-item v-show="isExpandForm" label="鍒涘缓浜哄憳" style=" display: flex;">
+              <el-input v-model="form.UserName" style="width: 200px" placeholder="璇疯緭鍏�" />
+            </el-form-item>
+            <el-form-item v-show="isExpandForm" label="鍒涘缓鏃ユ湡" style=" display: flex;">
+              <el-date-picker
+                v-model="form.createdate"
+                style="width: 200px"
+                type="date"
+                placeholder="閫夋嫨鏃ユ湡"
+              />
+            </el-form-item>
+          </div>
+          <div
+            class="bodySearchReset"
+            :style="{marginLeft:$store.state.app.sidebar.opened? $store.state.settings.menuIsHorizontal?'15%':'3%':'10%'}"
+          >
+            <el-button v-waves type="primary" icon="el-icon-search">鏌ヨ</el-button>
+            <el-button v-waves type="info" icon="el-icon-refresh">閲嶇疆</el-button>
+          </div>
+        </el-form>
+        <div
+          class="bodyTopFormExpand"
+        >
+          <svg-icon
+            v-show="mouseHoverType==='mouseout'"
+            style="cursor: pointer"
+            :icon-class="!isExpandForm?'doubleDown3':'doubleUp3'"
+            @mouseenter="mouseHoverType=$event.type"
+          />
+          <svg-icon
+            v-show="mouseHoverType==='mouseenter'"
+            style="cursor: pointer"
+            :icon-class="!isExpandForm?'doubleDown':'doubleUp'"
+            @click="isExpandForm=!isExpandForm"
+            @mouseout="mouseHoverType=$event.type"
+          />
+        </div>
+      </div>
+
+      <div
+        class="elTableDiv"
+      >
+        <div style="width: 300px;">
+          <el-tree
+            ref="treeLeftRef"
+            style="padding: 10px;"
+            :style="{height:isExpandForm?tableHeight:(tableHeight+105)+'px'}"
+            :data="treeLeft"
+            node-key="code"
+            highlight-current
+            :props="defaultProps"
+            :default-expand-all="true"
+          />
+        </div>
+
+        <div
+          style="margin-left: 15px;width:100%;"
+        >
+          <el-tabs v-model="activeName" type="border-card">
+            <el-tab-pane label="PC绔�" name="PC绔�">
+              <div style="display: flex;">
+
+                <div
+                  ref="scrollLeft"
+                  style="border-right: 1px solid rgba(0,0,0,0.2);width: 200px;
+                  overflow-y: auto;overflow-x:hidden;"
+                  :style="{height:isExpandForm?tableHeight:(tableHeight+35)+'px',}"
+                  @scroll="scrollLeftScroll()"
+                  @mouseover="changeScrollLeftFlag(false)"
+                >
+                  <div style=" ">
+                    <i class="el-icon-s-operation" :style="{color:$store.state.settings.theme}" /> 鑿滃崟鏉冮檺
+                  </div>
+                  <!--                  :style="{height:isExpandForm?tableHeight:(tableHeight+15)+'px',}"-->
+                  <el-tree
+                    ref="treeCenterRef"
+                    style="padding-top: 10px;width: 199px;"
+                    :data="treeCenter"
+                    highlight-current
+                    :props="defaultProps"
+                    show-checkbox
+                    node-key="code"
+                    :default-expand-all="true"
+                    @check-change="handleTreeCenterCheckChange"
+                    @check="handleTreeCenterCheck"
+                    @node-click="getLeftTreeNode"
+                  />
+                </div>
+
+                <div
+                  ref="scrollCenter"
+                  style="border-right: 1px solid rgba(0,0,0,0.2);width: 500px;padding-left: 10px;overflow-y: auto"
+                  :style="{height:isExpandForm?tableHeight:(tableHeight+35)+'px',}"
+                  @scroll="scrollCenterScroll()"
+                  @mouseover="changeScrollLeftFlag(true)"
+                >
+                  <div style=" ">
+                    <i class="el-icon-s-operation" :style="{color:$store.state.settings.theme}" /> 鎸夐挳鏉冮檺
+                  </div>
+                  <el-checkbox
+                    v-model="buttonIsChecked"
+                    style="height: 26px;display:flex;align-items: center;margin-top:10px;width:200px"
+                    @change="handleCheckAllChange"
+                  >鍏ㄩ��
+                  </el-checkbox>
+
+                  <div v-for="item in treeCenter[0].children" :key="item.label">
+                    <div
+                      v-if="item.checkedButton"
+                      style="margin-left: 40px;height:26px;display: flex;"
+                    />
+
+                    <el-checkbox-group
+                      v-for="it in item.children"
+                      v-if="item.expanded"
+                      :key="it.code"
+                      v-model="it.checkedButton"
+                      style="margin-left: 40px;height:26px;display: flex"
+                      @change="val=>handleCheckedButtonChange(val,it.code,it.checkedButton)"
+                    >
+
+                      <el-checkbox
+                        v-for="i in it.itemButton"
+                        :key="i"
+                        :label="i"
+                        style="display:flex;align-items: center"
+                      >{{ i }}
+                      </el-checkbox>
+                    </el-checkbox-group>
+                  </div>
+
+                </div>
+
+              </div>
+
+            </el-tab-pane>
+            <el-tab-pane label="APP绔�" name="APP绔�">澶уぇ</el-tab-pane>
+            <el-tab-pane label="宸ユ帶绔�" name="宸ユ帶绔�">宸ユ帶绔�</el-tab-pane>
+          </el-tabs>
+
+        </div>
+
+      </div>
+
+    </div>
+
+  </div>
+</template>
+
+<script>
+import Pagination from '@/components/Pagination'
+import ImportPicker from '@/components/ImportPicker'
+import elDragDialog from '@/directive/el-drag-dialog'
+import waves from '@/directive/waves'
+
+export default {
+  name: 'Zzjg',
+  components: {
+    Pagination, ImportPicker
+  },
+  directives: { elDragDialog, waves },
+  data() {
+    return {
+      mouseHoverType: 'mouseout',
+      isExpandForm: false,
+      mainHeight: 0,
+      tableHeight: 0,
+      form: {
+        OrgCode: '', // 缁勭粐鏋舵瀯浠g爜
+        OrgName: '', // 缁勭粐鏋舵瀯鍚嶇О
+        OrgType: '', // 缁勭粐绫诲瀷
+        UserName: '', // 鍒涘缓浜哄憳
+        createdate: '',
+        prop: 'lm_date', // 鎺掑簭瀛楁
+        order: 'desc', // 鎺掑簭瀛楁
+        page: 1, // 绗嚑椤�
+        rows: 20 // 姣忛〉澶氬皯鏉�
+      },
+      treeLeft: [
+        {
+          code: '2000',
+          label: '娴欐睙鏂板嚡杩暟瀛楃鎶�鑲′唤鏈夐檺鍏徃',
+          children: [{
+            code: '2001',
+            label: '鎵�鏈変汉'
+          }, {
+            code: '2002',
+            label: '閲戝伐杞﹂棿鍛樺伐'
+          }]
+        }
+      ],
+      treeCenter: [
+        {
+          label: 'PC绔〉闈�',
+          code: '1000',
+          children: [{
+            code: '2000',
+            label: '鍩虹璁剧疆',
+            children: [{
+              code: '2001',
+              label: '缁勭粐鏋舵瀯'
+            }, {
+              code: '2002',
+              label: '瑙掕壊鏉冮檺'
+            }]
+          }, {
+            label: '璁惧绠$悊',
+            code: '3000',
+            children: [{
+              code: '3001',
+              label: '璁惧娓呭崟'
+            }, {
+              code: '3002',
+              label: '璁惧淇濆吇'
+            }]
+          }]
+        }
+      ],
+      defaultProps: {
+        children: 'children',
+        label: 'label'
+      },
+      activeName: 'PC绔�',
+
+      buttonIsChecked: false,
+
+      // itemButton: ['鏂板', '淇敼', '鍒犻櫎', '涓嬭浇', '涓婁紶'],
+      // checkedButton: ['鏂板', '淇敼'],
+
+      menuCheckedCodeArr: [], // 鑿滃崟鏉冮檺鏁扮粍閫変腑鐨�
+
+      isScroll: false
+
+    }
+  },
+
+  created() {
+
+  },
+  mounted() {
+    window.addEventListener('resize', this.getHeight)
+    this.getHeight()
+
+    this.$nextTick(() => {
+      this.$refs.treeLeftRef.setCurrentKey('2001') // 榛樿閫変腑鑺傜偣绗竴涓�
+    })
+
+    this.treeCenter[0].children.forEach(item => {
+      if (item.children && item.children.length) {
+        item.children.forEach(it => {
+          it.itemButton = ['鏂板', '淇敼', '鍒犻櫎', '涓嬭浇', '涓婁紶']
+          // it.checkedButton = ['鏂板', '淇敼']
+          it.checkedButton = []
+        })
+        item.itemButton = []
+        item.checkedButton = []
+        item.expanded = true
+      }
+    })
+    console.log(JSON.parse(JSON.stringify(this.treeCenter)))
+  },
+  methods: {
+    // 宸﹁竟婊氬姩鏉℃粦鍔ㄦ椂
+    scrollLeftScroll() {
+      if (!this.isScroll) {
+        this.$refs.scrollCenter.scrollTop = this.$refs.scrollLeft.scrollTop
+      }
+    },
+    // 涓棿杈规粴鍔ㄦ潯婊戝姩鏃�
+    scrollCenterScroll() {
+      if (this.isScroll) {
+        this.$refs.scrollLeft.scrollTop = this.$refs.scrollCenter.scrollTop
+      }
+    },
+
+    resize() {
+
+    },
+
+    changeScrollLeftFlag(val) {
+      this.isScroll = val
+    },
+
+    // 鍏ㄩ�夋敼鍙�
+    handleCheckAllChange(val) {
+      const checkedKeys = this.$refs.treeCenterRef.getCheckedKeys()
+
+      if (val) {
+        this.treeCenter[0].children.forEach(item => {
+          if (item.children && item.children.length) {
+            item.children.forEach(it => {
+              if (checkedKeys.includes(it.code)) {
+                it.checkedButton = it.itemButton
+              }
+            })
+          }
+        })
+      } else {
+        this.treeCenter[0].children.forEach(item => {
+          if (item.children && item.children.length) {
+            item.children.forEach(it => {
+              if (checkedKeys.includes(it.code)) {
+                it.checkedButton = []
+              }
+            })
+          }
+        })
+      }
+
+      console.log(this.treeCenter[0].children, 20)
+    },
+    // 鍗曚釜鎸夐挳鏀瑰彉    oldValue 鏇存柊鍓嶇殑鍊�  code 瀵瑰簲鐨勮彍鍗曠紪鐮�  newValue 鏇存柊鍚庣殑鍊�
+    handleCheckedButtonChange(oldValue, code, newValue) {
+      // 鍒ゆ柇鏄惁鍖呭惈鍦ㄥ唴
+      if (!this.menuCheckedCodeArr.includes(code) && oldValue.length === 0 && newValue.length === 1) { // 鍚�
+        this.menuCheckedCodeArr.push(code)
+      } else if (this.menuCheckedCodeArr.includes(code) && oldValue.length === 1 && newValue.length === 0) { // 鏄�
+        this.menuCheckedCodeArr = this.menuCheckedCodeArr.filter(i => i !== code)
+      }
+
+      this.$refs.treeCenterRef.setCheckedKeys(this.menuCheckedCodeArr)
+
+      // 杩欓噷鏄垽鏂叏閫塩heckbox 鏄惁閫変腑
+      let count = 0
+      let childrenLength = 0
+      this.treeCenter[0].children.forEach(item => {
+        if (item.children && item.children.length) {
+          item.children.forEach(it => {
+            if (it.checkedButton.length === it.itemButton.length) {
+              count++
+            }
+            childrenLength++
+          })
+        }
+      })
+      this.buttonIsChecked = count === childrenLength
+      this.$forceUpdate()
+    },
+
+    getLeftTreeNode(data, Node, VueComponent) {
+      console.log(data, Node, VueComponent, 2221)
+      console.log(Node.expanded)
+      this.treeCenter[0].children.forEach(item => {
+        // console.log(item, 'item')
+        if (item.label === data.label) {
+          item.expanded = Node.expanded
+        }
+      })
+      if (data.label === 'PC绔〉闈�') {
+        Node.expanded = true // 鏆傛椂鍏堝啓鎴愯繖涓�
+        // this.treeCenter[0].children.forEach(item => {
+        //   item.expanded = Node.expanded
+        // })
+      }
+      this.$forceUpdate()
+    },
+
+    handleTreeCenterCheck(obj, { checkedNodes, checkedKeys, halfCheckedNodes, halfCheckedKeys }) {
+      // console.log(obj, checkedNodes, checkedKeys, halfCheckedNodes, halfCheckedKeys)
+    },
+    handleTreeCenterCheckChange(obj, selfChecked, selfChildrenTreeCheck) {
+      // console.log(obj, selfChecked, selfChildrenTreeCheck)
+      if (!selfChildrenTreeCheck) {
+        if (!selfChecked) {
+          this.treeCenter[0].children.forEach(item => {
+            if (item.children && item.children.length) {
+              item.children.forEach(it => {
+                if (it.code === obj.code) {
+                  it.checkedButton = []
+                }
+              })
+            }
+          })
+          this.$forceUpdate()
+        }
+      }
+    },
+
+    // 鑾峰彇椤甸潰楂樺害
+    getHeight() {
+      this.$nextTick(() => {
+        this.mainHeight = window.innerHeight - 85
+        this.tableHeight = this.mainHeight - 255
+        // this.$refs.tableDataRef.doLayout()
+      })
+    }
+  }
+}
+</script>
+
+<!--鍏叡椤甸潰鏍峰紡-->
+<style lang="scss" scoped>
+$main_color: #42b983;
+::v-deep .el-button--text {
+  font-size: 14px;
+  cursor: pointer;
+}
+
+.el-icon-share, .el-icon-delete, .el-icon-edit-outline {
+  color: $main_color;
+  cursor: pointer;
+}
+
+.el-icon-edit-outline {
+  margin-right: 15px;
+}
+
+::v-deep .el-button--primary, .el-button--default, .el-button--info {
+  height: 34px;
+  display: flex;
+  align-items: center;
+  padding: 0 15px;
+}
+
+::v-deep .el-button--primary {
+  //background-color: $main_color !important;
+}
+
+::v-deep .el-button--default {
+  background-color: #f8f8fa;
+  border: none;
+}
+
+::v-deep .el-input__inner {
+  height: 34px;
+  line-height: 34px;
+  //color: #a7a7a7;
+}
+
+::v-deep .el-dialog__body {
+  padding: 20px 100px !important;
+}
+
+::v-deep .dialogVisibleRoles .el-dialog__body {
+  padding: 20px 20px !important;
+}
+
+::v-deep .importPickerClass .el-dialog__body {
+  padding: 20px 20px !important;
+}
+
+::v-deep .el-dialog__footer {
+  display: flex;
+  justify-content: flex-end;
+}
+
+::v-deep .el-table .caret-wrapper {
+  transform: scale(0.8);
+}
+
+::v-deep .cell {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+
+::v-deep .el-table::before {
+  height: 0;
+}
+
+::v-deep .el-table__body-wrapper {
+  background-color: #f8f8fa;
+}
+
+::v-deep .el-table__body .el-table__row.hover-row td {
+  background-color: #eaecef;
+}
+
+::v-deep .el-form--inline .el-form-item__label {
+  color: #a7a7a7;
+}
+
+.body ::v-deep .el-divider {
+  border: 1px solid #eee;
+  width: 99%;
+  margin: 10px auto;
+}
+
+.body ::v-deep .el-form-item {
+  margin-bottom: 0;
+}
+
+.userDialogVisible ::v-deep .el-form-item {
+  margin-bottom: 0;
+}
+
+::v-deep .el-select__caret {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.tableFixed {
+  ::v-deep .el-table__fixed-right {
+    height: 100% !important;
+  }
+
+  ::v-deep .el-table__fixed {
+    height: 100% !important;
+  }
+}
+</style>
+<style>
+
+.el-table .custom-row {
+  background: #f8f8fa;
+}
+</style>
diff --git a/src/views/login/index.vue b/src/views/login/index.vue
index 0a0ff51..d0e09f4 100644
--- a/src/views/login/index.vue
+++ b/src/views/login/index.vue
@@ -235,6 +235,7 @@
     },
 
     dialogVisibleCancel() {
+      // localStorage.removeItem('token')
       this.dialogVisible = false
     },
     async dialogVisibleConfirm() {

--
Gitblit v1.9.3