wangtao 3 лет назад
Родитель
Сommit
3025094bce
100 измененных файлов с 13895 добавлено и 0 удалено
  1. 72 0
      .history/package_20220704131716.json
  2. 29 0
      .history/public/static/config_20220614104407.js
  3. 29 0
      .history/public/static/config_20220614104455.js
  4. 29 0
      .history/public/static/config_20220614110219.js
  5. 29 0
      .history/public/static/config_20220614110231.js
  6. 29 0
      .history/public/static/config_20220614140105.js
  7. 29 0
      .history/public/static/config_20220614170010.js
  8. 29 0
      .history/public/static/config_20220614170525.js
  9. 29 0
      .history/public/static/config_20220615144103.js
  10. 29 0
      .history/public/static/config_20220615144219.js
  11. 29 0
      .history/public/static/config_20220615144302.js
  12. 29 0
      .history/public/static/config_20220615144303.js
  13. 29 0
      .history/public/static/config_20220615144304.js
  14. 29 0
      .history/public/static/config_20220615144309.js
  15. 29 0
      .history/public/static/config_20220615144902.js
  16. 29 0
      .history/public/static/config_20220615144903.js
  17. 29 0
      .history/public/static/config_20220615145607.js
  18. 29 0
      .history/public/static/config_20220615145654.js
  19. 29 0
      .history/public/static/config_20220615145711.js
  20. 29 0
      .history/public/static/config_20220615181000.js
  21. 29 0
      .history/public/static/config_20220701170121.js
  22. 29 0
      .history/public/static/config_20220701170126.js
  23. 29 0
      .history/public/static/config_20220701170128.js
  24. 29 0
      .history/public/static/config_20220704112117.js
  25. 28 0
      .history/public/static/config_20220704112121.js
  26. 28 0
      .history/public/static/config_20220704140714.js
  27. 28 0
      .history/public/static/config_20220704140719.js
  28. 28 0
      .history/public/static/config_20220704140720.js
  29. 28 0
      .history/public/static/config_20220704141421.js
  30. 32 0
      .history/src/api/account-manage/index_20220614144511.js
  31. 32 0
      .history/src/api/account-manage/index_20220614144620.js
  32. 57 0
      .history/src/api/user_20220614144132.js
  33. 57 0
      .history/src/api/user_20220614144136.js
  34. 57 0
      .history/src/api/user_20220614144535.js
  35. 50 0
      .history/src/api/user_20220614144616.js
  36. 50 0
      .history/src/api/user_20220614144630.js
  37. 50 0
      .history/src/api/user_20220614144700.js
  38. 50 0
      .history/src/api/user_20220614144725.js
  39. 57 0
      .history/src/api/user_20220614145126.js
  40. 57 0
      .history/src/api/user_20220614151055.js
  41. 57 0
      .history/src/api/user_20220614151214.js
  42. 57 0
      .history/src/api/user_20220614153555.js
  43. 57 0
      .history/src/api/user_20220614153609.js
  44. 200 0
      .history/src/assets/styles/index_20220613191246.scss
  45. 167 0
      .history/src/components/TimeMenu/index_20220614163555.vue
  46. 167 0
      .history/src/components/TimeMenu/index_20220614163600.vue
  47. 167 0
      .history/src/components/TimeMenu/index_20220614163605.vue
  48. 167 0
      .history/src/components/TimeMenu/index_20220614163649.vue
  49. 166 0
      .history/src/components/TimeMenu/index_20220614163853.vue
  50. 165 0
      .history/src/components/TimeMenu/index_20220614163928.vue
  51. 165 0
      .history/src/components/TimeMenu/index_20220614163930.vue
  52. 165 0
      .history/src/components/TimeMenu/index_20220614163934.vue
  53. 165 0
      .history/src/components/TimeMenu/index_20220614164123.vue
  54. 165 0
      .history/src/components/TimeMenu/index_20220614164145.vue
  55. 165 0
      .history/src/components/TimeMenu/index_20220614164322.vue
  56. 164 0
      .history/src/components/TimeMenu/index_20220614165206.vue
  57. 164 0
      .history/src/components/TimeMenu/index_20220614165423.vue
  58. 164 0
      .history/src/components/TimeMenu/index_20220614165429.vue
  59. 165 0
      .history/src/components/TimeMenu/index_20220614165501.vue
  60. 165 0
      .history/src/components/TimeMenu/index_20220614165512.vue
  61. 165 0
      .history/src/components/TimeMenu/index_20220614165519.vue
  62. 165 0
      .history/src/components/TimeMenu/index_20220614165540.vue
  63. 166 0
      .history/src/components/TimeMenu/index_20220614165749.vue
  64. 169 0
      .history/src/components/TimeMenu/index_20220614165846.vue
  65. 169 0
      .history/src/components/TimeMenu/index_20220614165856.vue
  66. 168 0
      .history/src/components/TimeMenu/index_20220614165911.vue
  67. 168 0
      .history/src/components/TimeMenu/index_20220614165916.vue
  68. 168 0
      .history/src/components/TimeMenu/index_20220614165926.vue
  69. 228 0
      .history/src/store/index_20220614144148.js
  70. 228 0
      .history/src/store/index_20220614144201.js
  71. 228 0
      .history/src/store/index_20220614144230.js
  72. 228 0
      .history/src/store/index_20220614144240.js
  73. 228 0
      .history/src/store/index_20220614144422.js
  74. 228 0
      .history/src/store/index_20220614144605.js
  75. 228 0
      .history/src/store/index_20220614144707.js
  76. 228 0
      .history/src/store/index_20220614144713.js
  77. 228 0
      .history/src/store/index_20220614145144.js
  78. 228 0
      .history/src/store/index_20220614145201.js
  79. 228 0
      .history/src/store/index_20220614145208.js
  80. 228 0
      .history/src/store/index_20220614150220.js
  81. 226 0
      .history/src/store/index_20220614161326.js
  82. 224 0
      .history/src/store/index_20220614161344.js
  83. 224 0
      .history/src/store/index_20220614164402.js
  84. 225 0
      .history/src/store/index_20220614164426.js
  85. 225 0
      .history/src/store/index_20220614164441.js
  86. 224 0
      .history/src/store/index_20220614164513.js
  87. 225 0
      .history/src/store/index_20220614164713.js
  88. 224 0
      .history/src/store/index_20220614164756.js
  89. 225 0
      .history/src/store/index_20220614164812.js
  90. 225 0
      .history/src/store/index_20220614164841.js
  91. 225 0
      .history/src/store/index_20220614164955.js
  92. 225 0
      .history/src/store/index_20220614165042.js
  93. 225 0
      .history/src/store/index_20220614165149.js
  94. 224 0
      .history/src/store/index_20220614165159.js
  95. 72 0
      .history/src/utils/request_20220614144342.js
  96. 422 0
      .history/src/views/MochaITOM/crew/index_20220607153718.vue
  97. 434 0
      .history/src/views/MochaITOM/crew/index_20220623132548.vue
  98. 434 0
      .history/src/views/MochaITOM/crew/index_20220623132549.vue
  99. 434 0
      .history/src/views/MochaITOM/crew/index_20220623132604.vue
  100. 434 0
      .history/src/views/MochaITOM/crew/index_20220623132605.vue

+ 72 - 0
.history/package_20220704131716.json

@@ -0,0 +1,72 @@
+{
+    "name": "security-admin",
+    "version": "1.0.1",
+    "description": "security-admin project",
+    "author": "julia-Yuan",
+    "scripts": {
+        "dev": "vue-cli-service serve",
+        "build:prod": "vue-cli-service build",
+        "build:stage": "vue-cli-service build --mode staging",
+        "preview": "node build/index.js --preview",
+        "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml",
+        "lint": "eslint --ext .js,.vue src",
+        "test:unit": "jest --clearCache && vue-cli-service test:unit",
+        "test:ci": "npm run lint && npm run test:unit"
+    },
+    "dependencies": {
+        "@riophae/vue-treeselect": "^0.4.0",
+        "axios": "^0.21.1",
+        "core-js": "3.6.5",
+        "echarts": "^4.8.0",
+        "element-ui": "2.15.5",
+        "file-saver": "^2.0.5",
+        "hls.js": "^1.0.4",
+        "jquery": "^3.6.0",
+        "js-cookie": "2.2.0",
+        "jsencrypt": "^3.2.1",
+        "normalize.css": "7.0.0",
+        "nprogress": "0.2.0",
+        "path-to-regexp": "2.4.0",
+        "qrcodejs2": "0.0.2",
+        "vue": "2.6.10",
+        "vue-count-to": "^1.0.13",
+        "vue-router": "3.0.6",
+        "vuex": "3.1.0",
+        "xlsx": "^0.16.9"
+    },
+    "devDependencies": {
+        "@vue/cli-plugin-babel": "4.4.4",
+        "@vue/cli-plugin-eslint": "4.4.4",
+        "@vue/cli-plugin-unit-jest": "^3.12.1",
+        "@vue/cli-service": "4.4.4",
+        "@vue/test-utils": "1.0.0-beta.29",
+        "autoprefixer": "9.5.1",
+        "babel-eslint": "^7.2.3",
+        "babel-jest": "^26.6.3",
+        "babel-plugin-dynamic-import-node": "2.3.3",
+        "chalk": "2.4.2",
+        "connect": "3.6.6",
+        "eslint": "6.7.2",
+        "eslint-plugin-vue": "6.2.2",
+        "html-webpack-plugin": "3.2.0",
+        "mockjs": "1.0.1-beta3",
+        "qs": "^6.9.6",
+        "runjs": "^4.4.2",
+        "sass": "1.26.8",
+        "sass-loader": "8.0.2",
+        "script-ext-html-webpack-plugin": "2.1.3",
+        "serve-static": "1.13.2",
+        "svg-sprite-loader": "4.1.3",
+        "svgo": "1.2.2",
+        "vue-template-compiler": "2.6.10"
+    },
+    "browserslist": [
+        "> 1%",
+        "last 2 versions"
+    ],
+    "engines": {
+        "node": ">=8.9",
+        "npm": ">= 3.0.0"
+    },
+    "license": "MIT"
+}

+ 29 - 0
.history/public/static/config_20220614104407.js

@@ -0,0 +1,29 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+// PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+//PLATFROM_CONFIG.baseUrl = "http://172.16.120.104:8082"
+// PLATFROM_CONFIG.baseUrl = "http://localhost:8082"
+//PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+//alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 29 - 0
.history/public/static/config_20220614104455.js

@@ -0,0 +1,29 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+// PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+    // PLATFROM_CONFIG.baseUrl = "http://localhost:8082"
+    //PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 29 - 0
.history/public/static/config_20220614110219.js

@@ -0,0 +1,29 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+// PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+    // PLATFROM_CONFIG.baseUrl = "http://localhost:8082"
+    //PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 29 - 0
.history/public/static/config_20220614110231.js

@@ -0,0 +1,29 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+// PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+    // PLATFROM_CONFIG.baseUrl = "http://localhost:8082"
+    //PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 29 - 0
.history/public/static/config_20220614140105.js

@@ -0,0 +1,29 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+// PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+    // PLATFROM_CONFIG.baseUrl = "http://localhost:8082"
+    //PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 29 - 0
.history/public/static/config_20220614170010.js

@@ -0,0 +1,29 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+// PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+//PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+// PLATFROM_CONFIG.baseUrl = "http://localhost:8082"
+PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 29 - 0
.history/public/static/config_20220614170525.js

@@ -0,0 +1,29 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+// PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+//PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+// PLATFROM_CONFIG.baseUrl = "http://localhost:8082"
+PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 29 - 0
.history/public/static/config_20220615144103.js

@@ -0,0 +1,29 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+// PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+    // PLATFROM_CONFIG.baseUrl = "http://localhost:8082"
+    //PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 29 - 0
.history/public/static/config_20220615144219.js

@@ -0,0 +1,29 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+// PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+    // PLATFROM_CONFIG.baseUrl = "http://localhost:8082"
+    //PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `https://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 29 - 0
.history/public/static/config_20220615144302.js

@@ -0,0 +1,29 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+// PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+    // PLATFROM_CONFIG.baseUrl = "http://localhost:8082"
+    //PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `https://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 29 - 0
.history/public/static/config_20220615144303.js

@@ -0,0 +1,29 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+// PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+    // PLATFROM_CONFIG.baseUrl = "http://localhost:8082"
+    //PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `https://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 29 - 0
.history/public/static/config_20220615144304.js

@@ -0,0 +1,29 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+// PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+    // PLATFROM_CONFIG.baseUrl = "http://localhost:8082"
+    //PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `https://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 29 - 0
.history/public/static/config_20220615144309.js

@@ -0,0 +1,29 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+// PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+    // PLATFROM_CONFIG.baseUrl = "http://localhost:8082"
+    //PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `https://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 29 - 0
.history/public/static/config_20220615144902.js

@@ -0,0 +1,29 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+// PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+//PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+// PLATFROM_CONFIG.baseUrl = "http://localhost:8082"
+PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `https://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 29 - 0
.history/public/static/config_20220615144903.js

@@ -0,0 +1,29 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+// PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+//PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+// PLATFROM_CONFIG.baseUrl = "http://localhost:8082"
+PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `https://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 29 - 0
.history/public/static/config_20220615145607.js

@@ -0,0 +1,29 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+// PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+    // PLATFROM_CONFIG.baseUrl = "http://localhost:8082"
+    //PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `https://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 29 - 0
.history/public/static/config_20220615145654.js

@@ -0,0 +1,29 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+// PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+    // PLATFROM_CONFIG.baseUrl = "http://localhost:8082"
+    //PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `https://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 29 - 0
.history/public/static/config_20220615145711.js

@@ -0,0 +1,29 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+// PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+//PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+// PLATFROM_CONFIG.baseUrl = "http://localhost:8082"
+PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `https://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 29 - 0
.history/public/static/config_20220615181000.js

@@ -0,0 +1,29 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+// PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+//PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+// PLATFROM_CONFIG.baseUrl = "http://localhost:8082"
+PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `https://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 29 - 0
.history/public/static/config_20220701170121.js

@@ -0,0 +1,29 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+    //PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+    // PLATFROM_CONFIG.baseUrl = "http://localhost:8082"
+    //PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `https://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 29 - 0
.history/public/static/config_20220701170126.js

@@ -0,0 +1,29 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+    //PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+    // PLATFROM_CONFIG.baseUrl = "http://localhost:8082"
+    //PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `https://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 29 - 0
.history/public/static/config_20220701170128.js

@@ -0,0 +1,29 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+    //PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+    // PLATFROM_CONFIG.baseUrl = "http://localhost:8082"
+    //PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `https://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 29 - 0
.history/public/static/config_20220704112117.js

@@ -0,0 +1,29 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+//PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+    // PLATFROM_CONFIG.baseUrl = "http://localhost:8082"
+    //PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `https://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 28 - 0
.history/public/static/config_20220704112121.js

@@ -0,0 +1,28 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+//PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+    //PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `https://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 28 - 0
.history/public/static/config_20220704140714.js

@@ -0,0 +1,28 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+    //PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+    //PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `https://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 28 - 0
.history/public/static/config_20220704140719.js

@@ -0,0 +1,28 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+//PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+//PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `https://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 28 - 0
.history/public/static/config_20220704140720.js

@@ -0,0 +1,28 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+//PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+//PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `https://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 28 - 0
.history/public/static/config_20220704141421.js

@@ -0,0 +1,28 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:18
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-13 15:02:51
+ * @FilePath: \securityHtml\public\static\config.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+// api 请求路径
+var PLATFROM_CONFIG = {};
+//PLATFROM_CONFIG.baseUrl = "https://smartpark.caih.com/spapi"
+//PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/af"
+
+//PLATFROM_CONFIG.baseUrl = "http://101.133.214.75:81/af"
+//PLATFROM_CONFIG.baseUrl = "http://172.16.120.213:8082"
+PLATFROM_CONFIG.baseUrl = "http://10.21.39.1:8082" //生产
+    //alarming WEBSOCKET
+let userInfo = window.localStorage.getItem("key");
+var PLATFROM_WEBSOCKET = {};
+PLATFROM_WEBSOCKET.wsUrl = `ws://10.21.39.1:8080/afws/uskyWS?${userInfo}`
+    // PLATFROM_WEBSOCKET.wsUrl = `ws://172.16.120.246:8081/uskyWS?${userInfo}`
+
+
+//iframe 请求路径
+//http://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9 初始路径http://172.16.120.246:9000/
+var PLATFROM_IFRAME = {};
+PLATFROM_IFRAME.iframeUrl = `https://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9`

+ 32 - 0
.history/src/api/account-manage/index_20220614144511.js

@@ -0,0 +1,32 @@
+import request from '@/utils/request'
+//用户管理
+// export function addUser(data) {
+//     return request({
+//         url: `/sys/user/addUser`,
+//         method: 'post',
+//         data
+//     })
+// }
+
+// export function getInfo(data) {
+//     return request({
+//         url: '/menu/queryMenu',
+//         method: 'post',
+//         data
+//     })
+// }
+export function logout() {
+    return request({
+        url: '/login/MloginOut',
+        method: 'post',
+    })
+}
+
+// 获取验证码
+export function getCodeImg() { //captchaImage/ 后面的参数跟captchaType = math(生成需要计算的验证码)char(生成文字二维码)
+    return request({
+        url: '/captchaImage?captchaType=math',
+        method: 'get',
+        // params: query
+    })
+}

+ 32 - 0
.history/src/api/account-manage/index_20220614144620.js

@@ -0,0 +1,32 @@
+import request from '@/utils/request'
+//用户管理
+// export function addUser(data) {
+//     return request({
+//         url: `/sys/user/addUser`,
+//         method: 'post',
+//         data
+//     })
+// }
+
+export function getInfo(data) {
+    return request({
+        url: '/menu/queryMenu',
+        method: 'post',
+        data
+    })
+}
+export function logout() {
+    return request({
+        url: '/login/MloginOut',
+        method: 'post',
+    })
+}
+
+// 获取验证码
+export function getCodeImg() { //captchaImage/ 后面的参数跟captchaType = math(生成需要计算的验证码)char(生成文字二维码)
+    return request({
+        url: '/captchaImage?captchaType=math',
+        method: 'get',
+        // params: query
+    })
+}

+ 57 - 0
.history/src/api/user_20220614144132.js

@@ -0,0 +1,57 @@
+import request from '@/utils/request'
+
+export function login(data) { //常规
+    return request({
+        url: `/sys/login`,
+        method: 'post',
+        params: data
+    })
+}
+
+// 登录方法(ERP)
+export function loginERP(data) {
+    return request({
+        url: '/sys/loginByCenter',
+        method: 'post',
+        data
+    })
+}
+
+
+// 获取权限菜单栏
+export function getRouter() {
+    return request({
+        url: '/sys/getRouters',
+        method: 'get',
+    })
+}
+// 获取用户信息
+export function getInfo() {
+    return request({
+        url: '/system/user/',
+        method: 'get',
+    })
+}
+
+// export function getInfo(data) {
+//   return request({
+//       url: '/menu/queryMenu',
+//       method: 'post',
+//       data
+//   })
+// }
+export function logout() { //用户退出
+    return request({
+        url: '/sys/loginOut',
+        method: 'post',
+    })
+}
+
+// 获取验证码
+export function getCodeImg(query) { //captchaImage/ 后面的参数跟captchaType = math(生成需要计算的验证码)char(生成文字二维码)
+    return request({
+        url: '/captchaImage?captchaType=math&',
+        method: 'get',
+        params: query
+    })
+}

+ 57 - 0
.history/src/api/user_20220614144136.js

@@ -0,0 +1,57 @@
+import request from '@/utils/request'
+
+export function login(data) { //常规
+    return request({
+        url: `/sys/login`,
+        method: 'post',
+        params: data
+    })
+}
+
+// 登录方法(ERP)
+export function loginERP(data) {
+    return request({
+        url: '/sys/loginByCenter',
+        method: 'post',
+        data
+    })
+}
+
+
+// 获取权限菜单栏
+export function getRouter() {
+    return request({
+        url: '/sys/getRouters',
+        method: 'get',
+    })
+}
+// 获取用户信息
+export function getInfo() {
+    return request({
+        url: '/system/user/',
+        method: 'get',
+    })
+}
+
+// export function getInfo(data) {
+//   return request({
+//       url: '/menu/queryMenu',
+//       method: 'post',
+//       data
+//   })
+// }
+export function logout() { //用户退出
+    return request({
+        url: '/sys/loginOut',
+        method: 'post',
+    })
+}
+
+// 获取验证码
+export function getCodeImg(query) { //captchaImage/ 后面的参数跟captchaType = math(生成需要计算的验证码)char(生成文字二维码)
+    return request({
+        url: '/captchaImage?captchaType=math&',
+        method: 'get',
+        params: query
+    })
+}

+ 57 - 0
.history/src/api/user_20220614144535.js

@@ -0,0 +1,57 @@
+import request from '@/utils/request'
+
+export function login(data) { //常规
+    return request({
+        url: `/sys/login`,
+        method: 'post',
+        params: data
+    })
+}
+
+// 登录方法(ERP)
+export function loginERP(data) {
+    return request({
+        url: '/sys/loginByCenter',
+        method: 'post',
+        data
+    })
+}
+
+
+// 获取权限菜单栏
+export function getRouter() {
+    return request({
+        url: '/sys/getRouters',
+        method: 'get',
+    })
+}
+// 获取用户信息
+export function getInfo() {
+    return request({
+        url: '/system/user/',
+        method: 'get',
+    })
+}
+
+// export function getInfo(data) {
+//   return request({
+//       url: '/menu/queryMenu',
+//       method: 'post',
+//       data
+//   })
+// }
+export function logout() { //用户退出
+    return request({
+        url: '/sys/loginOut',
+        method: 'post',
+    })
+}
+
+// 获取验证码
+export function getCodeImg(query) { //captchaImage/ 后面的参数跟captchaType = math(生成需要计算的验证码)char(生成文字二维码)
+    return request({
+        url: '/captchaImage?captchaType=math&',
+        method: 'get',
+        params: query
+    })
+}

+ 50 - 0
.history/src/api/user_20220614144616.js

@@ -0,0 +1,50 @@
+import request from '@/utils/request'
+
+export function login(data) { //常规
+    return request({
+        url: `/sys/login`,
+        method: 'post',
+        params: data
+    })
+}
+
+// 登录方法(ERP)
+export function loginERP(data) {
+    return request({
+        url: '/sys/loginByCenter',
+        method: 'post',
+        data
+    })
+}
+
+
+// 获取权限菜单栏
+export function getInfo() {
+    return request({
+        url: '/sys/getRouters',
+        method: 'get',
+    })
+}
+/system/user /
+// export function getInfo(data) {
+//   return request({
+//       url: '/menu/queryMenu',
+//       method: 'post',
+//       data
+//   })
+// }
+export function logout() { //用户退出
+    return request({
+        url: '/sys/loginOut',
+        method: 'post',
+    })
+}
+
+// 获取验证码
+export function getCodeImg(query) { //captchaImage/ 后面的参数跟captchaType = math(生成需要计算的验证码)char(生成文字二维码)
+    return request({
+        url: '/captchaImage?captchaType=math&',
+        method: 'get',
+        params: query
+    })
+}

+ 50 - 0
.history/src/api/user_20220614144630.js

@@ -0,0 +1,50 @@
+import request from '@/utils/request'
+
+export function login(data) { //常规
+    return request({
+        url: `/sys/login`,
+        method: 'post',
+        params: data
+    })
+}
+
+// 登录方法(ERP)
+export function loginERP(data) {
+    return request({
+        url: '/sys/loginByCenter',
+        method: 'post',
+        data
+    })
+}
+
+
+// 获取权限菜单栏
+export function getInfo() {
+    return request({
+        url: '/sys/getRouters',
+        method: 'get',
+    })
+}
+// /system/user /
+// export function getInfo(data) {
+//   return request({
+//       url: '/menu/queryMenu',
+//       method: 'post',
+//       data
+//   })
+// }
+export function logout() { //用户退出
+    return request({
+        url: '/sys/loginOut',
+        method: 'post',
+    })
+}
+
+// 获取验证码
+export function getCodeImg(query) { //captchaImage/ 后面的参数跟captchaType = math(生成需要计算的验证码)char(生成文字二维码)
+    return request({
+        url: '/captchaImage?captchaType=math&',
+        method: 'get',
+        params: query
+    })
+}

+ 50 - 0
.history/src/api/user_20220614144700.js

@@ -0,0 +1,50 @@
+import request from '@/utils/request'
+
+export function login(data) { //常规
+    return request({
+        url: `/sys/login`,
+        method: 'post',
+        params: data
+    })
+}
+
+// 登录方法(ERP)
+export function loginERP(data) {
+    return request({
+        url: '/sys/loginByCenter',
+        method: 'post',
+        data
+    })
+}
+
+
+// 获取权限菜单栏
+export function getInfo() {
+    return request({
+        url: '/sys/getRouters',
+        method: 'get',
+    })
+}
+/system/user /
+// export function getInfo(data) {
+//   return request({
+//       url: '/menu/queryMenu',
+//       method: 'post',
+//       data
+//   })
+// }
+export function logout() { //用户退出
+    return request({
+        url: '/sys/loginOut',
+        method: 'post',
+    })
+}
+
+// 获取验证码
+export function getCodeImg(query) { //captchaImage/ 后面的参数跟captchaType = math(生成需要计算的验证码)char(生成文字二维码)
+    return request({
+        url: '/captchaImage?captchaType=math&',
+        method: 'get',
+        params: query
+    })
+}

+ 50 - 0
.history/src/api/user_20220614144725.js

@@ -0,0 +1,50 @@
+import request from '@/utils/request'
+
+export function login(data) { //常规
+    return request({
+        url: `/sys/login`,
+        method: 'post',
+        params: data
+    })
+}
+
+// 登录方法(ERP)
+export function loginERP(data) {
+    return request({
+        url: '/sys/loginByCenter',
+        method: 'post',
+        data
+    })
+}
+
+
+// 获取权限菜单栏
+export function getInfo() {
+    return request({
+        url: '/sys/getRouters',
+        method: 'get',
+    })
+}
+// /system/user /
+// export function getInfo(data) {
+//   return request({
+//       url: '/menu/queryMenu',
+//       method: 'post',
+//       data
+//   })
+// }
+export function logout() { //用户退出
+    return request({
+        url: '/sys/loginOut',
+        method: 'post',
+    })
+}
+
+// 获取验证码
+export function getCodeImg(query) { //captchaImage/ 后面的参数跟captchaType = math(生成需要计算的验证码)char(生成文字二维码)
+    return request({
+        url: '/captchaImage?captchaType=math&',
+        method: 'get',
+        params: query
+    })
+}

+ 57 - 0
.history/src/api/user_20220614145126.js

@@ -0,0 +1,57 @@
+import request from '@/utils/request'
+
+export function login(data) { //常规
+    return request({
+        url: `/sys/login`,
+        method: 'post',
+        params: data
+    })
+}
+
+// 登录方法(ERP)
+export function loginERP(data) {
+    return request({
+        url: '/sys/loginByCenter',
+        method: 'post',
+        data
+    })
+}
+
+
+// 获取权限菜单栏
+export function getInfo() {
+    return request({
+        url: '/sys/getRouters',
+        method: 'get',
+    })
+}
+// 获取权限菜单栏
+export function getInfo2() {
+    return request({
+        url: '/system/user/',
+        method: 'get',
+    })
+}
+// /system/user /
+// export function getInfo(data) {
+//   return request({
+//       url: '/menu/queryMenu',
+//       method: 'post',
+//       data
+//   })
+// }
+export function logout() { //用户退出
+    return request({
+        url: '/sys/loginOut',
+        method: 'post',
+    })
+}
+
+// 获取验证码
+export function getCodeImg(query) { //captchaImage/ 后面的参数跟captchaType = math(生成需要计算的验证码)char(生成文字二维码)
+    return request({
+        url: '/captchaImage?captchaType=math&',
+        method: 'get',
+        params: query
+    })
+}

+ 57 - 0
.history/src/api/user_20220614151055.js

@@ -0,0 +1,57 @@
+import request from '@/utils/request'
+
+export function login(data) { //常规
+    return request({
+        url: `/sys/login`,
+        method: 'post',
+        params: data
+    })
+}
+
+// 登录方法(ERP)
+export function loginERP(data) {
+    return request({
+        url: '/sys/loginByCenter',
+        method: 'post',
+        data
+    })
+}
+
+
+// 获取权限菜单栏
+export function getInfo() {
+    return request({
+        url: '/sys/getRouters',
+        method: 'get',
+    })
+}
+// 获取权限菜单栏
+export function getInfo2() {
+    return request({
+        url: '/sys/user',
+        method: 'get',
+    })
+}
+// /system/user /
+// export function getInfo(data) {
+//   return request({
+//       url: '/menu/queryMenu',
+//       method: 'post',
+//       data
+//   })
+// }
+export function logout() { //用户退出
+    return request({
+        url: '/sys/loginOut',
+        method: 'post',
+    })
+}
+
+// 获取验证码
+export function getCodeImg(query) { //captchaImage/ 后面的参数跟captchaType = math(生成需要计算的验证码)char(生成文字二维码)
+    return request({
+        url: '/captchaImage?captchaType=math&',
+        method: 'get',
+        params: query
+    })
+}

+ 57 - 0
.history/src/api/user_20220614151214.js

@@ -0,0 +1,57 @@
+import request from '@/utils/request'
+
+export function login(data) { //常规
+    return request({
+        url: `/sys/login`,
+        method: 'post',
+        params: data
+    })
+}
+
+// 登录方法(ERP)
+export function loginERP(data) {
+    return request({
+        url: '/sys/loginByCenter',
+        method: 'post',
+        data
+    })
+}
+
+
+// 获取权限菜单栏
+export function getInfo() {
+    return request({
+        url: '/sys/getRouters',
+        method: 'get',
+    })
+}
+// 获取权限菜单栏
+export function getInfo2() {
+    return request({
+        url: '/sys/user/',
+        method: 'get',
+    })
+}
+// /system/user /
+// export function getInfo(data) {
+//   return request({
+//       url: '/menu/queryMenu',
+//       method: 'post',
+//       data
+//   })
+// }
+export function logout() { //用户退出
+    return request({
+        url: '/sys/loginOut',
+        method: 'post',
+    })
+}
+
+// 获取验证码
+export function getCodeImg(query) { //captchaImage/ 后面的参数跟captchaType = math(生成需要计算的验证码)char(生成文字二维码)
+    return request({
+        url: '/captchaImage?captchaType=math&',
+        method: 'get',
+        params: query
+    })
+}

+ 57 - 0
.history/src/api/user_20220614153555.js

@@ -0,0 +1,57 @@
+import request from '@/utils/request'
+
+export function login(data) { //常规
+    return request({
+        url: `/sys/login`,
+        method: 'post',
+        params: data
+    })
+}
+
+// 登录方法(ERP)
+export function loginERP(data) {
+    return request({
+        url: '/sys/loginByCenter',
+        method: 'post',
+        data
+    })
+}
+
+
+// 获取权限菜单栏
+export function getInfo() {
+    return request({
+        url: '/sys/getRouters',
+        method: 'get',
+    })
+}
+// 获取权限菜单栏
+export function getInfo2() {
+    return request({
+        url: '/sys/getInfo',
+        method: 'get',
+    })
+}
+// /system/user /
+// export function getInfo(data) {
+//   return request({
+//       url: '/menu/queryMenu',
+//       method: 'post',
+//       data
+//   })
+// }
+export function logout() { //用户退出
+    return request({
+        url: '/sys/loginOut',
+        method: 'post',
+    })
+}
+
+// 获取验证码
+export function getCodeImg(query) { //captchaImage/ 后面的参数跟captchaType = math(生成需要计算的验证码)char(生成文字二维码)
+    return request({
+        url: '/captchaImage?captchaType=math&',
+        method: 'get',
+        params: query
+    })
+}

+ 57 - 0
.history/src/api/user_20220614153609.js

@@ -0,0 +1,57 @@
+import request from '@/utils/request'
+
+export function login(data) { //常规
+    return request({
+        url: `/sys/login`,
+        method: 'post',
+        params: data
+    })
+}
+
+// 登录方法(ERP)
+export function loginERP(data) {
+    return request({
+        url: '/sys/loginByCenter',
+        method: 'post',
+        data
+    })
+}
+
+
+// 获取权限菜单栏
+export function getInfo() {
+    return request({
+        url: '/sys/getRouters',
+        method: 'get',
+    })
+}
+// 获取权限菜单栏
+export function getInfo2() {
+    return request({
+        url: '/sys/getInfo/',
+        method: 'get',
+    })
+}
+// /system/user /
+// export function getInfo(data) {
+//   return request({
+//       url: '/menu/queryMenu',
+//       method: 'post',
+//       data
+//   })
+// }
+export function logout() { //用户退出
+    return request({
+        url: '/sys/loginOut',
+        method: 'post',
+    })
+}
+
+// 获取验证码
+export function getCodeImg(query) { //captchaImage/ 后面的参数跟captchaType = math(生成需要计算的验证码)char(生成文字二维码)
+    return request({
+        url: '/captchaImage?captchaType=math&',
+        method: 'get',
+        params: query
+    })
+}

+ 200 - 0
.history/src/assets/styles/index_20220613191246.scss

@@ -0,0 +1,200 @@
+@import './variables.scss';
+@import './mixin.scss';
+@import './transition.scss';
+@import './element-ui.scss';
+@import './sidebar.scss';
+@import './btn.scss';
+body {
+    height: 100%;
+    -moz-osx-font-smoothing: grayscale;
+    -webkit-font-smoothing: antialiased;
+    text-rendering: optimizeLegibility;
+    font-family: Microsoft YaHei Regular, Microsoft YaHei Regular-Regular;
+    // font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
+}
+
+label {
+    font-weight: 700;
+}
+
+html {
+    height: 100%;
+    box-sizing: border-box;
+}
+
+#app {
+    height: 100%;
+}
+
+*,
+*:before,
+*:after {
+    box-sizing: inherit;
+}
+
+.no-padding {
+    padding: 0px !important;
+}
+
+.padding-content {
+    padding: 4px 0;
+}
+
+a:focus,
+a:active {
+    outline: none;
+}
+
+a,
+a:focus,
+a:hover {
+    cursor: pointer;
+    color: inherit;
+    text-decoration: none;
+}
+
+div:focus {
+    outline: none;
+}
+
+.fr {
+    float: right;
+}
+
+.fl {
+    float: left;
+}
+
+.pr-5 {
+    padding-right: 5px;
+}
+
+.pl-5 {
+    padding-left: 5px;
+}
+
+.block {
+    display: block;
+}
+
+.pointer {
+    cursor: pointer;
+}
+
+.inlineBlock {
+    display: block;
+}
+
+.clearfix {
+    &:after {
+        visibility: hidden;
+        display: block;
+        font-size: 0;
+        content: " ";
+        clear: both;
+        height: 0;
+    }
+}
+
+aside {
+    background: #eef1f6;
+    padding: 8px 24px;
+    margin-bottom: 20px;
+    border-radius: 2px;
+    display: block;
+    line-height: 32px;
+    font-size: 16px;
+    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
+    color: #2c3e50;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+    a {
+        color: #337ab7;
+        cursor: pointer;
+        &:hover {
+            color: rgb(32, 160, 255);
+        }
+    }
+}
+
+//main-container全局样式
+.app-container {
+    padding: 20px;
+}
+
+.components-container {
+    margin: 30px 50px;
+    position: relative;
+}
+
+.pagination-container {
+    margin-top: 30px;
+}
+
+.text-center {
+    text-align: center
+}
+
+.sub-navbar {
+    height: 50px;
+    line-height: 50px;
+    position: relative;
+    width: 100%;
+    text-align: right;
+    padding-right: 20px;
+    transition: 600ms ease position;
+    background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%);
+    .subtitle {
+        font-size: 20px;
+        color: #fff;
+    }
+    &.draft {
+        background: #d0d0d0;
+    }
+    &.deleted {
+        background: #d0d0d0;
+    }
+}
+
+.link-type,
+.link-type:focus {
+    color: #337ab7;
+    cursor: pointer;
+    &:hover {
+        color: rgb(32, 160, 255);
+    }
+}
+
+.filter-container {
+    padding-bottom: 10px;
+    .filter-item {
+        display: inline-block;
+        vertical-align: middle;
+        margin-bottom: 10px;
+    }
+}
+
+//refine vue-multiselect plugin
+.multiselect {
+    line-height: 16px;
+}
+
+.multiselect--active {
+    z-index: 1000 !important;
+}
+
+.success {
+    color: #67C23A
+}
+
+.warning {
+    color: #E6A23C
+}
+
+.danger {
+    color: #F56C6C
+}
+
+.info {
+    color: #909399
+}

+ 167 - 0
.history/src/components/TimeMenu/index_20220614163555.vue

@@ -0,0 +1,167 @@
+<template>
+  <div class="right-sec">
+    <div class="right-menu">
+      <el-dropdown class="avatar-container" trigger="click">
+        <div class="avatar-wrapper">
+          <div><strong>{{nickName}}</strong></div>
+          <i class="el-icon-caret-bottom" />
+        </div>
+        <el-dropdown-menu slot="dropdown" class="user-dropdown" >
+          <!-- <router-link to="/">
+            <el-dropdown-item> 首页 </el-dropdown-item>
+          </router-link> -->
+          <el-dropdown-item divided>
+            <span style="display: block" @click="logout()">退出</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+    <div class="right-time date">{{ dateFormat(date) }}</div>
+  </div>
+</template>
+
+<script>
+// import { flexible } from "@/utils";
+
+export default {
+  name: "TimeMenu",
+  //   components: { sbjk, monitor, alarming, handleNumber, alarmStatic,Navbar },
+  data() {
+    return {
+      date: new Date(), //实时时间
+      nickName:''
+    };
+  },
+  methods: {
+    logout(){
+      localStorage.clear();
+      this.$store.dispatch('logout').then(() => {
+        this.$router.push('/login')
+      }).catch(err => {
+        this.$message.error(err); //登录失败提示错误
+      });
+    },
+    setZero(a) {
+      //设置小于10的数字在加0
+      return a < 10 ? "0" + a : a;
+    },
+    dateFormat: function (time) {
+      var date = new Date(time);
+      var year = date.getFullYear();
+      /* 在日期格式中,月份是从0开始的,因此要加0
+       * 使用三元表达式在小于10的前面加0,以达到格式统一  如 09:11:05
+       * */
+      var month =
+        date.getMonth() + 1 < 10
+          ? "0" + (date.getMonth() + 1)
+          : date.getMonth() + 1;
+      var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+      var hours =
+        date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+      var minutes =
+        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+      var seconds =
+        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+      // 拼接
+      return (
+        year +
+        "年" +
+        month +
+        "月" +
+        day +
+        "日 " +
+        hours +
+        ":" +
+        minutes +
+        ":" +
+        seconds
+      );
+    },
+  },
+  mounted() {
+    var _this = this;
+    this.timer = setInterval(() => {
+      _this.date = new Date(); // 修改日期数据
+    }, 1000);
+
+    let userInfo = window.localStorage.getItem('key');
+    this.username = userInfo
+  },
+  destroyed() {
+    if (this.timer) {
+      clearInterval(this.timer); // 在Vue实例销毁前,清除当前日期定时器
+    }
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.right-sec{
+    position:absolute;
+    right:0;
+    top:0;
+
+}
+.right-time {
+    float: right;
+    line-height: 50px;
+    margin-right: 50px;
+    font-size:14px
+  }
+ .right-menu {
+    float: right;
+    height: 100%;
+    line-height: 50px;
+
+    &:focus {
+      outline: none;
+    }
+
+    .right-menu-item {
+      display: inline-block;
+      padding: 0 8px;
+      height: 100%;
+      font-size: 18px;
+      color: #5a5e66;
+      vertical-align: text-bottom;
+
+      &.hover-effect {
+        cursor: pointer;
+        transition: background 0.3s;
+
+        &:hover {
+          background: rgba(0, 0, 0, 0.025);
+        }
+      }
+    }
+
+    .avatar-container {
+      margin-right: 30px;
+      display: block;
+
+      .avatar-wrapper {
+        // margin-top: 5px;
+        position: relative;
+
+        .user-avatar {
+          cursor: pointer;
+          width: 40px;
+          height: 40px;
+          border-radius: 10px;
+        }
+
+        .el-icon-caret-bottom {
+          cursor: pointer;
+          position: absolute;
+          right: -20px;
+          top: 20px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>
+
+<style lang="scss">
+</style>

+ 167 - 0
.history/src/components/TimeMenu/index_20220614163600.vue

@@ -0,0 +1,167 @@
+<template>
+  <div class="right-sec">
+    <div class="right-menu">
+      <el-dropdown class="avatar-container" trigger="click">
+        <div class="avatar-wrapper">
+          <div><strong>{{nickName}}</strong></div>
+          <i class="el-icon-caret-bottom" />
+        </div>
+        <el-dropdown-menu slot="dropdown" class="user-dropdown" >
+          <!-- <router-link to="/">
+            <el-dropdown-item> 首页 </el-dropdown-item>
+          </router-link> -->
+          <el-dropdown-item divided>
+            <span style="display: block" @click="logout()">退出</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+    <div class="right-time date">{{ dateFormat(date) }}</div>
+  </div>
+</template>
+
+<script>
+// import { flexible } from "@/utils";
+
+export default {
+  name: "TimeMenu",
+  //   components: { sbjk, monitor, alarming, handleNumber, alarmStatic,Navbar },
+  data() {
+    return {
+      date: new Date(), //实时时间
+      nickName:''
+    };
+  },
+  methods: {
+    logout(){
+      localStorage.clear();
+      this.$store.dispatch('logout').then(() => {
+        this.$router.push('/login')
+      }).catch(err => {
+        this.$message.error(err); //登录失败提示错误
+      });
+    },
+    setZero(a) {
+      //设置小于10的数字在加0
+      return a < 10 ? "0" + a : a;
+    },
+    dateFormat: function (time) {
+      var date = new Date(time);
+      var year = date.getFullYear();
+      /* 在日期格式中,月份是从0开始的,因此要加0
+       * 使用三元表达式在小于10的前面加0,以达到格式统一  如 09:11:05
+       * */
+      var month =
+        date.getMonth() + 1 < 10
+          ? "0" + (date.getMonth() + 1)
+          : date.getMonth() + 1;
+      var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+      var hours =
+        date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+      var minutes =
+        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+      var seconds =
+        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+      // 拼接
+      return (
+        year +
+        "年" +
+        month +
+        "月" +
+        day +
+        "日 " +
+        hours +
+        ":" +
+        minutes +
+        ":" +
+        seconds
+      );
+    },
+  },
+  mounted() {
+    var _this = this;
+    this.timer = setInterval(() => {
+      _this.date = new Date(); // 修改日期数据
+    }, 1000);
+
+    let userInfo = window.localStorage.getItem('key');
+    this.username = userInfo
+  },
+  destroyed() {
+    if (this.timer) {
+      clearInterval(this.timer); // 在Vue实例销毁前,清除当前日期定时器
+    }
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.right-sec{
+    position:absolute;
+    right:0;
+    top:0;
+
+}
+.right-time {
+    float: right;
+    line-height: 50px;
+    margin-right: 50px;
+    font-size:14px
+  }
+ .right-menu {
+    float: right;
+    height: 100%;
+    line-height: 50px;
+
+    &:focus {
+      outline: none;
+    }
+
+    .right-menu-item {
+      display: inline-block;
+      padding: 0 8px;
+      height: 100%;
+      font-size: 18px;
+      color: #5a5e66;
+      vertical-align: text-bottom;
+
+      &.hover-effect {
+        cursor: pointer;
+        transition: background 0.3s;
+
+        &:hover {
+          background: rgba(0, 0, 0, 0.025);
+        }
+      }
+    }
+
+    .avatar-container {
+      margin-right: 30px;
+      display: block;
+
+      .avatar-wrapper {
+        // margin-top: 5px;
+        position: relative;
+
+        .user-avatar {
+          cursor: pointer;
+          width: 40px;
+          height: 40px;
+          border-radius: 10px;
+        }
+
+        .el-icon-caret-bottom {
+          cursor: pointer;
+          position: absolute;
+          right: -20px;
+          top: 20px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>
+
+<style lang="scss">
+</style>

+ 167 - 0
.history/src/components/TimeMenu/index_20220614163605.vue

@@ -0,0 +1,167 @@
+<template>
+  <div class="right-sec">
+    <div class="right-menu">
+      <el-dropdown class="avatar-container" trigger="click">
+        <div class="avatar-wrapper">
+          <div><strong>{{nickName}}</strong></div>
+          <i class="el-icon-caret-bottom" />
+        </div>
+        <el-dropdown-menu slot="dropdown" class="user-dropdown" >
+          <!-- <router-link to="/">
+            <el-dropdown-item> 首页 </el-dropdown-item>
+          </router-link> -->
+          <el-dropdown-item divided>
+            <span style="display: block" @click="logout()">退出</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+    <div class="right-time date">{{ dateFormat(date) }}</div>
+  </div>
+</template>
+
+<script>
+// import { flexible } from "@/utils";
+
+export default {
+  name: "TimeMenu",
+  //   components: { sbjk, monitor, alarming, handleNumber, alarmStatic,Navbar },
+  data() {
+    return {
+      date: new Date(), //实时时间
+      nickName:''
+    };
+  },
+  methods: {
+    logout(){
+      localStorage.clear();
+      this.$store.dispatch('logout').then(() => {
+        this.$router.push('/login')
+      }).catch(err => {
+        this.$message.error(err); //登录失败提示错误
+      });
+    },
+    setZero(a) {
+      //设置小于10的数字在加0
+      return a < 10 ? "0" + a : a;
+    },
+    dateFormat: function (time) {
+      var date = new Date(time);
+      var year = date.getFullYear();
+      /* 在日期格式中,月份是从0开始的,因此要加0
+       * 使用三元表达式在小于10的前面加0,以达到格式统一  如 09:11:05
+       * */
+      var month =
+        date.getMonth() + 1 < 10
+          ? "0" + (date.getMonth() + 1)
+          : date.getMonth() + 1;
+      var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+      var hours =
+        date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+      var minutes =
+        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+      var seconds =
+        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+      // 拼接
+      return (
+        year +
+        "年" +
+        month +
+        "月" +
+        day +
+        "日 " +
+        hours +
+        ":" +
+        minutes +
+        ":" +
+        seconds
+      );
+    },
+  },
+  mounted() {
+    var _this = this;
+    this.timer = setInterval(() => {
+      _this.date = new Date(); // 修改日期数据
+    }, 1000);
+
+    let userInfo = window.localStorage.getItem('key');
+    this.username = userInfo
+  },
+  destroyed() {
+    if (this.timer) {
+      clearInterval(this.timer); // 在Vue实例销毁前,清除当前日期定时器
+    }
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.right-sec{
+    position:absolute;
+    right:0;
+    top:0;
+
+}
+.right-time {
+    float: right;
+    line-height: 50px;
+    margin-right: 50px;
+    font-size:14px
+  }
+ .right-menu {
+    float: right;
+    height: 100%;
+    line-height: 50px;
+
+    &:focus {
+      outline: none;
+    }
+
+    .right-menu-item {
+      display: inline-block;
+      padding: 0 8px;
+      height: 100%;
+      font-size: 18px;
+      color: #5a5e66;
+      vertical-align: text-bottom;
+
+      &.hover-effect {
+        cursor: pointer;
+        transition: background 0.3s;
+
+        &:hover {
+          background: rgba(0, 0, 0, 0.025);
+        }
+      }
+    }
+
+    .avatar-container {
+      margin-right: 30px;
+      display: block;
+
+      .avatar-wrapper {
+        // margin-top: 5px;
+        position: relative;
+
+        .user-avatar {
+          cursor: pointer;
+          width: 40px;
+          height: 40px;
+          border-radius: 10px;
+        }
+
+        .el-icon-caret-bottom {
+          cursor: pointer;
+          position: absolute;
+          right: -20px;
+          top: 20px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>
+
+<style lang="scss">
+</style>

+ 167 - 0
.history/src/components/TimeMenu/index_20220614163649.vue

@@ -0,0 +1,167 @@
+<template>
+  <div class="right-sec">
+    <div class="right-menu">
+      <el-dropdown class="avatar-container" trigger="click">
+        <div class="avatar-wrapper">
+          <div><strong>{{$store.state.user.nickName}}</strong></div>
+          <i class="el-icon-caret-bottom" />
+        </div>
+        <el-dropdown-menu slot="dropdown" class="user-dropdown" >
+          <!-- <router-link to="/">
+            <el-dropdown-item> 首页 </el-dropdown-item>
+          </router-link> -->
+          <el-dropdown-item divided>
+            <span style="display: block" @click="logout()">退出</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+    <div class="right-time date">{{ dateFormat(date) }}</div>
+  </div>
+</template>
+
+<script>
+// import { flexible } from "@/utils";
+
+export default {
+  name: "TimeMenu",
+  //   components: { sbjk, monitor, alarming, handleNumber, alarmStatic,Navbar },
+  data() {
+    return {
+      date: new Date(), //实时时间
+      nickName:''
+    };
+  },
+  methods: {
+    logout(){
+      localStorage.clear();
+      this.$store.dispatch('logout').then(() => {
+        this.$router.push('/login')
+      }).catch(err => {
+        this.$message.error(err); //登录失败提示错误
+      });
+    },
+    setZero(a) {
+      //设置小于10的数字在加0
+      return a < 10 ? "0" + a : a;
+    },
+    dateFormat: function (time) {
+      var date = new Date(time);
+      var year = date.getFullYear();
+      /* 在日期格式中,月份是从0开始的,因此要加0
+       * 使用三元表达式在小于10的前面加0,以达到格式统一  如 09:11:05
+       * */
+      var month =
+        date.getMonth() + 1 < 10
+          ? "0" + (date.getMonth() + 1)
+          : date.getMonth() + 1;
+      var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+      var hours =
+        date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+      var minutes =
+        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+      var seconds =
+        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+      // 拼接
+      return (
+        year +
+        "年" +
+        month +
+        "月" +
+        day +
+        "日 " +
+        hours +
+        ":" +
+        minutes +
+        ":" +
+        seconds
+      );
+    },
+  },
+  mounted() {
+    var _this = this;
+    this.timer = setInterval(() => {
+      _this.date = new Date(); // 修改日期数据
+    }, 1000);
+
+    let userInfo = window.localStorage.getItem('key');
+    this.username = userInfo
+  },
+  destroyed() {
+    if (this.timer) {
+      clearInterval(this.timer); // 在Vue实例销毁前,清除当前日期定时器
+    }
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.right-sec{
+    position:absolute;
+    right:0;
+    top:0;
+
+}
+.right-time {
+    float: right;
+    line-height: 50px;
+    margin-right: 50px;
+    font-size:14px
+  }
+ .right-menu {
+    float: right;
+    height: 100%;
+    line-height: 50px;
+
+    &:focus {
+      outline: none;
+    }
+
+    .right-menu-item {
+      display: inline-block;
+      padding: 0 8px;
+      height: 100%;
+      font-size: 18px;
+      color: #5a5e66;
+      vertical-align: text-bottom;
+
+      &.hover-effect {
+        cursor: pointer;
+        transition: background 0.3s;
+
+        &:hover {
+          background: rgba(0, 0, 0, 0.025);
+        }
+      }
+    }
+
+    .avatar-container {
+      margin-right: 30px;
+      display: block;
+
+      .avatar-wrapper {
+        // margin-top: 5px;
+        position: relative;
+
+        .user-avatar {
+          cursor: pointer;
+          width: 40px;
+          height: 40px;
+          border-radius: 10px;
+        }
+
+        .el-icon-caret-bottom {
+          cursor: pointer;
+          position: absolute;
+          right: -20px;
+          top: 20px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>
+
+<style lang="scss">
+</style>

+ 166 - 0
.history/src/components/TimeMenu/index_20220614163853.vue

@@ -0,0 +1,166 @@
+<template>
+  <div class="right-sec">
+    <div class="right-menu">
+      <el-dropdown class="avatar-container" trigger="click">
+        <div class="avatar-wrapper">
+          <div><strong>{{nickName}}</strong></div>
+          <i class="el-icon-caret-bottom" />
+        </div>
+        <el-dropdown-menu slot="dropdown" class="user-dropdown" >
+          <!-- <router-link to="/">
+            <el-dropdown-item> 首页 </el-dropdown-item>
+          </router-link> -->
+          <el-dropdown-item divided>
+            <span style="display: block" @click="logout()">退出</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+    <div class="right-time date">{{ dateFormat(date) }}</div>
+  </div>
+</template>
+
+<script>
+// import { flexible } from "@/utils";
+import store from '../store';
+export default {
+  name: "TimeMenu",
+  //   components: { sbjk, monitor, alarming, handleNumber, alarmStatic,Navbar },
+  data() {
+    return {
+      date: new Date(), //实时时间
+      nickName:''
+    };
+  },
+  methods: {
+    logout(){
+      localStorage.clear();
+      this.$store.dispatch('logout').then(() => {
+        this.$router.push('/login')
+      }).catch(err => {
+        this.$message.error(err); //登录失败提示错误
+      });
+    },
+    setZero(a) {
+      //设置小于10的数字在加0
+      return a < 10 ? "0" + a : a;
+    },
+    dateFormat: function (time) {
+      var date = new Date(time);
+      var year = date.getFullYear();
+      /* 在日期格式中,月份是从0开始的,因此要加0
+       * 使用三元表达式在小于10的前面加0,以达到格式统一  如 09:11:05
+       * */
+      var month =
+        date.getMonth() + 1 < 10
+          ? "0" + (date.getMonth() + 1)
+          : date.getMonth() + 1;
+      var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+      var hours =
+        date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+      var minutes =
+        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+      var seconds =
+        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+      // 拼接
+      return (
+        year +
+        "年" +
+        month +
+        "月" +
+        day +
+        "日 " +
+        hours +
+        ":" +
+        minutes +
+        ":" +
+        seconds
+      );
+    },
+  },
+  mounted() {
+    var _this = this;
+    this.timer = setInterval(() => {
+      _this.date = new Date(); // 修改日期数据
+    }, 1000);
+
+    this.nickName = store.nickName
+  },
+  destroyed() {
+    if (this.timer) {
+      clearInterval(this.timer); // 在Vue实例销毁前,清除当前日期定时器
+    }
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.right-sec{
+    position:absolute;
+    right:0;
+    top:0;
+
+}
+.right-time {
+    float: right;
+    line-height: 50px;
+    margin-right: 50px;
+    font-size:14px
+  }
+ .right-menu {
+    float: right;
+    height: 100%;
+    line-height: 50px;
+
+    &:focus {
+      outline: none;
+    }
+
+    .right-menu-item {
+      display: inline-block;
+      padding: 0 8px;
+      height: 100%;
+      font-size: 18px;
+      color: #5a5e66;
+      vertical-align: text-bottom;
+
+      &.hover-effect {
+        cursor: pointer;
+        transition: background 0.3s;
+
+        &:hover {
+          background: rgba(0, 0, 0, 0.025);
+        }
+      }
+    }
+
+    .avatar-container {
+      margin-right: 30px;
+      display: block;
+
+      .avatar-wrapper {
+        // margin-top: 5px;
+        position: relative;
+
+        .user-avatar {
+          cursor: pointer;
+          width: 40px;
+          height: 40px;
+          border-radius: 10px;
+        }
+
+        .el-icon-caret-bottom {
+          cursor: pointer;
+          position: absolute;
+          right: -20px;
+          top: 20px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>
+
+<style lang="scss">
+</style>

+ 165 - 0
.history/src/components/TimeMenu/index_20220614163928.vue

@@ -0,0 +1,165 @@
+<template>
+  <div class="right-sec">
+    <div class="right-menu">
+      <el-dropdown class="avatar-container" trigger="click">
+        <div class="avatar-wrapper">
+          <div><strong>{{nickName}}</strong></div>
+          <i class="el-icon-caret-bottom" />
+        </div>
+        <el-dropdown-menu slot="dropdown" class="user-dropdown" >
+          <!-- <router-link to="/">
+            <el-dropdown-item> 首页 </el-dropdown-item>
+          </router-link> -->
+          <el-dropdown-item divided>
+            <span style="display: block" @click="logout()">退出</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+    <div class="right-time date">{{ dateFormat(date) }}</div>
+  </div>
+</template>
+
+<script>
+// import { flexible } from "@/utils";
+export default {
+  name: "TimeMenu",
+  //   components: { sbjk, monitor, alarming, handleNumber, alarmStatic,Navbar },
+  data() {
+    return {
+      date: new Date(), //实时时间
+      nickName:''
+    };
+  },
+  methods: {
+    logout(){
+      localStorage.clear();
+      this.$store.dispatch('logout').then(() => {
+        this.$router.push('/login')
+      }).catch(err => {
+        this.$message.error(err); //登录失败提示错误
+      });
+    },
+    setZero(a) {
+      //设置小于10的数字在加0
+      return a < 10 ? "0" + a : a;
+    },
+    dateFormat: function (time) {
+      var date = new Date(time);
+      var year = date.getFullYear();
+      /* 在日期格式中,月份是从0开始的,因此要加0
+       * 使用三元表达式在小于10的前面加0,以达到格式统一  如 09:11:05
+       * */
+      var month =
+        date.getMonth() + 1 < 10
+          ? "0" + (date.getMonth() + 1)
+          : date.getMonth() + 1;
+      var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+      var hours =
+        date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+      var minutes =
+        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+      var seconds =
+        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+      // 拼接
+      return (
+        year +
+        "年" +
+        month +
+        "月" +
+        day +
+        "日 " +
+        hours +
+        ":" +
+        minutes +
+        ":" +
+        seconds
+      );
+    },
+  },
+  mounted() {
+    var _this = this;
+    this.timer = setInterval(() => {
+      _this.date = new Date(); // 修改日期数据
+    }, 1000);
+
+    this.nickName = $store.nickName
+  },
+  destroyed() {
+    if (this.timer) {
+      clearInterval(this.timer); // 在Vue实例销毁前,清除当前日期定时器
+    }
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.right-sec{
+    position:absolute;
+    right:0;
+    top:0;
+
+}
+.right-time {
+    float: right;
+    line-height: 50px;
+    margin-right: 50px;
+    font-size:14px
+  }
+ .right-menu {
+    float: right;
+    height: 100%;
+    line-height: 50px;
+
+    &:focus {
+      outline: none;
+    }
+
+    .right-menu-item {
+      display: inline-block;
+      padding: 0 8px;
+      height: 100%;
+      font-size: 18px;
+      color: #5a5e66;
+      vertical-align: text-bottom;
+
+      &.hover-effect {
+        cursor: pointer;
+        transition: background 0.3s;
+
+        &:hover {
+          background: rgba(0, 0, 0, 0.025);
+        }
+      }
+    }
+
+    .avatar-container {
+      margin-right: 30px;
+      display: block;
+
+      .avatar-wrapper {
+        // margin-top: 5px;
+        position: relative;
+
+        .user-avatar {
+          cursor: pointer;
+          width: 40px;
+          height: 40px;
+          border-radius: 10px;
+        }
+
+        .el-icon-caret-bottom {
+          cursor: pointer;
+          position: absolute;
+          right: -20px;
+          top: 20px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>
+
+<style lang="scss">
+</style>

+ 165 - 0
.history/src/components/TimeMenu/index_20220614163930.vue

@@ -0,0 +1,165 @@
+<template>
+  <div class="right-sec">
+    <div class="right-menu">
+      <el-dropdown class="avatar-container" trigger="click">
+        <div class="avatar-wrapper">
+          <div><strong>{{nickName}}</strong></div>
+          <i class="el-icon-caret-bottom" />
+        </div>
+        <el-dropdown-menu slot="dropdown" class="user-dropdown" >
+          <!-- <router-link to="/">
+            <el-dropdown-item> 首页 </el-dropdown-item>
+          </router-link> -->
+          <el-dropdown-item divided>
+            <span style="display: block" @click="logout()">退出</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+    <div class="right-time date">{{ dateFormat(date) }}</div>
+  </div>
+</template>
+
+<script>
+// import { flexible } from "@/utils";
+export default {
+  name: "TimeMenu",
+  //   components: { sbjk, monitor, alarming, handleNumber, alarmStatic,Navbar },
+  data() {
+    return {
+      date: new Date(), //实时时间
+      nickName:''
+    };
+  },
+  methods: {
+    logout(){
+      localStorage.clear();
+      this.$store.dispatch('logout').then(() => {
+        this.$router.push('/login')
+      }).catch(err => {
+        this.$message.error(err); //登录失败提示错误
+      });
+    },
+    setZero(a) {
+      //设置小于10的数字在加0
+      return a < 10 ? "0" + a : a;
+    },
+    dateFormat: function (time) {
+      var date = new Date(time);
+      var year = date.getFullYear();
+      /* 在日期格式中,月份是从0开始的,因此要加0
+       * 使用三元表达式在小于10的前面加0,以达到格式统一  如 09:11:05
+       * */
+      var month =
+        date.getMonth() + 1 < 10
+          ? "0" + (date.getMonth() + 1)
+          : date.getMonth() + 1;
+      var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+      var hours =
+        date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+      var minutes =
+        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+      var seconds =
+        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+      // 拼接
+      return (
+        year +
+        "年" +
+        month +
+        "月" +
+        day +
+        "日 " +
+        hours +
+        ":" +
+        minutes +
+        ":" +
+        seconds
+      );
+    },
+  },
+  mounted() {
+    var _this = this;
+    this.timer = setInterval(() => {
+      _this.date = new Date(); // 修改日期数据
+    }, 1000);
+
+    this.nickName = $store.nickName
+  },
+  destroyed() {
+    if (this.timer) {
+      clearInterval(this.timer); // 在Vue实例销毁前,清除当前日期定时器
+    }
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.right-sec{
+    position:absolute;
+    right:0;
+    top:0;
+
+}
+.right-time {
+    float: right;
+    line-height: 50px;
+    margin-right: 50px;
+    font-size:14px
+  }
+ .right-menu {
+    float: right;
+    height: 100%;
+    line-height: 50px;
+
+    &:focus {
+      outline: none;
+    }
+
+    .right-menu-item {
+      display: inline-block;
+      padding: 0 8px;
+      height: 100%;
+      font-size: 18px;
+      color: #5a5e66;
+      vertical-align: text-bottom;
+
+      &.hover-effect {
+        cursor: pointer;
+        transition: background 0.3s;
+
+        &:hover {
+          background: rgba(0, 0, 0, 0.025);
+        }
+      }
+    }
+
+    .avatar-container {
+      margin-right: 30px;
+      display: block;
+
+      .avatar-wrapper {
+        // margin-top: 5px;
+        position: relative;
+
+        .user-avatar {
+          cursor: pointer;
+          width: 40px;
+          height: 40px;
+          border-radius: 10px;
+        }
+
+        .el-icon-caret-bottom {
+          cursor: pointer;
+          position: absolute;
+          right: -20px;
+          top: 20px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>
+
+<style lang="scss">
+</style>

+ 165 - 0
.history/src/components/TimeMenu/index_20220614163934.vue

@@ -0,0 +1,165 @@
+<template>
+  <div class="right-sec">
+    <div class="right-menu">
+      <el-dropdown class="avatar-container" trigger="click">
+        <div class="avatar-wrapper">
+          <div><strong>{{nickName}}</strong></div>
+          <i class="el-icon-caret-bottom" />
+        </div>
+        <el-dropdown-menu slot="dropdown" class="user-dropdown" >
+          <!-- <router-link to="/">
+            <el-dropdown-item> 首页 </el-dropdown-item>
+          </router-link> -->
+          <el-dropdown-item divided>
+            <span style="display: block" @click="logout()">退出</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+    <div class="right-time date">{{ dateFormat(date) }}</div>
+  </div>
+</template>
+
+<script>
+// import { flexible } from "@/utils";
+export default {
+  name: "TimeMenu",
+  //   components: { sbjk, monitor, alarming, handleNumber, alarmStatic,Navbar },
+  data() {
+    return {
+      date: new Date(), //实时时间
+      nickName:''
+    };
+  },
+  methods: {
+    logout(){
+      localStorage.clear();
+      this.$store.dispatch('logout').then(() => {
+        this.$router.push('/login')
+      }).catch(err => {
+        this.$message.error(err); //登录失败提示错误
+      });
+    },
+    setZero(a) {
+      //设置小于10的数字在加0
+      return a < 10 ? "0" + a : a;
+    },
+    dateFormat: function (time) {
+      var date = new Date(time);
+      var year = date.getFullYear();
+      /* 在日期格式中,月份是从0开始的,因此要加0
+       * 使用三元表达式在小于10的前面加0,以达到格式统一  如 09:11:05
+       * */
+      var month =
+        date.getMonth() + 1 < 10
+          ? "0" + (date.getMonth() + 1)
+          : date.getMonth() + 1;
+      var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+      var hours =
+        date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+      var minutes =
+        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+      var seconds =
+        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+      // 拼接
+      return (
+        year +
+        "年" +
+        month +
+        "月" +
+        day +
+        "日 " +
+        hours +
+        ":" +
+        minutes +
+        ":" +
+        seconds
+      );
+    },
+  },
+  mounted() {
+    var _this = this;
+    this.timer = setInterval(() => {
+      _this.date = new Date(); // 修改日期数据
+    }, 1000);
+
+    this.nickName = $store.nickName
+  },
+  destroyed() {
+    if (this.timer) {
+      clearInterval(this.timer); // 在Vue实例销毁前,清除当前日期定时器
+    }
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.right-sec{
+    position:absolute;
+    right:0;
+    top:0;
+
+}
+.right-time {
+    float: right;
+    line-height: 50px;
+    margin-right: 50px;
+    font-size:14px
+  }
+ .right-menu {
+    float: right;
+    height: 100%;
+    line-height: 50px;
+
+    &:focus {
+      outline: none;
+    }
+
+    .right-menu-item {
+      display: inline-block;
+      padding: 0 8px;
+      height: 100%;
+      font-size: 18px;
+      color: #5a5e66;
+      vertical-align: text-bottom;
+
+      &.hover-effect {
+        cursor: pointer;
+        transition: background 0.3s;
+
+        &:hover {
+          background: rgba(0, 0, 0, 0.025);
+        }
+      }
+    }
+
+    .avatar-container {
+      margin-right: 30px;
+      display: block;
+
+      .avatar-wrapper {
+        // margin-top: 5px;
+        position: relative;
+
+        .user-avatar {
+          cursor: pointer;
+          width: 40px;
+          height: 40px;
+          border-radius: 10px;
+        }
+
+        .el-icon-caret-bottom {
+          cursor: pointer;
+          position: absolute;
+          right: -20px;
+          top: 20px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>
+
+<style lang="scss">
+</style>

+ 165 - 0
.history/src/components/TimeMenu/index_20220614164123.vue

@@ -0,0 +1,165 @@
+<template>
+  <div class="right-sec">
+    <div class="right-menu">
+      <el-dropdown class="avatar-container" trigger="click">
+        <div class="avatar-wrapper">
+          <div><strong>{{nickName}}</strong></div>
+          <i class="el-icon-caret-bottom" />
+        </div>
+        <el-dropdown-menu slot="dropdown" class="user-dropdown" >
+          <!-- <router-link to="/">
+            <el-dropdown-item> 首页 </el-dropdown-item>
+          </router-link> -->
+          <el-dropdown-item divided>
+            <span style="display: block" @click="logout()">退出</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+    <div class="right-time date">{{ dateFormat(date) }}</div>
+  </div>
+</template>
+
+<script>
+// import { flexible } from "@/utils";
+export default {
+  name: "TimeMenu",
+  //   components: { sbjk, monitor, alarming, handleNumber, alarmStatic,Navbar },
+  data() {
+    return {
+      date: new Date(), //实时时间
+      nickName:''
+    };
+  },
+  methods: {
+    logout(){
+      localStorage.clear();
+      this.$store.dispatch('logout').then(() => {
+        this.$router.push('/login')
+      }).catch(err => {
+        this.$message.error(err); //登录失败提示错误
+      });
+    },
+    setZero(a) {
+      //设置小于10的数字在加0
+      return a < 10 ? "0" + a : a;
+    },
+    dateFormat: function (time) {
+      var date = new Date(time);
+      var year = date.getFullYear();
+      /* 在日期格式中,月份是从0开始的,因此要加0
+       * 使用三元表达式在小于10的前面加0,以达到格式统一  如 09:11:05
+       * */
+      var month =
+        date.getMonth() + 1 < 10
+          ? "0" + (date.getMonth() + 1)
+          : date.getMonth() + 1;
+      var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+      var hours =
+        date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+      var minutes =
+        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+      var seconds =
+        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+      // 拼接
+      return (
+        year +
+        "年" +
+        month +
+        "月" +
+        day +
+        "日 " +
+        hours +
+        ":" +
+        minutes +
+        ":" +
+        seconds
+      );
+    },
+  },
+  mounted() {
+    var _this = this;
+    this.timer = setInterval(() => {
+      _this.date = new Date(); // 修改日期数据
+    }, 1000);
+
+    this.nickName = this.$store.state.nickName
+  },
+  destroyed() {
+    if (this.timer) {
+      clearInterval(this.timer); // 在Vue实例销毁前,清除当前日期定时器
+    }
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.right-sec{
+    position:absolute;
+    right:0;
+    top:0;
+
+}
+.right-time {
+    float: right;
+    line-height: 50px;
+    margin-right: 50px;
+    font-size:14px
+  }
+ .right-menu {
+    float: right;
+    height: 100%;
+    line-height: 50px;
+
+    &:focus {
+      outline: none;
+    }
+
+    .right-menu-item {
+      display: inline-block;
+      padding: 0 8px;
+      height: 100%;
+      font-size: 18px;
+      color: #5a5e66;
+      vertical-align: text-bottom;
+
+      &.hover-effect {
+        cursor: pointer;
+        transition: background 0.3s;
+
+        &:hover {
+          background: rgba(0, 0, 0, 0.025);
+        }
+      }
+    }
+
+    .avatar-container {
+      margin-right: 30px;
+      display: block;
+
+      .avatar-wrapper {
+        // margin-top: 5px;
+        position: relative;
+
+        .user-avatar {
+          cursor: pointer;
+          width: 40px;
+          height: 40px;
+          border-radius: 10px;
+        }
+
+        .el-icon-caret-bottom {
+          cursor: pointer;
+          position: absolute;
+          right: -20px;
+          top: 20px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>
+
+<style lang="scss">
+</style>

+ 165 - 0
.history/src/components/TimeMenu/index_20220614164145.vue

@@ -0,0 +1,165 @@
+<template>
+  <div class="right-sec">
+    <div class="right-menu">
+      <el-dropdown class="avatar-container" trigger="click">
+        <div class="avatar-wrapper">
+          <div><strong>{{nickName}}</strong></div>
+          <i class="el-icon-caret-bottom" />
+        </div>
+        <el-dropdown-menu slot="dropdown" class="user-dropdown" >
+          <!-- <router-link to="/">
+            <el-dropdown-item> 首页 </el-dropdown-item>
+          </router-link> -->
+          <el-dropdown-item divided>
+            <span style="display: block" @click="logout()">退出</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+    <div class="right-time date">{{ dateFormat(date) }}</div>
+  </div>
+</template>
+
+<script>
+// import { flexible } from "@/utils";
+export default {
+  name: "TimeMenu",
+  //   components: { sbjk, monitor, alarming, handleNumber, alarmStatic,Navbar },
+  data() {
+    return {
+      date: new Date(), //实时时间
+      nickName:''
+    };
+  },
+  methods: {
+    logout(){
+      localStorage.clear();
+      this.$store.dispatch('logout').then(() => {
+        this.$router.push('/login')
+      }).catch(err => {
+        this.$message.error(err); //登录失败提示错误
+      });
+    },
+    setZero(a) {
+      //设置小于10的数字在加0
+      return a < 10 ? "0" + a : a;
+    },
+    dateFormat: function (time) {
+      var date = new Date(time);
+      var year = date.getFullYear();
+      /* 在日期格式中,月份是从0开始的,因此要加0
+       * 使用三元表达式在小于10的前面加0,以达到格式统一  如 09:11:05
+       * */
+      var month =
+        date.getMonth() + 1 < 10
+          ? "0" + (date.getMonth() + 1)
+          : date.getMonth() + 1;
+      var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+      var hours =
+        date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+      var minutes =
+        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+      var seconds =
+        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+      // 拼接
+      return (
+        year +
+        "年" +
+        month +
+        "月" +
+        day +
+        "日 " +
+        hours +
+        ":" +
+        minutes +
+        ":" +
+        seconds
+      );
+    },
+  },
+  mounted() {
+    var _this = this;
+    this.timer = setInterval(() => {
+      _this.date = new Date(); // 修改日期数据
+    }, 1000);
+    console.log(this.$store)
+    this.nickName = this.$store.state.nickName
+  },
+  destroyed() {
+    if (this.timer) {
+      clearInterval(this.timer); // 在Vue实例销毁前,清除当前日期定时器
+    }
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.right-sec{
+    position:absolute;
+    right:0;
+    top:0;
+
+}
+.right-time {
+    float: right;
+    line-height: 50px;
+    margin-right: 50px;
+    font-size:14px
+  }
+ .right-menu {
+    float: right;
+    height: 100%;
+    line-height: 50px;
+
+    &:focus {
+      outline: none;
+    }
+
+    .right-menu-item {
+      display: inline-block;
+      padding: 0 8px;
+      height: 100%;
+      font-size: 18px;
+      color: #5a5e66;
+      vertical-align: text-bottom;
+
+      &.hover-effect {
+        cursor: pointer;
+        transition: background 0.3s;
+
+        &:hover {
+          background: rgba(0, 0, 0, 0.025);
+        }
+      }
+    }
+
+    .avatar-container {
+      margin-right: 30px;
+      display: block;
+
+      .avatar-wrapper {
+        // margin-top: 5px;
+        position: relative;
+
+        .user-avatar {
+          cursor: pointer;
+          width: 40px;
+          height: 40px;
+          border-radius: 10px;
+        }
+
+        .el-icon-caret-bottom {
+          cursor: pointer;
+          position: absolute;
+          right: -20px;
+          top: 20px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>
+
+<style lang="scss">
+</style>

+ 165 - 0
.history/src/components/TimeMenu/index_20220614164322.vue

@@ -0,0 +1,165 @@
+<template>
+  <div class="right-sec">
+    <div class="right-menu">
+      <el-dropdown class="avatar-container" trigger="click">
+        <div class="avatar-wrapper">
+          <div><strong>{{nickName}}</strong></div>
+          <i class="el-icon-caret-bottom" />
+        </div>
+        <el-dropdown-menu slot="dropdown" class="user-dropdown" >
+          <!-- <router-link to="/">
+            <el-dropdown-item> 首页 </el-dropdown-item>
+          </router-link> -->
+          <el-dropdown-item divided>
+            <span style="display: block" @click="logout()">退出</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+    <div class="right-time date">{{ dateFormat(date) }}</div>
+  </div>
+</template>
+
+<script>
+// import { flexible } from "@/utils";
+export default {
+  name: "TimeMenu",
+  //   components: { sbjk, monitor, alarming, handleNumber, alarmStatic,Navbar },
+  data() {
+    return {
+      date: new Date(), //实时时间
+      nickName:''
+    };
+  },
+  methods: {
+    logout(){
+      localStorage.clear();
+      this.$store.dispatch('logout').then(() => {
+        this.$router.push('/login')
+      }).catch(err => {
+        this.$message.error(err); //登录失败提示错误
+      });
+    },
+    setZero(a) {
+      //设置小于10的数字在加0
+      return a < 10 ? "0" + a : a;
+    },
+    dateFormat: function (time) {
+      var date = new Date(time);
+      var year = date.getFullYear();
+      /* 在日期格式中,月份是从0开始的,因此要加0
+       * 使用三元表达式在小于10的前面加0,以达到格式统一  如 09:11:05
+       * */
+      var month =
+        date.getMonth() + 1 < 10
+          ? "0" + (date.getMonth() + 1)
+          : date.getMonth() + 1;
+      var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+      var hours =
+        date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+      var minutes =
+        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+      var seconds =
+        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+      // 拼接
+      return (
+        year +
+        "年" +
+        month +
+        "月" +
+        day +
+        "日 " +
+        hours +
+        ":" +
+        minutes +
+        ":" +
+        seconds
+      );
+    },
+  },
+  mounted() {
+    var _this = this;
+    this.timer = setInterval(() => {
+      _this.date = new Date(); // 修改日期数据
+    }, 1000);
+    console.log(this.$store.state)
+    this.nickName = this.$store.state.nickName
+  },
+  destroyed() {
+    if (this.timer) {
+      clearInterval(this.timer); // 在Vue实例销毁前,清除当前日期定时器
+    }
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.right-sec{
+    position:absolute;
+    right:0;
+    top:0;
+
+}
+.right-time {
+    float: right;
+    line-height: 50px;
+    margin-right: 50px;
+    font-size:14px
+  }
+ .right-menu {
+    float: right;
+    height: 100%;
+    line-height: 50px;
+
+    &:focus {
+      outline: none;
+    }
+
+    .right-menu-item {
+      display: inline-block;
+      padding: 0 8px;
+      height: 100%;
+      font-size: 18px;
+      color: #5a5e66;
+      vertical-align: text-bottom;
+
+      &.hover-effect {
+        cursor: pointer;
+        transition: background 0.3s;
+
+        &:hover {
+          background: rgba(0, 0, 0, 0.025);
+        }
+      }
+    }
+
+    .avatar-container {
+      margin-right: 30px;
+      display: block;
+
+      .avatar-wrapper {
+        // margin-top: 5px;
+        position: relative;
+
+        .user-avatar {
+          cursor: pointer;
+          width: 40px;
+          height: 40px;
+          border-radius: 10px;
+        }
+
+        .el-icon-caret-bottom {
+          cursor: pointer;
+          position: absolute;
+          right: -20px;
+          top: 20px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>
+
+<style lang="scss">
+</style>

+ 164 - 0
.history/src/components/TimeMenu/index_20220614165206.vue

@@ -0,0 +1,164 @@
+<template>
+  <div class="right-sec">
+    <div class="right-menu">
+      <el-dropdown class="avatar-container" trigger="click">
+        <div class="avatar-wrapper">
+          <div><strong>{{nickName}}</strong></div>
+          <i class="el-icon-caret-bottom" />
+        </div>
+        <el-dropdown-menu slot="dropdown" class="user-dropdown" >
+          <!-- <router-link to="/">
+            <el-dropdown-item> 首页 </el-dropdown-item>
+          </router-link> -->
+          <el-dropdown-item divided>
+            <span style="display: block" @click="logout()">退出</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+    <div class="right-time date">{{ dateFormat(date) }}</div>
+  </div>
+</template>
+
+<script>
+// import { flexible } from "@/utils";
+export default {
+  name: "TimeMenu",
+  //   components: { sbjk, monitor, alarming, handleNumber, alarmStatic,Navbar },
+  data() {
+    return {
+      date: new Date(), //实时时间
+      nickName:''
+    };
+  },
+  methods: {
+    logout(){
+      localStorage.clear();
+      this.$store.dispatch('logout').then(() => {
+        this.$router.push('/login')
+      }).catch(err => {
+        this.$message.error(err); //登录失败提示错误
+      });
+    },
+    setZero(a) {
+      //设置小于10的数字在加0
+      return a < 10 ? "0" + a : a;
+    },
+    dateFormat: function (time) {
+      var date = new Date(time);
+      var year = date.getFullYear();
+      /* 在日期格式中,月份是从0开始的,因此要加0
+       * 使用三元表达式在小于10的前面加0,以达到格式统一  如 09:11:05
+       * */
+      var month =
+        date.getMonth() + 1 < 10
+          ? "0" + (date.getMonth() + 1)
+          : date.getMonth() + 1;
+      var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+      var hours =
+        date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+      var minutes =
+        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+      var seconds =
+        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+      // 拼接
+      return (
+        year +
+        "年" +
+        month +
+        "月" +
+        day +
+        "日 " +
+        hours +
+        ":" +
+        minutes +
+        ":" +
+        seconds
+      );
+    },
+  },
+  mounted() {
+    var _this = this;
+    this.timer = setInterval(() => {
+      _this.date = new Date(); // 修改日期数据
+    }, 1000);
+    this.nickName = this.$store.state.nickName
+  },
+  destroyed() {
+    if (this.timer) {
+      clearInterval(this.timer); // 在Vue实例销毁前,清除当前日期定时器
+    }
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.right-sec{
+    position:absolute;
+    right:0;
+    top:0;
+
+}
+.right-time {
+    float: right;
+    line-height: 50px;
+    margin-right: 50px;
+    font-size:14px
+  }
+ .right-menu {
+    float: right;
+    height: 100%;
+    line-height: 50px;
+
+    &:focus {
+      outline: none;
+    }
+
+    .right-menu-item {
+      display: inline-block;
+      padding: 0 8px;
+      height: 100%;
+      font-size: 18px;
+      color: #5a5e66;
+      vertical-align: text-bottom;
+
+      &.hover-effect {
+        cursor: pointer;
+        transition: background 0.3s;
+
+        &:hover {
+          background: rgba(0, 0, 0, 0.025);
+        }
+      }
+    }
+
+    .avatar-container {
+      margin-right: 30px;
+      display: block;
+
+      .avatar-wrapper {
+        // margin-top: 5px;
+        position: relative;
+
+        .user-avatar {
+          cursor: pointer;
+          width: 40px;
+          height: 40px;
+          border-radius: 10px;
+        }
+
+        .el-icon-caret-bottom {
+          cursor: pointer;
+          position: absolute;
+          right: -20px;
+          top: 20px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>
+
+<style lang="scss">
+</style>

+ 164 - 0
.history/src/components/TimeMenu/index_20220614165423.vue

@@ -0,0 +1,164 @@
+<template>
+  <div class="right-sec">
+    <div class="right-menu">
+      <el-dropdown class="avatar-container" trigger="click">
+        <div class="avatar-wrapper">
+          <div><strong>{{nickName}}</strong></div>
+          <i class="el-icon-caret-bottom" />
+        </div>
+        <el-dropdown-menu slot="dropdown" class="user-dropdown" >
+          <!-- <router-link to="/">
+            <el-dropdown-item> 首页 </el-dropdown-item>
+          </router-link> -->
+          <!-- <el-dropdown-item divided>
+            <span style="display: block" @click="logout()">退出</span>
+          </el-dropdown-item> -->
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+    <div class="right-time date">{{ dateFormat(date) }}</div>
+  </div>
+</template>
+
+<script>
+// import { flexible } from "@/utils";
+export default {
+  name: "TimeMenu",
+  //   components: { sbjk, monitor, alarming, handleNumber, alarmStatic,Navbar },
+  data() {
+    return {
+      date: new Date(), //实时时间
+      nickName:''
+    };
+  },
+  methods: {
+    logout(){
+      localStorage.clear();
+      this.$store.dispatch('logout').then(() => {
+        this.$router.push('/login')
+      }).catch(err => {
+        this.$message.error(err); //登录失败提示错误
+      });
+    },
+    setZero(a) {
+      //设置小于10的数字在加0
+      return a < 10 ? "0" + a : a;
+    },
+    dateFormat: function (time) {
+      var date = new Date(time);
+      var year = date.getFullYear();
+      /* 在日期格式中,月份是从0开始的,因此要加0
+       * 使用三元表达式在小于10的前面加0,以达到格式统一  如 09:11:05
+       * */
+      var month =
+        date.getMonth() + 1 < 10
+          ? "0" + (date.getMonth() + 1)
+          : date.getMonth() + 1;
+      var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+      var hours =
+        date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+      var minutes =
+        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+      var seconds =
+        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+      // 拼接
+      return (
+        year +
+        "年" +
+        month +
+        "月" +
+        day +
+        "日 " +
+        hours +
+        ":" +
+        minutes +
+        ":" +
+        seconds
+      );
+    },
+  },
+  mounted() {
+    var _this = this;
+    this.timer = setInterval(() => {
+      _this.date = new Date(); // 修改日期数据
+    }, 1000);
+    this.nickName = this.$store.state.nickName
+  },
+  destroyed() {
+    if (this.timer) {
+      clearInterval(this.timer); // 在Vue实例销毁前,清除当前日期定时器
+    }
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.right-sec{
+    position:absolute;
+    right:0;
+    top:0;
+
+}
+.right-time {
+    float: right;
+    line-height: 50px;
+    margin-right: 50px;
+    font-size:14px
+  }
+ .right-menu {
+    float: right;
+    height: 100%;
+    line-height: 50px;
+
+    &:focus {
+      outline: none;
+    }
+
+    .right-menu-item {
+      display: inline-block;
+      padding: 0 8px;
+      height: 100%;
+      font-size: 18px;
+      color: #5a5e66;
+      vertical-align: text-bottom;
+
+      &.hover-effect {
+        cursor: pointer;
+        transition: background 0.3s;
+
+        &:hover {
+          background: rgba(0, 0, 0, 0.025);
+        }
+      }
+    }
+
+    .avatar-container {
+      margin-right: 30px;
+      display: block;
+
+      .avatar-wrapper {
+        // margin-top: 5px;
+        position: relative;
+
+        .user-avatar {
+          cursor: pointer;
+          width: 40px;
+          height: 40px;
+          border-radius: 10px;
+        }
+
+        .el-icon-caret-bottom {
+          cursor: pointer;
+          position: absolute;
+          right: -20px;
+          top: 20px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>
+
+<style lang="scss">
+</style>

+ 164 - 0
.history/src/components/TimeMenu/index_20220614165429.vue

@@ -0,0 +1,164 @@
+<template>
+  <div class="right-sec">
+    <div class="right-menu">
+      <el-dropdown class="avatar-container" trigger="click">
+        <div class="avatar-wrapper">
+          <div><strong>{{nickName}}</strong></div>
+          <i class="el-icon-caret-bottom" />
+        </div>
+        <el-dropdown-menu slot="dropdown" class="user-dropdown" >
+          <!-- <router-link to="/">
+            <el-dropdown-item> 首页 </el-dropdown-item>
+          </router-link> -->
+          <el-dropdown-item divided>
+            <span style="display: block" @click="logout()">退出</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+    <div class="right-time date">{{ dateFormat(date) }}</div>
+  </div>
+</template>
+
+<script>
+// import { flexible } from "@/utils";
+export default {
+  name: "TimeMenu",
+  //   components: { sbjk, monitor, alarming, handleNumber, alarmStatic,Navbar },
+  data() {
+    return {
+      date: new Date(), //实时时间
+      nickName:''
+    };
+  },
+  methods: {
+    logout(){
+      localStorage.clear();
+      this.$store.dispatch('logout').then(() => {
+        this.$router.push('/login')
+      }).catch(err => {
+        this.$message.error(err); //登录失败提示错误
+      });
+    },
+    setZero(a) {
+      //设置小于10的数字在加0
+      return a < 10 ? "0" + a : a;
+    },
+    dateFormat: function (time) {
+      var date = new Date(time);
+      var year = date.getFullYear();
+      /* 在日期格式中,月份是从0开始的,因此要加0
+       * 使用三元表达式在小于10的前面加0,以达到格式统一  如 09:11:05
+       * */
+      var month =
+        date.getMonth() + 1 < 10
+          ? "0" + (date.getMonth() + 1)
+          : date.getMonth() + 1;
+      var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+      var hours =
+        date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+      var minutes =
+        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+      var seconds =
+        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+      // 拼接
+      return (
+        year +
+        "年" +
+        month +
+        "月" +
+        day +
+        "日 " +
+        hours +
+        ":" +
+        minutes +
+        ":" +
+        seconds
+      );
+    },
+  },
+  mounted() {
+    var _this = this;
+    this.timer = setInterval(() => {
+      _this.date = new Date(); // 修改日期数据
+    }, 1000);
+    this.nickName = this.$store.state.nickName
+  },
+  destroyed() {
+    if (this.timer) {
+      clearInterval(this.timer); // 在Vue实例销毁前,清除当前日期定时器
+    }
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.right-sec{
+    position:absolute;
+    right:0;
+    top:0;
+
+}
+.right-time {
+    float: right;
+    line-height: 50px;
+    margin-right: 50px;
+    font-size:14px
+  }
+ .right-menu {
+    float: right;
+    height: 100%;
+    line-height: 50px;
+
+    &:focus {
+      outline: none;
+    }
+
+    .right-menu-item {
+      display: inline-block;
+      padding: 0 8px;
+      height: 100%;
+      font-size: 18px;
+      color: #5a5e66;
+      vertical-align: text-bottom;
+
+      &.hover-effect {
+        cursor: pointer;
+        transition: background 0.3s;
+
+        &:hover {
+          background: rgba(0, 0, 0, 0.025);
+        }
+      }
+    }
+
+    .avatar-container {
+      margin-right: 30px;
+      display: block;
+
+      .avatar-wrapper {
+        // margin-top: 5px;
+        position: relative;
+
+        .user-avatar {
+          cursor: pointer;
+          width: 40px;
+          height: 40px;
+          border-radius: 10px;
+        }
+
+        .el-icon-caret-bottom {
+          cursor: pointer;
+          position: absolute;
+          right: -20px;
+          top: 20px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>
+
+<style lang="scss">
+</style>

+ 165 - 0
.history/src/components/TimeMenu/index_20220614165501.vue

@@ -0,0 +1,165 @@
+<template>
+  <div class="right-sec">
+    <div class="right-menu">
+      <el-dropdown class="avatar-container" trigger="click">
+        <div class="avatar-wrapper">
+          <div><strong>{{nickName}}</strong></div>
+          <i class="el-icon-caret-bottom" />
+        </div>
+        <el-dropdown-menu slot="dropdown" class="user-dropdown" >
+          <!-- <router-link to="/">
+            <el-dropdown-item> 首页 </el-dropdown-item>
+          </router-link> -->
+          <el-dropdown-item divided>
+            <span style="display: block" @click="logout()">退出</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+    <div class="right-time date">{{ dateFormat(date) }}</div>
+  </div>
+</template>
+
+<script>
+// import { flexible } from "@/utils";
+export default {
+  name: "TimeMenu",
+  //   components: { sbjk, monitor, alarming, handleNumber, alarmStatic,Navbar },
+  data() {
+    return {
+      date: new Date(), //实时时间
+      nickName:''
+    };
+  },
+  methods: {
+    logout(){
+      localStorage.clear();
+      this.$store.dispatch('logout').then(() => {
+        this.$router.push('/login')
+      }).catch(err => {
+        this.$message.error(err); //登录失败提示错误
+      });
+    },
+    setZero(a) {
+      //设置小于10的数字在加0
+      return a < 10 ? "0" + a : a;
+    },
+    dateFormat: function (time) {
+      var date = new Date(time);
+      var year = date.getFullYear();
+      /* 在日期格式中,月份是从0开始的,因此要加0
+       * 使用三元表达式在小于10的前面加0,以达到格式统一  如 09:11:05
+       * */
+      var month =
+        date.getMonth() + 1 < 10
+          ? "0" + (date.getMonth() + 1)
+          : date.getMonth() + 1;
+      var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+      var hours =
+        date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+      var minutes =
+        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+      var seconds =
+        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+      // 拼接
+      return (
+        year +
+        "年" +
+        month +
+        "月" +
+        day +
+        "日 " +
+        hours +
+        ":" +
+        minutes +
+        ":" +
+        seconds
+      );
+    },
+  },
+  mounted() {
+    var _this = this;
+    this.timer = setInterval(() => {
+      _this.date = new Date(); // 修改日期数据
+    }, 1000);
+
+    this.nickName = this.$store.state.nickName
+  },
+  destroyed() {
+    if (this.timer) {
+      clearInterval(this.timer); // 在Vue实例销毁前,清除当前日期定时器
+    }
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.right-sec{
+    position:absolute;
+    right:0;
+    top:0;
+
+}
+.right-time {
+    float: right;
+    line-height: 50px;
+    margin-right: 50px;
+    font-size:14px
+  }
+ .right-menu {
+    float: right;
+    height: 100%;
+    line-height: 50px;
+
+    &:focus {
+      outline: none;
+    }
+
+    .right-menu-item {
+      display: inline-block;
+      padding: 0 8px;
+      height: 100%;
+      font-size: 18px;
+      color: #5a5e66;
+      vertical-align: text-bottom;
+
+      &.hover-effect {
+        cursor: pointer;
+        transition: background 0.3s;
+
+        &:hover {
+          background: rgba(0, 0, 0, 0.025);
+        }
+      }
+    }
+
+    .avatar-container {
+      margin-right: 30px;
+      display: block;
+
+      .avatar-wrapper {
+        // margin-top: 5px;
+        position: relative;
+
+        .user-avatar {
+          cursor: pointer;
+          width: 40px;
+          height: 40px;
+          border-radius: 10px;
+        }
+
+        .el-icon-caret-bottom {
+          cursor: pointer;
+          position: absolute;
+          right: -20px;
+          top: 20px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>
+
+<style lang="scss">
+</style>

+ 165 - 0
.history/src/components/TimeMenu/index_20220614165512.vue

@@ -0,0 +1,165 @@
+<template>
+  <div class="right-sec">
+    <div class="right-menu">
+      <el-dropdown class="avatar-container" trigger="click">
+        <div class="avatar-wrapper">
+          <!-- <div><strong>{{nickName}}</strong></div> -->
+          <i class="el-icon-caret-bottom" />
+        </div>
+        <el-dropdown-menu slot="dropdown" class="user-dropdown" >
+          <!-- <router-link to="/">
+            <el-dropdown-item> 首页 </el-dropdown-item>
+          </router-link> -->
+          <el-dropdown-item divided>
+            <span style="display: block" @click="logout()">退出</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+    <div class="right-time date">{{ dateFormat(date) }}</div>
+  </div>
+</template>
+
+<script>
+// import { flexible } from "@/utils";
+export default {
+  name: "TimeMenu",
+  //   components: { sbjk, monitor, alarming, handleNumber, alarmStatic,Navbar },
+  data() {
+    return {
+      date: new Date(), //实时时间
+      nickName:''
+    };
+  },
+  methods: {
+    logout(){
+      localStorage.clear();
+      this.$store.dispatch('logout').then(() => {
+        this.$router.push('/login')
+      }).catch(err => {
+        this.$message.error(err); //登录失败提示错误
+      });
+    },
+    setZero(a) {
+      //设置小于10的数字在加0
+      return a < 10 ? "0" + a : a;
+    },
+    dateFormat: function (time) {
+      var date = new Date(time);
+      var year = date.getFullYear();
+      /* 在日期格式中,月份是从0开始的,因此要加0
+       * 使用三元表达式在小于10的前面加0,以达到格式统一  如 09:11:05
+       * */
+      var month =
+        date.getMonth() + 1 < 10
+          ? "0" + (date.getMonth() + 1)
+          : date.getMonth() + 1;
+      var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+      var hours =
+        date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+      var minutes =
+        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+      var seconds =
+        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+      // 拼接
+      return (
+        year +
+        "年" +
+        month +
+        "月" +
+        day +
+        "日 " +
+        hours +
+        ":" +
+        minutes +
+        ":" +
+        seconds
+      );
+    },
+  },
+  mounted() {
+    var _this = this;
+    this.timer = setInterval(() => {
+      _this.date = new Date(); // 修改日期数据
+    }, 1000);
+
+    this.nickName = this.$store.state.nickName
+  },
+  destroyed() {
+    if (this.timer) {
+      clearInterval(this.timer); // 在Vue实例销毁前,清除当前日期定时器
+    }
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.right-sec{
+    position:absolute;
+    right:0;
+    top:0;
+
+}
+.right-time {
+    float: right;
+    line-height: 50px;
+    margin-right: 50px;
+    font-size:14px
+  }
+ .right-menu {
+    float: right;
+    height: 100%;
+    line-height: 50px;
+
+    &:focus {
+      outline: none;
+    }
+
+    .right-menu-item {
+      display: inline-block;
+      padding: 0 8px;
+      height: 100%;
+      font-size: 18px;
+      color: #5a5e66;
+      vertical-align: text-bottom;
+
+      &.hover-effect {
+        cursor: pointer;
+        transition: background 0.3s;
+
+        &:hover {
+          background: rgba(0, 0, 0, 0.025);
+        }
+      }
+    }
+
+    .avatar-container {
+      margin-right: 30px;
+      display: block;
+
+      .avatar-wrapper {
+        // margin-top: 5px;
+        position: relative;
+
+        .user-avatar {
+          cursor: pointer;
+          width: 40px;
+          height: 40px;
+          border-radius: 10px;
+        }
+
+        .el-icon-caret-bottom {
+          cursor: pointer;
+          position: absolute;
+          right: -20px;
+          top: 20px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>
+
+<style lang="scss">
+</style>

+ 165 - 0
.history/src/components/TimeMenu/index_20220614165519.vue

@@ -0,0 +1,165 @@
+<template>
+  <div class="right-sec">
+    <div class="right-menu">
+      <el-dropdown class="avatar-container" trigger="click">
+        <div class="avatar-wrapper">
+          <div><strong>{{nickName}}</strong></div>
+          <i class="el-icon-caret-bottom" />
+        </div>
+        <el-dropdown-menu slot="dropdown" class="user-dropdown" >
+          <!-- <router-link to="/">
+            <el-dropdown-item> 首页 </el-dropdown-item>
+          </router-link> -->
+          <el-dropdown-item divided>
+            <span style="display: block" @click="logout()">退出</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+    <div class="right-time date">{{ dateFormat(date) }}</div>
+  </div>
+</template>
+
+<script>
+// import { flexible } from "@/utils";
+export default {
+  name: "TimeMenu",
+  //   components: { sbjk, monitor, alarming, handleNumber, alarmStatic,Navbar },
+  data() {
+    return {
+      date: new Date(), //实时时间
+      nickName:''
+    };
+  },
+  methods: {
+    logout(){
+      localStorage.clear();
+      this.$store.dispatch('logout').then(() => {
+        this.$router.push('/login')
+      }).catch(err => {
+        this.$message.error(err); //登录失败提示错误
+      });
+    },
+    setZero(a) {
+      //设置小于10的数字在加0
+      return a < 10 ? "0" + a : a;
+    },
+    dateFormat: function (time) {
+      var date = new Date(time);
+      var year = date.getFullYear();
+      /* 在日期格式中,月份是从0开始的,因此要加0
+       * 使用三元表达式在小于10的前面加0,以达到格式统一  如 09:11:05
+       * */
+      var month =
+        date.getMonth() + 1 < 10
+          ? "0" + (date.getMonth() + 1)
+          : date.getMonth() + 1;
+      var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+      var hours =
+        date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+      var minutes =
+        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+      var seconds =
+        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+      // 拼接
+      return (
+        year +
+        "年" +
+        month +
+        "月" +
+        day +
+        "日 " +
+        hours +
+        ":" +
+        minutes +
+        ":" +
+        seconds
+      );
+    },
+  },
+  mounted() {
+    var _this = this;
+    this.timer = setInterval(() => {
+      _this.date = new Date(); // 修改日期数据
+    }, 1000);
+
+    this.nickName = this.$store.state.nickName
+  },
+  destroyed() {
+    if (this.timer) {
+      clearInterval(this.timer); // 在Vue实例销毁前,清除当前日期定时器
+    }
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.right-sec{
+    position:absolute;
+    right:0;
+    top:0;
+
+}
+.right-time {
+    float: right;
+    line-height: 50px;
+    margin-right: 50px;
+    font-size:14px
+  }
+ .right-menu {
+    float: right;
+    height: 100%;
+    line-height: 50px;
+
+    &:focus {
+      outline: none;
+    }
+
+    .right-menu-item {
+      display: inline-block;
+      padding: 0 8px;
+      height: 100%;
+      font-size: 18px;
+      color: #5a5e66;
+      vertical-align: text-bottom;
+
+      &.hover-effect {
+        cursor: pointer;
+        transition: background 0.3s;
+
+        &:hover {
+          background: rgba(0, 0, 0, 0.025);
+        }
+      }
+    }
+
+    .avatar-container {
+      margin-right: 30px;
+      display: block;
+
+      .avatar-wrapper {
+        // margin-top: 5px;
+        position: relative;
+
+        .user-avatar {
+          cursor: pointer;
+          width: 40px;
+          height: 40px;
+          border-radius: 10px;
+        }
+
+        .el-icon-caret-bottom {
+          cursor: pointer;
+          position: absolute;
+          right: -20px;
+          top: 20px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>
+
+<style lang="scss">
+</style>

+ 165 - 0
.history/src/components/TimeMenu/index_20220614165540.vue

@@ -0,0 +1,165 @@
+<template>
+  <div class="right-sec">
+    <div class="right-menu">
+      <el-dropdown class="avatar-container" trigger="click">
+        <div class="avatar-wrapper">
+          <div><strong>{{nickName}}</strong></div>
+          <i class="el-icon-caret-bottom" />
+        </div>
+        <el-dropdown-menu slot="dropdown" class="user-dropdown" >
+          <!-- <router-link to="/">
+            <el-dropdown-item> 首页 </el-dropdown-item>
+          </router-link> -->
+          <el-dropdown-item divided>
+            <span style="display: block" @click="logout()">退出</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+    <div class="right-time date">{{ dateFormat(date) }}</div>
+  </div>
+</template>
+
+<script>
+// import { flexible } from "@/utils";
+export default {
+  name: "TimeMenu",
+  //   components: { sbjk, monitor, alarming, handleNumber, alarmStatic,Navbar },
+  data() {
+    return {
+      date: new Date(), //实时时间
+      nickName:''
+    };
+  },
+  methods: {
+    logout(){
+      localStorage.clear();
+      this.$store.dispatch('logout').then(() => {
+        this.$router.push('/login')
+      }).catch(err => {
+        this.$message.error(err); //登录失败提示错误
+      });
+    },
+    setZero(a) {
+      //设置小于10的数字在加0
+      return a < 10 ? "0" + a : a;
+    },
+    dateFormat: function (time) {
+      var date = new Date(time);
+      var year = date.getFullYear();
+      /* 在日期格式中,月份是从0开始的,因此要加0
+       * 使用三元表达式在小于10的前面加0,以达到格式统一  如 09:11:05
+       * */
+      var month =
+        date.getMonth() + 1 < 10
+          ? "0" + (date.getMonth() + 1)
+          : date.getMonth() + 1;
+      var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+      var hours =
+        date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+      var minutes =
+        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+      var seconds =
+        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+      // 拼接
+      return (
+        year +
+        "年" +
+        month +
+        "月" +
+        day +
+        "日 " +
+        hours +
+        ":" +
+        minutes +
+        ":" +
+        seconds
+      );
+    },
+  },
+  mounted() {
+    var _this = this;
+    this.timer = setInterval(() => {
+      _this.date = new Date(); // 修改日期数据
+    }, 1000);
+
+    this.nickName = this.$store.state.nickName
+  },
+  destroyed() {
+    if (this.timer) {
+      clearInterval(this.timer); // 在Vue实例销毁前,清除当前日期定时器
+    }
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.right-sec{
+    position:absolute;
+    right:0;
+    top:0;
+
+}
+.right-time {
+    float: right;
+    line-height: 50px;
+    margin-right: 50px;
+    font-size:14px
+  }
+ .right-menu {
+    float: right;
+    height: 100%;
+    line-height: 50px;
+
+    &:focus {
+      outline: none;
+    }
+
+    .right-menu-item {
+      display: inline-block;
+      padding: 0 8px;
+      height: 100%;
+      font-size: 18px;
+      color: #5a5e66;
+      vertical-align: text-bottom;
+
+      &.hover-effect {
+        cursor: pointer;
+        transition: background 0.3s;
+
+        &:hover {
+          background: rgba(0, 0, 0, 0.025);
+        }
+      }
+    }
+
+    .avatar-container {
+      margin-right: 30px;
+      display: block;
+
+      .avatar-wrapper {
+        // margin-top: 5px;
+        position: relative;
+
+        .user-avatar {
+          cursor: pointer;
+          width: 40px;
+          height: 40px;
+          border-radius: 10px;
+        }
+
+        .el-icon-caret-bottom {
+          cursor: pointer;
+          position: absolute;
+          right: -20px;
+          top: 20px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>
+
+<style lang="scss">
+</style>

+ 166 - 0
.history/src/components/TimeMenu/index_20220614165749.vue

@@ -0,0 +1,166 @@
+<template>
+  <div class="right-sec">
+    <div class="right-menu">
+      <el-dropdown class="avatar-container" trigger="click">
+        <div class="avatar-wrapper">
+          <div><strong>{{nickName}}</strong></div>
+          <i class="el-icon-caret-bottom" />
+        </div>
+        <el-dropdown-menu slot="dropdown" class="user-dropdown" >
+          <!-- <router-link to="/">
+            <el-dropdown-item> 首页 </el-dropdown-item>
+          </router-link> -->
+          <el-dropdown-item divided>
+            <span style="display: block" @click="logout()">退出</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+    <div class="right-time date">{{ dateFormat(date) }}</div>
+  </div>
+</template>
+
+<script>
+// import { flexible } from "@/utils";
+export default {
+  name: "TimeMenu",
+  //   components: { sbjk, monitor, alarming, handleNumber, alarmStatic,Navbar },
+  data() {
+    return {
+      date: new Date(), //实时时间
+      nickName:''
+    };
+  },
+  methods: {
+    logout(){
+      localStorage.clear();
+      this.$store.dispatch('logout').then(() => {
+        this.$router.push('/login')
+      }).catch(err => {
+        this.$message.error(err); //登录失败提示错误
+      });
+    },
+    setZero(a) {
+      //设置小于10的数字在加0
+      return a < 10 ? "0" + a : a;
+    },
+    dateFormat: function (time) {
+      var date = new Date(time);
+      var year = date.getFullYear();
+      /* 在日期格式中,月份是从0开始的,因此要加0
+       * 使用三元表达式在小于10的前面加0,以达到格式统一  如 09:11:05
+       * */
+      var month =
+        date.getMonth() + 1 < 10
+          ? "0" + (date.getMonth() + 1)
+          : date.getMonth() + 1;
+      var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+      var hours =
+        date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+      var minutes =
+        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+      var seconds =
+        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+      // 拼接
+      return (
+        year +
+        "年" +
+        month +
+        "月" +
+        day +
+        "日 " +
+        hours +
+        ":" +
+        minutes +
+        ":" +
+        seconds
+      );
+    },
+  },
+  created(){
+    this.nickName = this.$store.state.nickName
+  },
+  mounted() {
+    var _this = this;
+    this.timer = setInterval(() => {
+      _this.date = new Date(); // 修改日期数据
+    }, 1000);
+  },
+  destroyed() {
+    if (this.timer) {
+      clearInterval(this.timer); // 在Vue实例销毁前,清除当前日期定时器
+    }
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.right-sec{
+    position:absolute;
+    right:0;
+    top:0;
+
+}
+.right-time {
+    float: right;
+    line-height: 50px;
+    margin-right: 50px;
+    font-size:14px
+  }
+ .right-menu {
+    float: right;
+    height: 100%;
+    line-height: 50px;
+
+    &:focus {
+      outline: none;
+    }
+
+    .right-menu-item {
+      display: inline-block;
+      padding: 0 8px;
+      height: 100%;
+      font-size: 18px;
+      color: #5a5e66;
+      vertical-align: text-bottom;
+
+      &.hover-effect {
+        cursor: pointer;
+        transition: background 0.3s;
+
+        &:hover {
+          background: rgba(0, 0, 0, 0.025);
+        }
+      }
+    }
+
+    .avatar-container {
+      margin-right: 30px;
+      display: block;
+
+      .avatar-wrapper {
+        // margin-top: 5px;
+        position: relative;
+
+        .user-avatar {
+          cursor: pointer;
+          width: 40px;
+          height: 40px;
+          border-radius: 10px;
+        }
+
+        .el-icon-caret-bottom {
+          cursor: pointer;
+          position: absolute;
+          right: -20px;
+          top: 20px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>
+
+<style lang="scss">
+</style>

+ 169 - 0
.history/src/components/TimeMenu/index_20220614165846.vue

@@ -0,0 +1,169 @@
+<template>
+  <div class="right-sec">
+    <div class="right-menu">
+      <el-dropdown class="avatar-container" trigger="click">
+        <div class="avatar-wrapper">
+          <div><strong>{{nickName}}</strong></div>
+          <i class="el-icon-caret-bottom" />
+        </div>
+        <el-dropdown-menu slot="dropdown" class="user-dropdown" >
+          <!-- <router-link to="/">
+            <el-dropdown-item> 首页 </el-dropdown-item>
+          </router-link> -->
+          <el-dropdown-item divided>
+            <span style="display: block" @click="logout()">退出</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+    <div class="right-time date">{{ dateFormat(date) }}</div>
+  </div>
+</template>
+
+<script>
+// import { flexible } from "@/utils";
+export default {
+  name: "TimeMenu",
+  //   components: { sbjk, monitor, alarming, handleNumber, alarmStatic,Navbar },
+  data() {
+    return {
+      date: new Date(), //实时时间
+      nickName:''
+    };
+  },
+  methods: {
+    logout(){
+      localStorage.clear();
+      this.$store.dispatch('logout').then(() => {
+        this.$router.push('/login')
+      }).catch(err => {
+        this.$message.error(err); //登录失败提示错误
+      });
+    },
+    setZero(a) {
+      //设置小于10的数字在加0
+      return a < 10 ? "0" + a : a;
+    },
+    dateFormat: function (time) {
+      var date = new Date(time);
+      var year = date.getFullYear();
+      /* 在日期格式中,月份是从0开始的,因此要加0
+       * 使用三元表达式在小于10的前面加0,以达到格式统一  如 09:11:05
+       * */
+      var month =
+        date.getMonth() + 1 < 10
+          ? "0" + (date.getMonth() + 1)
+          : date.getMonth() + 1;
+      var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+      var hours =
+        date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+      var minutes =
+        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+      var seconds =
+        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+      // 拼接
+      return (
+        year +
+        "年" +
+        month +
+        "月" +
+        day +
+        "日 " +
+        hours +
+        ":" +
+        minutes +
+        ":" +
+        seconds
+      );
+    },
+  },
+  created(){
+    setTimeout(()=>{
+       this.nickName = this.$store.state.nickName
+    })
+
+  },
+  mounted() {
+    var _this = this;
+    this.timer = setInterval(() => {
+      _this.date = new Date(); // 修改日期数据
+    }, 1000);
+  },
+  destroyed() {
+    if (this.timer) {
+      clearInterval(this.timer); // 在Vue实例销毁前,清除当前日期定时器
+    }
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.right-sec{
+    position:absolute;
+    right:0;
+    top:0;
+
+}
+.right-time {
+    float: right;
+    line-height: 50px;
+    margin-right: 50px;
+    font-size:14px
+  }
+ .right-menu {
+    float: right;
+    height: 100%;
+    line-height: 50px;
+
+    &:focus {
+      outline: none;
+    }
+
+    .right-menu-item {
+      display: inline-block;
+      padding: 0 8px;
+      height: 100%;
+      font-size: 18px;
+      color: #5a5e66;
+      vertical-align: text-bottom;
+
+      &.hover-effect {
+        cursor: pointer;
+        transition: background 0.3s;
+
+        &:hover {
+          background: rgba(0, 0, 0, 0.025);
+        }
+      }
+    }
+
+    .avatar-container {
+      margin-right: 30px;
+      display: block;
+
+      .avatar-wrapper {
+        // margin-top: 5px;
+        position: relative;
+
+        .user-avatar {
+          cursor: pointer;
+          width: 40px;
+          height: 40px;
+          border-radius: 10px;
+        }
+
+        .el-icon-caret-bottom {
+          cursor: pointer;
+          position: absolute;
+          right: -20px;
+          top: 20px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>
+
+<style lang="scss">
+</style>

+ 169 - 0
.history/src/components/TimeMenu/index_20220614165856.vue

@@ -0,0 +1,169 @@
+<template>
+  <div class="right-sec">
+    <div class="right-menu">
+      <el-dropdown class="avatar-container" trigger="click">
+        <div class="avatar-wrapper">
+          <div><strong>{{nickName}}</strong></div>
+          <i class="el-icon-caret-bottom" />
+        </div>
+        <el-dropdown-menu slot="dropdown" class="user-dropdown" >
+          <!-- <router-link to="/">
+            <el-dropdown-item> 首页 </el-dropdown-item>
+          </router-link> -->
+          <el-dropdown-item divided>
+            <span style="display: block" @click="logout()">退出</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+    <div class="right-time date">{{ dateFormat(date) }}</div>
+  </div>
+</template>
+
+<script>
+// import { flexible } from "@/utils";
+export default {
+  name: "TimeMenu",
+  //   components: { sbjk, monitor, alarming, handleNumber, alarmStatic,Navbar },
+  data() {
+    return {
+      date: new Date(), //实时时间
+      nickName:''
+    };
+  },
+  methods: {
+    logout(){
+      localStorage.clear();
+      this.$store.dispatch('logout').then(() => {
+        this.$router.push('/login')
+      }).catch(err => {
+        this.$message.error(err); //登录失败提示错误
+      });
+    },
+    setZero(a) {
+      //设置小于10的数字在加0
+      return a < 10 ? "0" + a : a;
+    },
+    dateFormat: function (time) {
+      var date = new Date(time);
+      var year = date.getFullYear();
+      /* 在日期格式中,月份是从0开始的,因此要加0
+       * 使用三元表达式在小于10的前面加0,以达到格式统一  如 09:11:05
+       * */
+      var month =
+        date.getMonth() + 1 < 10
+          ? "0" + (date.getMonth() + 1)
+          : date.getMonth() + 1;
+      var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+      var hours =
+        date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+      var minutes =
+        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+      var seconds =
+        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+      // 拼接
+      return (
+        year +
+        "年" +
+        month +
+        "月" +
+        day +
+        "日 " +
+        hours +
+        ":" +
+        minutes +
+        ":" +
+        seconds
+      );
+    },
+  },
+  created(){
+    setTimeout(()=>{
+       this.nickName = this.$store.state.nickName
+    },1000)
+
+  },
+  mounted() {
+    var _this = this;
+    this.timer = setInterval(() => {
+      _this.date = new Date(); // 修改日期数据
+    }, 1000);
+  },
+  destroyed() {
+    if (this.timer) {
+      clearInterval(this.timer); // 在Vue实例销毁前,清除当前日期定时器
+    }
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.right-sec{
+    position:absolute;
+    right:0;
+    top:0;
+
+}
+.right-time {
+    float: right;
+    line-height: 50px;
+    margin-right: 50px;
+    font-size:14px
+  }
+ .right-menu {
+    float: right;
+    height: 100%;
+    line-height: 50px;
+
+    &:focus {
+      outline: none;
+    }
+
+    .right-menu-item {
+      display: inline-block;
+      padding: 0 8px;
+      height: 100%;
+      font-size: 18px;
+      color: #5a5e66;
+      vertical-align: text-bottom;
+
+      &.hover-effect {
+        cursor: pointer;
+        transition: background 0.3s;
+
+        &:hover {
+          background: rgba(0, 0, 0, 0.025);
+        }
+      }
+    }
+
+    .avatar-container {
+      margin-right: 30px;
+      display: block;
+
+      .avatar-wrapper {
+        // margin-top: 5px;
+        position: relative;
+
+        .user-avatar {
+          cursor: pointer;
+          width: 40px;
+          height: 40px;
+          border-radius: 10px;
+        }
+
+        .el-icon-caret-bottom {
+          cursor: pointer;
+          position: absolute;
+          right: -20px;
+          top: 20px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>
+
+<style lang="scss">
+</style>

+ 168 - 0
.history/src/components/TimeMenu/index_20220614165911.vue

@@ -0,0 +1,168 @@
+<template>
+  <div class="right-sec">
+    <div class="right-menu">
+      <el-dropdown class="avatar-container" trigger="click">
+        <div class="avatar-wrapper">
+          <div><strong>{{nickName}}</strong></div>
+          <i class="el-icon-caret-bottom" />
+        </div>
+        <el-dropdown-menu slot="dropdown" class="user-dropdown" >
+          <!-- <router-link to="/">
+            <el-dropdown-item> 首页 </el-dropdown-item>
+          </router-link> -->
+          <el-dropdown-item divided>
+            <span style="display: block" @click="logout()">退出</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+    <div class="right-time date">{{ dateFormat(date) }}</div>
+  </div>
+</template>
+
+<script>
+// import { flexible } from "@/utils";
+export default {
+  name: "TimeMenu",
+  //   components: { sbjk, monitor, alarming, handleNumber, alarmStatic,Navbar },
+  data() {
+    return {
+      date: new Date(), //实时时间
+      nickName:''
+    };
+  },
+  methods: {
+    logout(){
+      localStorage.clear();
+      this.$store.dispatch('logout').then(() => {
+        this.$router.push('/login')
+      }).catch(err => {
+        this.$message.error(err); //登录失败提示错误
+      });
+    },
+    setZero(a) {
+      //设置小于10的数字在加0
+      return a < 10 ? "0" + a : a;
+    },
+    dateFormat: function (time) {
+      var date = new Date(time);
+      var year = date.getFullYear();
+      /* 在日期格式中,月份是从0开始的,因此要加0
+       * 使用三元表达式在小于10的前面加0,以达到格式统一  如 09:11:05
+       * */
+      var month =
+        date.getMonth() + 1 < 10
+          ? "0" + (date.getMonth() + 1)
+          : date.getMonth() + 1;
+      var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+      var hours =
+        date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+      var minutes =
+        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+      var seconds =
+        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+      // 拼接
+      return (
+        year +
+        "年" +
+        month +
+        "月" +
+        day +
+        "日 " +
+        hours +
+        ":" +
+        minutes +
+        ":" +
+        seconds
+      );
+    },
+  },
+  created(){
+    setTimeout(()=>{
+       this.nickName = this.$store.state.nickName
+    },1000)
+  },
+  mounted() {
+    var _this = this;
+    this.timer = setInterval(() => {
+      _this.date = new Date(); // 修改日期数据
+    }, 1000);
+  },
+  destroyed() {
+    if (this.timer) {
+      clearInterval(this.timer); // 在Vue实例销毁前,清除当前日期定时器
+    }
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.right-sec{
+    position:absolute;
+    right:0;
+    top:0;
+
+}
+.right-time {
+    float: right;
+    line-height: 50px;
+    margin-right: 50px;
+    font-size:14px
+  }
+ .right-menu {
+    float: right;
+    height: 100%;
+    line-height: 50px;
+
+    &:focus {
+      outline: none;
+    }
+
+    .right-menu-item {
+      display: inline-block;
+      padding: 0 8px;
+      height: 100%;
+      font-size: 18px;
+      color: #5a5e66;
+      vertical-align: text-bottom;
+
+      &.hover-effect {
+        cursor: pointer;
+        transition: background 0.3s;
+
+        &:hover {
+          background: rgba(0, 0, 0, 0.025);
+        }
+      }
+    }
+
+    .avatar-container {
+      margin-right: 30px;
+      display: block;
+
+      .avatar-wrapper {
+        // margin-top: 5px;
+        position: relative;
+
+        .user-avatar {
+          cursor: pointer;
+          width: 40px;
+          height: 40px;
+          border-radius: 10px;
+        }
+
+        .el-icon-caret-bottom {
+          cursor: pointer;
+          position: absolute;
+          right: -20px;
+          top: 20px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>
+
+<style lang="scss">
+</style>

+ 168 - 0
.history/src/components/TimeMenu/index_20220614165916.vue

@@ -0,0 +1,168 @@
+<template>
+  <div class="right-sec">
+    <div class="right-menu">
+      <el-dropdown class="avatar-container" trigger="click">
+        <div class="avatar-wrapper">
+          <div><strong>{{nickName}}</strong></div>
+          <i class="el-icon-caret-bottom" />
+        </div>
+        <el-dropdown-menu slot="dropdown" class="user-dropdown" >
+          <!-- <router-link to="/">
+            <el-dropdown-item> 首页 </el-dropdown-item>
+          </router-link> -->
+          <el-dropdown-item divided>
+            <span style="display: block" @click="logout()">退出</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+    <div class="right-time date">{{ dateFormat(date) }}</div>
+  </div>
+</template>
+
+<script>
+// import { flexible } from "@/utils";
+export default {
+  name: "TimeMenu",
+  //   components: { sbjk, monitor, alarming, handleNumber, alarmStatic,Navbar },
+  data() {
+    return {
+      date: new Date(), //实时时间
+      nickName:''
+    };
+  },
+  methods: {
+    logout(){
+      localStorage.clear();
+      this.$store.dispatch('logout').then(() => {
+        this.$router.push('/login')
+      }).catch(err => {
+        this.$message.error(err); //登录失败提示错误
+      });
+    },
+    setZero(a) {
+      //设置小于10的数字在加0
+      return a < 10 ? "0" + a : a;
+    },
+    dateFormat: function (time) {
+      var date = new Date(time);
+      var year = date.getFullYear();
+      /* 在日期格式中,月份是从0开始的,因此要加0
+       * 使用三元表达式在小于10的前面加0,以达到格式统一  如 09:11:05
+       * */
+      var month =
+        date.getMonth() + 1 < 10
+          ? "0" + (date.getMonth() + 1)
+          : date.getMonth() + 1;
+      var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+      var hours =
+        date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+      var minutes =
+        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+      var seconds =
+        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+      // 拼接
+      return (
+        year +
+        "年" +
+        month +
+        "月" +
+        day +
+        "日 " +
+        hours +
+        ":" +
+        minutes +
+        ":" +
+        seconds
+      );
+    },
+  },
+  created(){
+    setTimeout(()=>{
+       this.nickName = this.$store.state.nickName
+    },500)
+  },
+  mounted() {
+    var _this = this;
+    this.timer = setInterval(() => {
+      _this.date = new Date(); // 修改日期数据
+    }, 1000);
+  },
+  destroyed() {
+    if (this.timer) {
+      clearInterval(this.timer); // 在Vue实例销毁前,清除当前日期定时器
+    }
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.right-sec{
+    position:absolute;
+    right:0;
+    top:0;
+
+}
+.right-time {
+    float: right;
+    line-height: 50px;
+    margin-right: 50px;
+    font-size:14px
+  }
+ .right-menu {
+    float: right;
+    height: 100%;
+    line-height: 50px;
+
+    &:focus {
+      outline: none;
+    }
+
+    .right-menu-item {
+      display: inline-block;
+      padding: 0 8px;
+      height: 100%;
+      font-size: 18px;
+      color: #5a5e66;
+      vertical-align: text-bottom;
+
+      &.hover-effect {
+        cursor: pointer;
+        transition: background 0.3s;
+
+        &:hover {
+          background: rgba(0, 0, 0, 0.025);
+        }
+      }
+    }
+
+    .avatar-container {
+      margin-right: 30px;
+      display: block;
+
+      .avatar-wrapper {
+        // margin-top: 5px;
+        position: relative;
+
+        .user-avatar {
+          cursor: pointer;
+          width: 40px;
+          height: 40px;
+          border-radius: 10px;
+        }
+
+        .el-icon-caret-bottom {
+          cursor: pointer;
+          position: absolute;
+          right: -20px;
+          top: 20px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>
+
+<style lang="scss">
+</style>

+ 168 - 0
.history/src/components/TimeMenu/index_20220614165926.vue

@@ -0,0 +1,168 @@
+<template>
+  <div class="right-sec">
+    <div class="right-menu">
+      <el-dropdown class="avatar-container" trigger="click">
+        <div class="avatar-wrapper">
+          <div><strong>{{nickName}}</strong></div>
+          <i class="el-icon-caret-bottom" />
+        </div>
+        <el-dropdown-menu slot="dropdown" class="user-dropdown" >
+          <!-- <router-link to="/">
+            <el-dropdown-item> 首页 </el-dropdown-item>
+          </router-link> -->
+          <el-dropdown-item divided>
+            <span style="display: block" @click="logout()">退出</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </div>
+    <div class="right-time date">{{ dateFormat(date) }}</div>
+  </div>
+</template>
+
+<script>
+// import { flexible } from "@/utils";
+export default {
+  name: "TimeMenu",
+  //   components: { sbjk, monitor, alarming, handleNumber, alarmStatic,Navbar },
+  data() {
+    return {
+      date: new Date(), //实时时间
+      nickName:''
+    };
+  },
+  methods: {
+    logout(){
+      localStorage.clear();
+      this.$store.dispatch('logout').then(() => {
+        this.$router.push('/login')
+      }).catch(err => {
+        this.$message.error(err); //登录失败提示错误
+      });
+    },
+    setZero(a) {
+      //设置小于10的数字在加0
+      return a < 10 ? "0" + a : a;
+    },
+    dateFormat: function (time) {
+      var date = new Date(time);
+      var year = date.getFullYear();
+      /* 在日期格式中,月份是从0开始的,因此要加0
+       * 使用三元表达式在小于10的前面加0,以达到格式统一  如 09:11:05
+       * */
+      var month =
+        date.getMonth() + 1 < 10
+          ? "0" + (date.getMonth() + 1)
+          : date.getMonth() + 1;
+      var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+      var hours =
+        date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+      var minutes =
+        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+      var seconds =
+        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+      // 拼接
+      return (
+        year +
+        "年" +
+        month +
+        "月" +
+        day +
+        "日 " +
+        hours +
+        ":" +
+        minutes +
+        ":" +
+        seconds
+      );
+    },
+  },
+  created(){
+    setTimeout(()=>{
+       this.nickName = this.$store.state.nickName
+    },500)
+  },
+  mounted() {
+    var _this = this;
+    this.timer = setInterval(() => {
+      _this.date = new Date(); // 修改日期数据
+    }, 1000);
+  },
+  destroyed() {
+    if (this.timer) {
+      clearInterval(this.timer); // 在Vue实例销毁前,清除当前日期定时器
+    }
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.right-sec{
+    position:absolute;
+    right:0;
+    top:0;
+
+}
+.right-time {
+    float: right;
+    line-height: 50px;
+    margin-right: 50px;
+    font-size:14px
+  }
+ .right-menu {
+    float: right;
+    height: 100%;
+    line-height: 50px;
+
+    &:focus {
+      outline: none;
+    }
+
+    .right-menu-item {
+      display: inline-block;
+      padding: 0 8px;
+      height: 100%;
+      font-size: 18px;
+      color: #5a5e66;
+      vertical-align: text-bottom;
+
+      &.hover-effect {
+        cursor: pointer;
+        transition: background 0.3s;
+
+        &:hover {
+          background: rgba(0, 0, 0, 0.025);
+        }
+      }
+    }
+
+    .avatar-container {
+      margin-right: 30px;
+      display: block;
+
+      .avatar-wrapper {
+        // margin-top: 5px;
+        position: relative;
+
+        .user-avatar {
+          cursor: pointer;
+          width: 40px;
+          height: 40px;
+          border-radius: 10px;
+        }
+
+        .el-icon-caret-bottom {
+          cursor: pointer;
+          position: absolute;
+          right: -20px;
+          top: 20px;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>
+
+<style lang="scss">
+</style>

+ 228 - 0
.history/src/store/index_20220614144148.js

@@ -0,0 +1,228 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getRouter } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    console.log(response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    console.log(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getInfo() {
+
+        return new Promise((resolve, reject) => {
+            getInfo().then(response => {
+                    console.log(response.data)
+                    let data = response.data
+                    var arrayList = [];
+                    for (let i = 0; i < data.length; i++) {
+                        arrayList.push({
+                            path: (data[i].path).slice(1, 8),
+                            component: Layout,
+                            redirect: (data[i].path).slice(1, 8),
+                            name: "",
+                            meta: {
+                                title: data[i].meta.title,
+                                icon: data[i].meta.icon
+                            },
+                            children: []
+                        })
+                        for (let j = 0; j < data[i].children.length; j++) {
+                            var new_response = data[i].children[j].meta
+                            var url = data[i].children[j].path
+                            arrayList[i].children.push({
+                                path: url,
+                                name: '',
+                                component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                                meta: {
+                                    title: new_response.title,
+                                    icon: new_response.icon
+                                }
+
+                            })
+                        }
+                    }
+                    var header = [{
+                                path: '/index',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                hidden: true,
+                            },
+                            {
+                                path: '/',
+                                component: Layout,
+                                redirect: '/index',
+                                children: [{
+                                    path: 'index',
+                                    name: '',
+                                    component: () =>
+                                        import ('@/views/index/index'),
+                                    meta: { title: '首页', icon: 'home' }
+                                }]
+                            },
+
+
+                        ]
+                        // 404 page must be placed at the end !!!
+                    let footer = {
+                        path: '*',
+                        redirect: '/404',
+                        hidden: true
+                    }
+                    header[2] = arrayList[0]
+                    arrayList.unshift(header[1])
+                    arrayList.unshift(header[0])
+                    arrayList.push(footer)
+                    router.options.routes = arrayList
+                    state.app.routes = router.options.routes
+
+                    router.addRoutes(arrayList)
+
+                }).catch(error => {
+                    reject(error)
+                })
+                // getInfo0().then(response2 => {
+                //     console.log(response2)
+                // })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 228 - 0
.history/src/store/index_20220614144201.js

@@ -0,0 +1,228 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getRouter } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    console.log(response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    console.log(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getRouter() {
+
+        return new Promise((resolve, reject) => {
+            getRouter().then(response => {
+                    console.log(response.data)
+                    let data = response.data
+                    var arrayList = [];
+                    for (let i = 0; i < data.length; i++) {
+                        arrayList.push({
+                            path: (data[i].path).slice(1, 8),
+                            component: Layout,
+                            redirect: (data[i].path).slice(1, 8),
+                            name: "",
+                            meta: {
+                                title: data[i].meta.title,
+                                icon: data[i].meta.icon
+                            },
+                            children: []
+                        })
+                        for (let j = 0; j < data[i].children.length; j++) {
+                            var new_response = data[i].children[j].meta
+                            var url = data[i].children[j].path
+                            arrayList[i].children.push({
+                                path: url,
+                                name: '',
+                                component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                                meta: {
+                                    title: new_response.title,
+                                    icon: new_response.icon
+                                }
+
+                            })
+                        }
+                    }
+                    var header = [{
+                                path: '/index',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                hidden: true,
+                            },
+                            {
+                                path: '/',
+                                component: Layout,
+                                redirect: '/index',
+                                children: [{
+                                    path: 'index',
+                                    name: '',
+                                    component: () =>
+                                        import ('@/views/index/index'),
+                                    meta: { title: '首页', icon: 'home' }
+                                }]
+                            },
+
+
+                        ]
+                        // 404 page must be placed at the end !!!
+                    let footer = {
+                        path: '*',
+                        redirect: '/404',
+                        hidden: true
+                    }
+                    header[2] = arrayList[0]
+                    arrayList.unshift(header[1])
+                    arrayList.unshift(header[0])
+                    arrayList.push(footer)
+                    router.options.routes = arrayList
+                    state.app.routes = router.options.routes
+
+                    router.addRoutes(arrayList)
+
+                }).catch(error => {
+                    reject(error)
+                })
+                // getInfo0().then(response2 => {
+                //     console.log(response2)
+                // })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 228 - 0
.history/src/store/index_20220614144230.js

@@ -0,0 +1,228 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getRouter } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    console.log(response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    console.log(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getRouter() {
+
+        return new Promise((resolve, reject) => {
+            getRouter().then(response => {
+                    console.log(response.data)
+                    let data = response.data
+                    var arrayList = [];
+                    for (let i = 0; i < data.length; i++) {
+                        arrayList.push({
+                            path: (data[i].path).slice(1, 8),
+                            component: Layout,
+                            redirect: (data[i].path).slice(1, 8),
+                            name: "",
+                            meta: {
+                                title: data[i].meta.title,
+                                icon: data[i].meta.icon
+                            },
+                            children: []
+                        })
+                        for (let j = 0; j < data[i].children.length; j++) {
+                            var new_response = data[i].children[j].meta
+                            var url = data[i].children[j].path
+                            arrayList[i].children.push({
+                                path: url,
+                                name: '',
+                                component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                                meta: {
+                                    title: new_response.title,
+                                    icon: new_response.icon
+                                }
+
+                            })
+                        }
+                    }
+                    var header = [{
+                                path: '/index',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                hidden: true,
+                            },
+                            {
+                                path: '/',
+                                component: Layout,
+                                redirect: '/index',
+                                children: [{
+                                    path: 'index',
+                                    name: '',
+                                    component: () =>
+                                        import ('@/views/index/index'),
+                                    meta: { title: '首页', icon: 'home' }
+                                }]
+                            },
+
+
+                        ]
+                        // 404 page must be placed at the end !!!
+                    let footer = {
+                        path: '*',
+                        redirect: '/404',
+                        hidden: true
+                    }
+                    header[2] = arrayList[0]
+                    arrayList.unshift(header[1])
+                    arrayList.unshift(header[0])
+                    arrayList.push(footer)
+                    router.options.routes = arrayList
+                    state.app.routes = router.options.routes
+
+                    router.addRoutes(arrayList)
+
+                }).catch(error => {
+                    reject(error)
+                })
+                // getInfo0().then(response2 => {
+                //     console.log(response2)
+                // })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 228 - 0
.history/src/store/index_20220614144240.js

@@ -0,0 +1,228 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getRouter } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    console.log(response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    console.log(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getRouter() {
+
+        return new Promise((resolve, reject) => {
+            getRouter().then(response => {
+                    console.log(response.data)
+                    let data = response.data
+                    var arrayList = [];
+                    for (let i = 0; i < data.length; i++) {
+                        arrayList.push({
+                            path: (data[i].path).slice(1, 8),
+                            component: Layout,
+                            redirect: (data[i].path).slice(1, 8),
+                            name: "",
+                            meta: {
+                                title: data[i].meta.title,
+                                icon: data[i].meta.icon
+                            },
+                            children: []
+                        })
+                        for (let j = 0; j < data[i].children.length; j++) {
+                            var new_response = data[i].children[j].meta
+                            var url = data[i].children[j].path
+                            arrayList[i].children.push({
+                                path: url,
+                                name: '',
+                                component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                                meta: {
+                                    title: new_response.title,
+                                    icon: new_response.icon
+                                }
+
+                            })
+                        }
+                    }
+                    var header = [{
+                                path: '/index',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                hidden: true,
+                            },
+                            {
+                                path: '/',
+                                component: Layout,
+                                redirect: '/index',
+                                children: [{
+                                    path: 'index',
+                                    name: '',
+                                    component: () =>
+                                        import ('@/views/index/index'),
+                                    meta: { title: '首页', icon: 'home' }
+                                }]
+                            },
+
+
+                        ]
+                        // 404 page must be placed at the end !!!
+                    let footer = {
+                        path: '*',
+                        redirect: '/404',
+                        hidden: true
+                    }
+                    header[2] = arrayList[0]
+                    arrayList.unshift(header[1])
+                    arrayList.unshift(header[0])
+                    arrayList.push(footer)
+                    router.options.routes = arrayList
+                    state.app.routes = router.options.routes
+
+                    router.addRoutes(arrayList)
+
+                }).catch(error => {
+                    reject(error)
+                })
+                // getInfo0().then(response2 => {
+                //     console.log(response2)
+                // })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 228 - 0
.history/src/store/index_20220614144422.js

@@ -0,0 +1,228 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getRouter } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    console.log(response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    console.log(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getRouter() {
+
+        return new Promise((resolve, reject) => {
+            getRouter().then(response => {
+                    console.log(response.data)
+                    let data = response.data
+                    var arrayList = [];
+                    for (let i = 0; i < data.length; i++) {
+                        arrayList.push({
+                            path: (data[i].path).slice(1, 8),
+                            component: Layout,
+                            redirect: (data[i].path).slice(1, 8),
+                            name: "",
+                            meta: {
+                                title: data[i].meta.title,
+                                icon: data[i].meta.icon
+                            },
+                            children: []
+                        })
+                        for (let j = 0; j < data[i].children.length; j++) {
+                            var new_response = data[i].children[j].meta
+                            var url = data[i].children[j].path
+                            arrayList[i].children.push({
+                                path: url,
+                                name: '',
+                                component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                                meta: {
+                                    title: new_response.title,
+                                    icon: new_response.icon
+                                }
+
+                            })
+                        }
+                    }
+                    var header = [{
+                                path: '/index',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                hidden: true,
+                            },
+                            {
+                                path: '/',
+                                component: Layout,
+                                redirect: '/index',
+                                children: [{
+                                    path: 'index',
+                                    name: '',
+                                    component: () =>
+                                        import ('@/views/index/index'),
+                                    meta: { title: '首页', icon: 'home' }
+                                }]
+                            },
+
+
+                        ]
+                        // 404 page must be placed at the end !!!
+                    let footer = {
+                        path: '*',
+                        redirect: '/404',
+                        hidden: true
+                    }
+                    header[2] = arrayList[0]
+                    arrayList.unshift(header[1])
+                    arrayList.unshift(header[0])
+                    arrayList.push(footer)
+                    router.options.routes = arrayList
+                    state.app.routes = router.options.routes
+
+                    router.addRoutes(arrayList)
+
+                }).catch(error => {
+                    reject(error)
+                })
+                // getInfo0().then(response2 => {
+                //     console.log(response2)
+                // })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 228 - 0
.history/src/store/index_20220614144605.js

@@ -0,0 +1,228 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getRouter } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    console.log(response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    console.log(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getInfo() {
+
+        return new Promise((resolve, reject) => {
+            getInfo().then(response => {
+                    console.log(response.data)
+                    let data = response.data
+                    var arrayList = [];
+                    for (let i = 0; i < data.length; i++) {
+                        arrayList.push({
+                            path: (data[i].path).slice(1, 8),
+                            component: Layout,
+                            redirect: (data[i].path).slice(1, 8),
+                            name: "",
+                            meta: {
+                                title: data[i].meta.title,
+                                icon: data[i].meta.icon
+                            },
+                            children: []
+                        })
+                        for (let j = 0; j < data[i].children.length; j++) {
+                            var new_response = data[i].children[j].meta
+                            var url = data[i].children[j].path
+                            arrayList[i].children.push({
+                                path: url,
+                                name: '',
+                                component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                                meta: {
+                                    title: new_response.title,
+                                    icon: new_response.icon
+                                }
+
+                            })
+                        }
+                    }
+                    var header = [{
+                                path: '/index',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                hidden: true,
+                            },
+                            {
+                                path: '/',
+                                component: Layout,
+                                redirect: '/index',
+                                children: [{
+                                    path: 'index',
+                                    name: '',
+                                    component: () =>
+                                        import ('@/views/index/index'),
+                                    meta: { title: '首页', icon: 'home' }
+                                }]
+                            },
+
+
+                        ]
+                        // 404 page must be placed at the end !!!
+                    let footer = {
+                        path: '*',
+                        redirect: '/404',
+                        hidden: true
+                    }
+                    header[2] = arrayList[0]
+                    arrayList.unshift(header[1])
+                    arrayList.unshift(header[0])
+                    arrayList.push(footer)
+                    router.options.routes = arrayList
+                    state.app.routes = router.options.routes
+
+                    router.addRoutes(arrayList)
+
+                }).catch(error => {
+                    reject(error)
+                })
+                // getInfo0().then(response2 => {
+                //     console.log(response2)
+                // })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 228 - 0
.history/src/store/index_20220614144707.js

@@ -0,0 +1,228 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getRouter } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    console.log(response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    console.log(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getInfo() {
+
+        return new Promise((resolve, reject) => {
+            getInfo().then(response => {
+                    console.log(response.data)
+                    let data = response.data
+                    var arrayList = [];
+                    for (let i = 0; i < data.length; i++) {
+                        arrayList.push({
+                            path: (data[i].path).slice(1, 8),
+                            component: Layout,
+                            redirect: (data[i].path).slice(1, 8),
+                            name: "",
+                            meta: {
+                                title: data[i].meta.title,
+                                icon: data[i].meta.icon
+                            },
+                            children: []
+                        })
+                        for (let j = 0; j < data[i].children.length; j++) {
+                            var new_response = data[i].children[j].meta
+                            var url = data[i].children[j].path
+                            arrayList[i].children.push({
+                                path: url,
+                                name: '',
+                                component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                                meta: {
+                                    title: new_response.title,
+                                    icon: new_response.icon
+                                }
+
+                            })
+                        }
+                    }
+                    var header = [{
+                                path: '/index',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                hidden: true,
+                            },
+                            {
+                                path: '/',
+                                component: Layout,
+                                redirect: '/index',
+                                children: [{
+                                    path: 'index',
+                                    name: '',
+                                    component: () =>
+                                        import ('@/views/index/index'),
+                                    meta: { title: '首页', icon: 'home' }
+                                }]
+                            },
+
+
+                        ]
+                        // 404 page must be placed at the end !!!
+                    let footer = {
+                        path: '*',
+                        redirect: '/404',
+                        hidden: true
+                    }
+                    header[2] = arrayList[0]
+                    arrayList.unshift(header[1])
+                    arrayList.unshift(header[0])
+                    arrayList.push(footer)
+                    router.options.routes = arrayList
+                    state.app.routes = router.options.routes
+
+                    router.addRoutes(arrayList)
+
+                }).catch(error => {
+                    reject(error)
+                })
+                // getInfo0().then(response2 => {
+                //     console.log(response2)
+                // })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 228 - 0
.history/src/store/index_20220614144713.js

@@ -0,0 +1,228 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getRouter } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    console.log(response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    console.log(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getInfo() {
+
+        return new Promise((resolve, reject) => {
+            getInfo().then(response => {
+                    console.log(response.data)
+                    let data = response.data
+                    var arrayList = [];
+                    for (let i = 0; i < data.length; i++) {
+                        arrayList.push({
+                            path: (data[i].path).slice(1, 8),
+                            component: Layout,
+                            redirect: (data[i].path).slice(1, 8),
+                            name: "",
+                            meta: {
+                                title: data[i].meta.title,
+                                icon: data[i].meta.icon
+                            },
+                            children: []
+                        })
+                        for (let j = 0; j < data[i].children.length; j++) {
+                            var new_response = data[i].children[j].meta
+                            var url = data[i].children[j].path
+                            arrayList[i].children.push({
+                                path: url,
+                                name: '',
+                                component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                                meta: {
+                                    title: new_response.title,
+                                    icon: new_response.icon
+                                }
+
+                            })
+                        }
+                    }
+                    var header = [{
+                                path: '/index',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                hidden: true,
+                            },
+                            {
+                                path: '/',
+                                component: Layout,
+                                redirect: '/index',
+                                children: [{
+                                    path: 'index',
+                                    name: '',
+                                    component: () =>
+                                        import ('@/views/index/index'),
+                                    meta: { title: '首页', icon: 'home' }
+                                }]
+                            },
+
+
+                        ]
+                        // 404 page must be placed at the end !!!
+                    let footer = {
+                        path: '*',
+                        redirect: '/404',
+                        hidden: true
+                    }
+                    header[2] = arrayList[0]
+                    arrayList.unshift(header[1])
+                    arrayList.unshift(header[0])
+                    arrayList.push(footer)
+                    router.options.routes = arrayList
+                    state.app.routes = router.options.routes
+
+                    router.addRoutes(arrayList)
+
+                }).catch(error => {
+                    reject(error)
+                })
+                // getInfo0().then(response2 => {
+                //     console.log(response2)
+                // })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 228 - 0
.history/src/store/index_20220614145144.js

@@ -0,0 +1,228 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getInfo2 } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    console.log(response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    console.log(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getInfo() {
+
+        return new Promise((resolve, reject) => {
+            getInfo().then(response => {
+                    console.log(response.data)
+                    let data = response.data
+                    var arrayList = [];
+                    for (let i = 0; i < data.length; i++) {
+                        arrayList.push({
+                            path: (data[i].path).slice(1, 8),
+                            component: Layout,
+                            redirect: (data[i].path).slice(1, 8),
+                            name: "",
+                            meta: {
+                                title: data[i].meta.title,
+                                icon: data[i].meta.icon
+                            },
+                            children: []
+                        })
+                        for (let j = 0; j < data[i].children.length; j++) {
+                            var new_response = data[i].children[j].meta
+                            var url = data[i].children[j].path
+                            arrayList[i].children.push({
+                                path: url,
+                                name: '',
+                                component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                                meta: {
+                                    title: new_response.title,
+                                    icon: new_response.icon
+                                }
+
+                            })
+                        }
+                    }
+                    var header = [{
+                                path: '/index',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                hidden: true,
+                            },
+                            {
+                                path: '/',
+                                component: Layout,
+                                redirect: '/index',
+                                children: [{
+                                    path: 'index',
+                                    name: '',
+                                    component: () =>
+                                        import ('@/views/index/index'),
+                                    meta: { title: '首页', icon: 'home' }
+                                }]
+                            },
+
+
+                        ]
+                        // 404 page must be placed at the end !!!
+                    let footer = {
+                        path: '*',
+                        redirect: '/404',
+                        hidden: true
+                    }
+                    header[2] = arrayList[0]
+                    arrayList.unshift(header[1])
+                    arrayList.unshift(header[0])
+                    arrayList.push(footer)
+                    router.options.routes = arrayList
+                    state.app.routes = router.options.routes
+
+                    router.addRoutes(arrayList)
+
+                }).catch(error => {
+                    reject(error)
+                })
+                // getInfo0().then(response2 => {
+                //     console.log(response2)
+                // })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 228 - 0
.history/src/store/index_20220614145201.js

@@ -0,0 +1,228 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getInfo2 } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    console.log(response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    console.log(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getInfo() {
+
+        return new Promise((resolve, reject) => {
+            getInfo().then(response => {
+                console.log(response.data)
+                let data = response.data
+                var arrayList = [];
+                for (let i = 0; i < data.length; i++) {
+                    arrayList.push({
+                        path: (data[i].path).slice(1, 8),
+                        component: Layout,
+                        redirect: (data[i].path).slice(1, 8),
+                        name: "",
+                        meta: {
+                            title: data[i].meta.title,
+                            icon: data[i].meta.icon
+                        },
+                        children: []
+                    })
+                    for (let j = 0; j < data[i].children.length; j++) {
+                        var new_response = data[i].children[j].meta
+                        var url = data[i].children[j].path
+                        arrayList[i].children.push({
+                            path: url,
+                            name: '',
+                            component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                            meta: {
+                                title: new_response.title,
+                                icon: new_response.icon
+                            }
+
+                        })
+                    }
+                }
+                var header = [{
+                            path: '/index',
+                            component: () =>
+                                import ('@/views/index/index'),
+                            hidden: true,
+                        },
+                        {
+                            path: '/',
+                            component: Layout,
+                            redirect: '/index',
+                            children: [{
+                                path: 'index',
+                                name: '',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                meta: { title: '首页', icon: 'home' }
+                            }]
+                        },
+
+
+                    ]
+                    // 404 page must be placed at the end !!!
+                let footer = {
+                    path: '*',
+                    redirect: '/404',
+                    hidden: true
+                }
+                header[2] = arrayList[0]
+                arrayList.unshift(header[1])
+                arrayList.unshift(header[0])
+                arrayList.push(footer)
+                router.options.routes = arrayList
+                state.app.routes = router.options.routes
+
+                router.addRoutes(arrayList)
+
+            }).catch(error => {
+                reject(error)
+            })
+            getInfo2().then(response2 => {
+                console.log(response2)
+            })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 228 - 0
.history/src/store/index_20220614145208.js

@@ -0,0 +1,228 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getInfo2 } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    console.log(response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    console.log(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getInfo() {
+
+        return new Promise((resolve, reject) => {
+            getInfo().then(response => {
+                console.log(response.data)
+                let data = response.data
+                var arrayList = [];
+                for (let i = 0; i < data.length; i++) {
+                    arrayList.push({
+                        path: (data[i].path).slice(1, 8),
+                        component: Layout,
+                        redirect: (data[i].path).slice(1, 8),
+                        name: "",
+                        meta: {
+                            title: data[i].meta.title,
+                            icon: data[i].meta.icon
+                        },
+                        children: []
+                    })
+                    for (let j = 0; j < data[i].children.length; j++) {
+                        var new_response = data[i].children[j].meta
+                        var url = data[i].children[j].path
+                        arrayList[i].children.push({
+                            path: url,
+                            name: '',
+                            component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                            meta: {
+                                title: new_response.title,
+                                icon: new_response.icon
+                            }
+
+                        })
+                    }
+                }
+                var header = [{
+                            path: '/index',
+                            component: () =>
+                                import ('@/views/index/index'),
+                            hidden: true,
+                        },
+                        {
+                            path: '/',
+                            component: Layout,
+                            redirect: '/index',
+                            children: [{
+                                path: 'index',
+                                name: '',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                meta: { title: '首页', icon: 'home' }
+                            }]
+                        },
+
+
+                    ]
+                    // 404 page must be placed at the end !!!
+                let footer = {
+                    path: '*',
+                    redirect: '/404',
+                    hidden: true
+                }
+                header[2] = arrayList[0]
+                arrayList.unshift(header[1])
+                arrayList.unshift(header[0])
+                arrayList.push(footer)
+                router.options.routes = arrayList
+                state.app.routes = router.options.routes
+
+                router.addRoutes(arrayList)
+
+            }).catch(error => {
+                reject(error)
+            })
+            getInfo2().then(response => {
+                console.log(response)
+            })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 228 - 0
.history/src/store/index_20220614150220.js

@@ -0,0 +1,228 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getInfo2 } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    console.log(response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    console.log(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getInfo() {
+
+        return new Promise((resolve, reject) => {
+            getInfo().then(response => {
+                console.log(response.data)
+                let data = response.data
+                var arrayList = [];
+                for (let i = 0; i < data.length; i++) {
+                    arrayList.push({
+                        path: (data[i].path).slice(1, 8),
+                        component: Layout,
+                        redirect: (data[i].path).slice(1, 8),
+                        name: "",
+                        meta: {
+                            title: data[i].meta.title,
+                            icon: data[i].meta.icon
+                        },
+                        children: []
+                    })
+                    for (let j = 0; j < data[i].children.length; j++) {
+                        var new_response = data[i].children[j].meta
+                        var url = data[i].children[j].path
+                        arrayList[i].children.push({
+                            path: url,
+                            name: '',
+                            component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                            meta: {
+                                title: new_response.title,
+                                icon: new_response.icon
+                            }
+
+                        })
+                    }
+                }
+                var header = [{
+                            path: '/index',
+                            component: () =>
+                                import ('@/views/index/index'),
+                            hidden: true,
+                        },
+                        {
+                            path: '/',
+                            component: Layout,
+                            redirect: '/index',
+                            children: [{
+                                path: 'index',
+                                name: '',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                meta: { title: '首页', icon: 'home' }
+                            }]
+                        },
+
+
+                    ]
+                    // 404 page must be placed at the end !!!
+                let footer = {
+                    path: '*',
+                    redirect: '/404',
+                    hidden: true
+                }
+                header[2] = arrayList[0]
+                arrayList.unshift(header[1])
+                arrayList.unshift(header[0])
+                arrayList.push(footer)
+                router.options.routes = arrayList
+                state.app.routes = router.options.routes
+
+                router.addRoutes(arrayList)
+
+            }).catch(error => {
+                reject(error)
+            })
+            getInfo2().then(response => {
+                console.log(response)
+            })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 226 - 0
.history/src/store/index_20220614161326.js

@@ -0,0 +1,226 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getInfo2 } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getInfo() {
+
+        return new Promise((resolve, reject) => {
+            getInfo().then(response => {
+                console.log(response.data)
+                let data = response.data
+                var arrayList = [];
+                for (let i = 0; i < data.length; i++) {
+                    arrayList.push({
+                        path: (data[i].path).slice(1, 8),
+                        component: Layout,
+                        redirect: (data[i].path).slice(1, 8),
+                        name: "",
+                        meta: {
+                            title: data[i].meta.title,
+                            icon: data[i].meta.icon
+                        },
+                        children: []
+                    })
+                    for (let j = 0; j < data[i].children.length; j++) {
+                        var new_response = data[i].children[j].meta
+                        var url = data[i].children[j].path
+                        arrayList[i].children.push({
+                            path: url,
+                            name: '',
+                            component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                            meta: {
+                                title: new_response.title,
+                                icon: new_response.icon
+                            }
+
+                        })
+                    }
+                }
+                var header = [{
+                            path: '/index',
+                            component: () =>
+                                import ('@/views/index/index'),
+                            hidden: true,
+                        },
+                        {
+                            path: '/',
+                            component: Layout,
+                            redirect: '/index',
+                            children: [{
+                                path: 'index',
+                                name: '',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                meta: { title: '首页', icon: 'home' }
+                            }]
+                        },
+
+
+                    ]
+                    // 404 page must be placed at the end !!!
+                let footer = {
+                    path: '*',
+                    redirect: '/404',
+                    hidden: true
+                }
+                header[2] = arrayList[0]
+                arrayList.unshift(header[1])
+                arrayList.unshift(header[0])
+                arrayList.push(footer)
+                router.options.routes = arrayList
+                state.app.routes = router.options.routes
+
+                router.addRoutes(arrayList)
+
+            }).catch(error => {
+                reject(error)
+            })
+            getInfo2().then(response => {
+                commit('SET_NICKNAME', data.user.nickName)
+            })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 224 - 0
.history/src/store/index_20220614161344.js

@@ -0,0 +1,224 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getInfo2 } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getInfo() {
+        return new Promise((resolve, reject) => {
+            getInfo().then(response => {
+                let data = response.data
+                var arrayList = [];
+                for (let i = 0; i < data.length; i++) {
+                    arrayList.push({
+                        path: (data[i].path).slice(1, 8),
+                        component: Layout,
+                        redirect: (data[i].path).slice(1, 8),
+                        name: "",
+                        meta: {
+                            title: data[i].meta.title,
+                            icon: data[i].meta.icon
+                        },
+                        children: []
+                    })
+                    for (let j = 0; j < data[i].children.length; j++) {
+                        var new_response = data[i].children[j].meta
+                        var url = data[i].children[j].path
+                        arrayList[i].children.push({
+                            path: url,
+                            name: '',
+                            component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                            meta: {
+                                title: new_response.title,
+                                icon: new_response.icon
+                            }
+
+                        })
+                    }
+                }
+                var header = [{
+                            path: '/index',
+                            component: () =>
+                                import ('@/views/index/index'),
+                            hidden: true,
+                        },
+                        {
+                            path: '/',
+                            component: Layout,
+                            redirect: '/index',
+                            children: [{
+                                path: 'index',
+                                name: '',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                meta: { title: '首页', icon: 'home' }
+                            }]
+                        },
+
+
+                    ]
+                    // 404 page must be placed at the end !!!
+                let footer = {
+                    path: '*',
+                    redirect: '/404',
+                    hidden: true
+                }
+                header[2] = arrayList[0]
+                arrayList.unshift(header[1])
+                arrayList.unshift(header[0])
+                arrayList.push(footer)
+                router.options.routes = arrayList
+                state.app.routes = router.options.routes
+
+                router.addRoutes(arrayList)
+
+            }).catch(error => {
+                reject(error)
+            })
+            getInfo2().then(response => {
+                commit('SET_NICKNAME', data.user.nickName)
+            })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 224 - 0
.history/src/store/index_20220614164402.js

@@ -0,0 +1,224 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getInfo2 } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getInfo() {
+        return new Promise((resolve, reject) => {
+            getInfo().then(response => {
+                let data = response.data
+                var arrayList = [];
+                for (let i = 0; i < data.length; i++) {
+                    arrayList.push({
+                        path: (data[i].path).slice(1, 8),
+                        component: Layout,
+                        redirect: (data[i].path).slice(1, 8),
+                        name: "",
+                        meta: {
+                            title: data[i].meta.title,
+                            icon: data[i].meta.icon
+                        },
+                        children: []
+                    })
+                    for (let j = 0; j < data[i].children.length; j++) {
+                        var new_response = data[i].children[j].meta
+                        var url = data[i].children[j].path
+                        arrayList[i].children.push({
+                            path: url,
+                            name: '',
+                            component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                            meta: {
+                                title: new_response.title,
+                                icon: new_response.icon
+                            }
+
+                        })
+                    }
+                }
+                var header = [{
+                            path: '/index',
+                            component: () =>
+                                import ('@/views/index/index'),
+                            hidden: true,
+                        },
+                        {
+                            path: '/',
+                            component: Layout,
+                            redirect: '/index',
+                            children: [{
+                                path: 'index',
+                                name: '',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                meta: { title: '首页', icon: 'home' }
+                            }]
+                        },
+
+
+                    ]
+                    // 404 page must be placed at the end !!!
+                let footer = {
+                    path: '*',
+                    redirect: '/404',
+                    hidden: true
+                }
+                header[2] = arrayList[0]
+                arrayList.unshift(header[1])
+                arrayList.unshift(header[0])
+                arrayList.push(footer)
+                router.options.routes = arrayList
+                state.app.routes = router.options.routes
+
+                router.addRoutes(arrayList)
+
+            }).catch(error => {
+                reject(error)
+            })
+            getInfo2().then(response => {
+                commit('SET_NICKNAME', response.data.user.nickName)
+            })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 225 - 0
.history/src/store/index_20220614164426.js

@@ -0,0 +1,225 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getInfo2 } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getInfo() {
+        return new Promise((resolve, reject) => {
+            getInfo().then(response => {
+                let data = response.data
+                var arrayList = [];
+                for (let i = 0; i < data.length; i++) {
+                    arrayList.push({
+                        path: (data[i].path).slice(1, 8),
+                        component: Layout,
+                        redirect: (data[i].path).slice(1, 8),
+                        name: "",
+                        meta: {
+                            title: data[i].meta.title,
+                            icon: data[i].meta.icon
+                        },
+                        children: []
+                    })
+                    for (let j = 0; j < data[i].children.length; j++) {
+                        var new_response = data[i].children[j].meta
+                        var url = data[i].children[j].path
+                        arrayList[i].children.push({
+                            path: url,
+                            name: '',
+                            component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                            meta: {
+                                title: new_response.title,
+                                icon: new_response.icon
+                            }
+
+                        })
+                    }
+                }
+                var header = [{
+                            path: '/index',
+                            component: () =>
+                                import ('@/views/index/index'),
+                            hidden: true,
+                        },
+                        {
+                            path: '/',
+                            component: Layout,
+                            redirect: '/index',
+                            children: [{
+                                path: 'index',
+                                name: '',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                meta: { title: '首页', icon: 'home' }
+                            }]
+                        },
+
+
+                    ]
+                    // 404 page must be placed at the end !!!
+                let footer = {
+                    path: '*',
+                    redirect: '/404',
+                    hidden: true
+                }
+                header[2] = arrayList[0]
+                arrayList.unshift(header[1])
+                arrayList.unshift(header[0])
+                arrayList.push(footer)
+                router.options.routes = arrayList
+                state.app.routes = router.options.routes
+
+                router.addRoutes(arrayList)
+
+            }).catch(error => {
+                reject(error)
+            })
+            getInfo2().then(response => {
+                console.log(response.data.user)
+                commit('SET_NICKNAME', response.data.user.nickName)
+            })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 225 - 0
.history/src/store/index_20220614164441.js

@@ -0,0 +1,225 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getInfo2 } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getInfo() {
+        return new Promise((resolve, reject) => {
+            getInfo().then(response => {
+                let data = response.data
+                var arrayList = [];
+                for (let i = 0; i < data.length; i++) {
+                    arrayList.push({
+                        path: (data[i].path).slice(1, 8),
+                        component: Layout,
+                        redirect: (data[i].path).slice(1, 8),
+                        name: "",
+                        meta: {
+                            title: data[i].meta.title,
+                            icon: data[i].meta.icon
+                        },
+                        children: []
+                    })
+                    for (let j = 0; j < data[i].children.length; j++) {
+                        var new_response = data[i].children[j].meta
+                        var url = data[i].children[j].path
+                        arrayList[i].children.push({
+                            path: url,
+                            name: '',
+                            component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                            meta: {
+                                title: new_response.title,
+                                icon: new_response.icon
+                            }
+
+                        })
+                    }
+                }
+                var header = [{
+                            path: '/index',
+                            component: () =>
+                                import ('@/views/index/index'),
+                            hidden: true,
+                        },
+                        {
+                            path: '/',
+                            component: Layout,
+                            redirect: '/index',
+                            children: [{
+                                path: 'index',
+                                name: '',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                meta: { title: '首页', icon: 'home' }
+                            }]
+                        },
+
+
+                    ]
+                    // 404 page must be placed at the end !!!
+                let footer = {
+                    path: '*',
+                    redirect: '/404',
+                    hidden: true
+                }
+                header[2] = arrayList[0]
+                arrayList.unshift(header[1])
+                arrayList.unshift(header[0])
+                arrayList.push(footer)
+                router.options.routes = arrayList
+                state.app.routes = router.options.routes
+
+                router.addRoutes(arrayList)
+
+            }).catch(error => {
+                reject(error)
+            })
+            getInfo2().then(response => {
+                console.log(response.data.user.nickName)
+                commit('SET_NICKNAME', response.data.user.nickName)
+            })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 224 - 0
.history/src/store/index_20220614164513.js

@@ -0,0 +1,224 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getInfo2 } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getInfo() {
+        return new Promise((resolve, reject) => {
+            getInfo().then(response => {
+                let data = response.data
+                var arrayList = [];
+                for (let i = 0; i < data.length; i++) {
+                    arrayList.push({
+                        path: (data[i].path).slice(1, 8),
+                        component: Layout,
+                        redirect: (data[i].path).slice(1, 8),
+                        name: "",
+                        meta: {
+                            title: data[i].meta.title,
+                            icon: data[i].meta.icon
+                        },
+                        children: []
+                    })
+                    for (let j = 0; j < data[i].children.length; j++) {
+                        var new_response = data[i].children[j].meta
+                        var url = data[i].children[j].path
+                        arrayList[i].children.push({
+                            path: url,
+                            name: '',
+                            component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                            meta: {
+                                title: new_response.title,
+                                icon: new_response.icon
+                            }
+
+                        })
+                    }
+                }
+                var header = [{
+                            path: '/index',
+                            component: () =>
+                                import ('@/views/index/index'),
+                            hidden: true,
+                        },
+                        {
+                            path: '/',
+                            component: Layout,
+                            redirect: '/index',
+                            children: [{
+                                path: 'index',
+                                name: '',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                meta: { title: '首页', icon: 'home' }
+                            }]
+                        },
+
+
+                    ]
+                    // 404 page must be placed at the end !!!
+                let footer = {
+                    path: '*',
+                    redirect: '/404',
+                    hidden: true
+                }
+                header[2] = arrayList[0]
+                arrayList.unshift(header[1])
+                arrayList.unshift(header[0])
+                arrayList.push(footer)
+                router.options.routes = arrayList
+                state.app.routes = router.options.routes
+
+                router.addRoutes(arrayList)
+
+            }).catch(error => {
+                reject(error)
+            })
+            getInfo2().then(response => {
+                commit('SET_NICKNAME', response.data.user.nickName)
+            })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 225 - 0
.history/src/store/index_20220614164713.js

@@ -0,0 +1,225 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getInfo2 } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+console.log(state)
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getInfo() {
+        return new Promise((resolve, reject) => {
+            getInfo().then(response => {
+                let data = response.data
+                var arrayList = [];
+                for (let i = 0; i < data.length; i++) {
+                    arrayList.push({
+                        path: (data[i].path).slice(1, 8),
+                        component: Layout,
+                        redirect: (data[i].path).slice(1, 8),
+                        name: "",
+                        meta: {
+                            title: data[i].meta.title,
+                            icon: data[i].meta.icon
+                        },
+                        children: []
+                    })
+                    for (let j = 0; j < data[i].children.length; j++) {
+                        var new_response = data[i].children[j].meta
+                        var url = data[i].children[j].path
+                        arrayList[i].children.push({
+                            path: url,
+                            name: '',
+                            component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                            meta: {
+                                title: new_response.title,
+                                icon: new_response.icon
+                            }
+
+                        })
+                    }
+                }
+                var header = [{
+                            path: '/index',
+                            component: () =>
+                                import ('@/views/index/index'),
+                            hidden: true,
+                        },
+                        {
+                            path: '/',
+                            component: Layout,
+                            redirect: '/index',
+                            children: [{
+                                path: 'index',
+                                name: '',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                meta: { title: '首页', icon: 'home' }
+                            }]
+                        },
+
+
+                    ]
+                    // 404 page must be placed at the end !!!
+                let footer = {
+                    path: '*',
+                    redirect: '/404',
+                    hidden: true
+                }
+                header[2] = arrayList[0]
+                arrayList.unshift(header[1])
+                arrayList.unshift(header[0])
+                arrayList.push(footer)
+                router.options.routes = arrayList
+                state.app.routes = router.options.routes
+
+                router.addRoutes(arrayList)
+
+            }).catch(error => {
+                reject(error)
+            })
+            getInfo2().then(response => {
+                commit('SET_NICKNAME', response.data.user.nickName)
+            })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 224 - 0
.history/src/store/index_20220614164756.js

@@ -0,0 +1,224 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getInfo2 } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getInfo() {
+        return new Promise((resolve, reject) => {
+            getInfo().then(response => {
+                let data = response.data
+                var arrayList = [];
+                for (let i = 0; i < data.length; i++) {
+                    arrayList.push({
+                        path: (data[i].path).slice(1, 8),
+                        component: Layout,
+                        redirect: (data[i].path).slice(1, 8),
+                        name: "",
+                        meta: {
+                            title: data[i].meta.title,
+                            icon: data[i].meta.icon
+                        },
+                        children: []
+                    })
+                    for (let j = 0; j < data[i].children.length; j++) {
+                        var new_response = data[i].children[j].meta
+                        var url = data[i].children[j].path
+                        arrayList[i].children.push({
+                            path: url,
+                            name: '',
+                            component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                            meta: {
+                                title: new_response.title,
+                                icon: new_response.icon
+                            }
+
+                        })
+                    }
+                }
+                var header = [{
+                            path: '/index',
+                            component: () =>
+                                import ('@/views/index/index'),
+                            hidden: true,
+                        },
+                        {
+                            path: '/',
+                            component: Layout,
+                            redirect: '/index',
+                            children: [{
+                                path: 'index',
+                                name: '',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                meta: { title: '首页', icon: 'home' }
+                            }]
+                        },
+
+
+                    ]
+                    // 404 page must be placed at the end !!!
+                let footer = {
+                    path: '*',
+                    redirect: '/404',
+                    hidden: true
+                }
+                header[2] = arrayList[0]
+                arrayList.unshift(header[1])
+                arrayList.unshift(header[0])
+                arrayList.push(footer)
+                router.options.routes = arrayList
+                state.app.routes = router.options.routes
+
+                router.addRoutes(arrayList)
+
+            }).catch(error => {
+                reject(error)
+            })
+            getInfo2().then(response => {
+                commit('SET_NICKNAME', response.data.user.nickName)
+            })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 225 - 0
.history/src/store/index_20220614164812.js

@@ -0,0 +1,225 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getInfo2 } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        console.log(state, nickName)
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getInfo() {
+        return new Promise((resolve, reject) => {
+            getInfo().then(response => {
+                let data = response.data
+                var arrayList = [];
+                for (let i = 0; i < data.length; i++) {
+                    arrayList.push({
+                        path: (data[i].path).slice(1, 8),
+                        component: Layout,
+                        redirect: (data[i].path).slice(1, 8),
+                        name: "",
+                        meta: {
+                            title: data[i].meta.title,
+                            icon: data[i].meta.icon
+                        },
+                        children: []
+                    })
+                    for (let j = 0; j < data[i].children.length; j++) {
+                        var new_response = data[i].children[j].meta
+                        var url = data[i].children[j].path
+                        arrayList[i].children.push({
+                            path: url,
+                            name: '',
+                            component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                            meta: {
+                                title: new_response.title,
+                                icon: new_response.icon
+                            }
+
+                        })
+                    }
+                }
+                var header = [{
+                            path: '/index',
+                            component: () =>
+                                import ('@/views/index/index'),
+                            hidden: true,
+                        },
+                        {
+                            path: '/',
+                            component: Layout,
+                            redirect: '/index',
+                            children: [{
+                                path: 'index',
+                                name: '',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                meta: { title: '首页', icon: 'home' }
+                            }]
+                        },
+
+
+                    ]
+                    // 404 page must be placed at the end !!!
+                let footer = {
+                    path: '*',
+                    redirect: '/404',
+                    hidden: true
+                }
+                header[2] = arrayList[0]
+                arrayList.unshift(header[1])
+                arrayList.unshift(header[0])
+                arrayList.push(footer)
+                router.options.routes = arrayList
+                state.app.routes = router.options.routes
+
+                router.addRoutes(arrayList)
+
+            }).catch(error => {
+                reject(error)
+            })
+            getInfo2().then(response => {
+                commit('SET_NICKNAME', response.data.user.nickName)
+            })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 225 - 0
.history/src/store/index_20220614164841.js

@@ -0,0 +1,225 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getInfo2 } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        // console.log(state, nickName)
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getInfo() {
+        return new Promise((resolve, reject) => {
+            getInfo().then(response => {
+                let data = response.data
+                var arrayList = [];
+                for (let i = 0; i < data.length; i++) {
+                    arrayList.push({
+                        path: (data[i].path).slice(1, 8),
+                        component: Layout,
+                        redirect: (data[i].path).slice(1, 8),
+                        name: "",
+                        meta: {
+                            title: data[i].meta.title,
+                            icon: data[i].meta.icon
+                        },
+                        children: []
+                    })
+                    for (let j = 0; j < data[i].children.length; j++) {
+                        var new_response = data[i].children[j].meta
+                        var url = data[i].children[j].path
+                        arrayList[i].children.push({
+                            path: url,
+                            name: '',
+                            component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                            meta: {
+                                title: new_response.title,
+                                icon: new_response.icon
+                            }
+
+                        })
+                    }
+                }
+                var header = [{
+                            path: '/index',
+                            component: () =>
+                                import ('@/views/index/index'),
+                            hidden: true,
+                        },
+                        {
+                            path: '/',
+                            component: Layout,
+                            redirect: '/index',
+                            children: [{
+                                path: 'index',
+                                name: '',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                meta: { title: '首页', icon: 'home' }
+                            }]
+                        },
+
+
+                    ]
+                    // 404 page must be placed at the end !!!
+                let footer = {
+                    path: '*',
+                    redirect: '/404',
+                    hidden: true
+                }
+                header[2] = arrayList[0]
+                arrayList.unshift(header[1])
+                arrayList.unshift(header[0])
+                arrayList.push(footer)
+                router.options.routes = arrayList
+                state.app.routes = router.options.routes
+
+                router.addRoutes(arrayList)
+
+            }).catch(error => {
+                reject(error)
+            })
+            getInfo2().then(response => {
+                commit('SET_NICKNAME', response.data.user.nickName)
+            })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 225 - 0
.history/src/store/index_20220614164955.js

@@ -0,0 +1,225 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getInfo2 } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        // console.log(state, nickName)
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getInfo() {
+        return new Promise((resolve, reject) => {
+            getInfo().then(response => {
+                let data = response.data
+                var arrayList = [];
+                for (let i = 0; i < data.length; i++) {
+                    arrayList.push({
+                        path: (data[i].path).slice(1, 8),
+                        component: Layout,
+                        redirect: (data[i].path).slice(1, 8),
+                        name: "",
+                        meta: {
+                            title: data[i].meta.title,
+                            icon: data[i].meta.icon
+                        },
+                        children: []
+                    })
+                    for (let j = 0; j < data[i].children.length; j++) {
+                        var new_response = data[i].children[j].meta
+                        var url = data[i].children[j].path
+                        arrayList[i].children.push({
+                            path: url,
+                            name: '',
+                            component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                            meta: {
+                                title: new_response.title,
+                                icon: new_response.icon
+                            }
+
+                        })
+                    }
+                }
+                var header = [{
+                            path: '/index',
+                            component: () =>
+                                import ('@/views/index/index'),
+                            hidden: true,
+                        },
+                        {
+                            path: '/',
+                            component: Layout,
+                            redirect: '/index',
+                            children: [{
+                                path: 'index',
+                                name: '',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                meta: { title: '首页', icon: 'home' }
+                            }]
+                        },
+
+
+                    ]
+                    // 404 page must be placed at the end !!!
+                let footer = {
+                    path: '*',
+                    redirect: '/404',
+                    hidden: true
+                }
+                header[2] = arrayList[0]
+                arrayList.unshift(header[1])
+                arrayList.unshift(header[0])
+                arrayList.push(footer)
+                router.options.routes = arrayList
+                state.app.routes = router.options.routes
+
+                router.addRoutes(arrayList)
+
+            }).catch(error => {
+                reject(error)
+            })
+            getInfo2().then(response => {
+                commit('SET_NICKNAME', response.data.user.nickName)
+            })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 225 - 0
.history/src/store/index_20220614165042.js

@@ -0,0 +1,225 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getInfo2 } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        // console.log(state, nickName)
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getInfo({ commit }) {
+        return new Promise((resolve, reject) => {
+            getInfo().then(response => {
+                let data = response.data
+                var arrayList = [];
+                for (let i = 0; i < data.length; i++) {
+                    arrayList.push({
+                        path: (data[i].path).slice(1, 8),
+                        component: Layout,
+                        redirect: (data[i].path).slice(1, 8),
+                        name: "",
+                        meta: {
+                            title: data[i].meta.title,
+                            icon: data[i].meta.icon
+                        },
+                        children: []
+                    })
+                    for (let j = 0; j < data[i].children.length; j++) {
+                        var new_response = data[i].children[j].meta
+                        var url = data[i].children[j].path
+                        arrayList[i].children.push({
+                            path: url,
+                            name: '',
+                            component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                            meta: {
+                                title: new_response.title,
+                                icon: new_response.icon
+                            }
+
+                        })
+                    }
+                }
+                var header = [{
+                            path: '/index',
+                            component: () =>
+                                import ('@/views/index/index'),
+                            hidden: true,
+                        },
+                        {
+                            path: '/',
+                            component: Layout,
+                            redirect: '/index',
+                            children: [{
+                                path: 'index',
+                                name: '',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                meta: { title: '首页', icon: 'home' }
+                            }]
+                        },
+
+
+                    ]
+                    // 404 page must be placed at the end !!!
+                let footer = {
+                    path: '*',
+                    redirect: '/404',
+                    hidden: true
+                }
+                header[2] = arrayList[0]
+                arrayList.unshift(header[1])
+                arrayList.unshift(header[0])
+                arrayList.push(footer)
+                router.options.routes = arrayList
+                state.app.routes = router.options.routes
+
+                router.addRoutes(arrayList)
+
+            }).catch(error => {
+                reject(error)
+            })
+            getInfo2().then(response => {
+                commit('SET_NICKNAME', response.data.user.nickName)
+            })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 225 - 0
.history/src/store/index_20220614165149.js

@@ -0,0 +1,225 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getInfo2 } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        // console.log(state, nickName)
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getInfo({ commit }) {
+        return new Promise((resolve, reject) => {
+            getInfo().then(response => {
+                let data = response.data
+                var arrayList = [];
+                for (let i = 0; i < data.length; i++) {
+                    arrayList.push({
+                        path: (data[i].path).slice(1, 8),
+                        component: Layout,
+                        redirect: (data[i].path).slice(1, 8),
+                        name: "",
+                        meta: {
+                            title: data[i].meta.title,
+                            icon: data[i].meta.icon
+                        },
+                        children: []
+                    })
+                    for (let j = 0; j < data[i].children.length; j++) {
+                        var new_response = data[i].children[j].meta
+                        var url = data[i].children[j].path
+                        arrayList[i].children.push({
+                            path: url,
+                            name: '',
+                            component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                            meta: {
+                                title: new_response.title,
+                                icon: new_response.icon
+                            }
+
+                        })
+                    }
+                }
+                var header = [{
+                            path: '/index',
+                            component: () =>
+                                import ('@/views/index/index'),
+                            hidden: true,
+                        },
+                        {
+                            path: '/',
+                            component: Layout,
+                            redirect: '/index',
+                            children: [{
+                                path: 'index',
+                                name: '',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                meta: { title: '首页', icon: 'home' }
+                            }]
+                        },
+
+
+                    ]
+                    // 404 page must be placed at the end !!!
+                let footer = {
+                    path: '*',
+                    redirect: '/404',
+                    hidden: true
+                }
+                header[2] = arrayList[0]
+                arrayList.unshift(header[1])
+                arrayList.unshift(header[0])
+                arrayList.push(footer)
+                router.options.routes = arrayList
+                state.app.routes = router.options.routes
+
+                router.addRoutes(arrayList)
+
+            }).catch(error => {
+                reject(error)
+            })
+            getInfo2().then(response => {
+                commit('SET_NICKNAME', response.data.user.nickName)
+            })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 224 - 0
.history/src/store/index_20220614165159.js

@@ -0,0 +1,224 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import { login, loginERP, logout, getInfo, getInfo2 } from '@/api/user'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+import router from '../router/index'
+/* Layout */
+import Layout from '@/layout'
+
+Vue.use(Vuex)
+
+
+const getDefaultState = () => {
+    return {
+        token: getToken(),
+        name: '',
+        avatar: '',
+        nickName: '',
+        routes: []
+    }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+    RESET_STATE: (state) => {
+        Object.assign(state, getDefaultState())
+    },
+
+    SET_TOKEN: (state, token) => {
+        state.token = token
+    },
+    SET_NAME: (state, name) => {
+        state.name = name
+    },
+    SET_AVATAR: (state, avatar) => {
+        state.avatar = avatar
+    },
+    SET_NICKNAME: (state, nickName) => {
+        state.nickName = nickName
+    },
+    SET_ROLES: (state, roles) => {
+        state.roles = roles
+    },
+    SET_PERMISSIONS: (state, permissions) => {
+        state.permissions = permissions
+    },
+    // 移除用户
+    REMOVE: (state) => {
+        state.name = ''
+        state.addRoutes = []
+            //退出后,改变还原静态路由
+        removeArrayData(constantRoutes)
+    },
+    ADD_ROUTES: (state, routes) => {
+        state.addRoutes = routes
+        routes.forEach((i, index) => {
+            // 从第3+index个位置插入
+            // constantRoutes.splice(3 + index, 0, i)
+        })
+    },
+    SET_MENULIST: (state, menuList) => {
+        state.menuList = menuList
+    }
+}
+
+const actions = {
+    // user login
+    login({ commit }, userInfo) {
+        const { username, password, code, uuid } = userInfo
+        return new Promise((resolve, reject) => {
+            login({ username: username.trim(), passWord: password, code: code, uuid: uuid }).then(response => {
+                if (response.status == "SUCCESS") {
+                    commit('SET_TOKEN', response.data)
+                    setToken(response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // 登录PER
+    LoginERP({ commit }, userInfo) {
+        return new Promise((resolve, reject) => {
+            loginERP({ username: userInfo.username, password: userInfo.password }).then(response => {
+                if (response.status == "SUCCESS") {
+                    setToken(response.data)
+                    commit('SET_TOKEN', response.data)
+                    resolve(response.data)
+                } else {
+                    reject(response.msg)
+                }
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    // get user info
+    getInfo({ commit }) {
+        return new Promise((resolve, reject) => {
+            getInfo().then(response => {
+                let data = response.data
+                var arrayList = [];
+                for (let i = 0; i < data.length; i++) {
+                    arrayList.push({
+                        path: (data[i].path).slice(1, 8),
+                        component: Layout,
+                        redirect: (data[i].path).slice(1, 8),
+                        name: "",
+                        meta: {
+                            title: data[i].meta.title,
+                            icon: data[i].meta.icon
+                        },
+                        children: []
+                    })
+                    for (let j = 0; j < data[i].children.length; j++) {
+                        var new_response = data[i].children[j].meta
+                        var url = data[i].children[j].path
+                        arrayList[i].children.push({
+                            path: url,
+                            name: '',
+                            component: (resolve) => require([`@/views${data[i].children[j].path}`], resolve),
+                            meta: {
+                                title: new_response.title,
+                                icon: new_response.icon
+                            }
+
+                        })
+                    }
+                }
+                var header = [{
+                            path: '/index',
+                            component: () =>
+                                import ('@/views/index/index'),
+                            hidden: true,
+                        },
+                        {
+                            path: '/',
+                            component: Layout,
+                            redirect: '/index',
+                            children: [{
+                                path: 'index',
+                                name: '',
+                                component: () =>
+                                    import ('@/views/index/index'),
+                                meta: { title: '首页', icon: 'home' }
+                            }]
+                        },
+
+
+                    ]
+                    // 404 page must be placed at the end !!!
+                let footer = {
+                    path: '*',
+                    redirect: '/404',
+                    hidden: true
+                }
+                header[2] = arrayList[0]
+                arrayList.unshift(header[1])
+                arrayList.unshift(header[0])
+                arrayList.push(footer)
+                router.options.routes = arrayList
+                state.app.routes = router.options.routes
+
+                router.addRoutes(arrayList)
+
+            }).catch(error => {
+                reject(error)
+            })
+            getInfo2().then(response => {
+                commit('SET_NICKNAME', response.data.user.nickName)
+            })
+        })
+    },
+
+    // user logout
+    logout({ commit, state }) {
+        return new Promise((resolve, reject) => {
+            logout().then((response) => {
+                removeToken() // must remove  token  first
+                    // resetRouter()
+                commit('RESET_STATE')
+
+                commit('SET_TOKEN', '')
+                commit('SET_ROLES', [])
+                commit('SET_PERMISSIONS', [])
+                removeToken()
+                resolve()
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+
+    // remove token
+    resetToken({ commit }) {
+        return new Promise(resolve => {
+            removeToken() // must remove  token  first
+            commit('RESET_STATE')
+            resolve()
+        })
+    }
+}
+
+const store = new Vuex.Store({
+    modules: {
+        app,
+        settings,
+        user
+    },
+    getters,
+    actions,
+    state,
+    mutations,
+    router
+})
+
+export default store

+ 72 - 0
.history/src/utils/request_20220614144342.js

@@ -0,0 +1,72 @@
+/*
+ * @Author: wt 1241351815@qq.com
+ * @Date: 2022-04-25 10:21:19
+ * @LastEditors: wt 1241351815@qq.com
+ * @LastEditTime: 2022-05-12 18:19:11
+ * @FilePath: \securityHtml\src\utils\request.js
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+import axios from 'axios'
+import { MessageBox, Message } from 'element-ui'
+import store from '@/store'
+import { getToken } from '@/utils/auth'
+
+let baseURL = window.PLATFROM_CONFIG.baseUrl
+axios.defaults.headers['Content-Type'] = 'application/json;multipart/form-data;charset=utf-8'
+const service = axios.create({
+    baseURL: baseURL, // url = base url + request url
+    timeout: 10000, // request timeout
+    // withCredentials:true,
+
+})
+
+// request interceptor
+service.interceptors.request.use(config => {
+        // 是否需要设置 token
+        // const isToken = (config.headers || {}).isToken === false
+        if (getToken()) {
+            config.headers['Authorization'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
+        }
+        if (config.method == 'get') {
+            let ext_str = config.url.indexOf('?') == -1 ? '?' : '&';
+            let obj_val = '';
+            for (let k in config.data) {
+                obj_val += k + "=" + config.data[k] + "&";
+            }
+            config.url += ext_str + obj_val;
+        }
+        return config
+    },
+    error => {
+        // do something with request error
+        return Promise.reject(error)
+    }
+)
+
+// response interceptor
+service.interceptors.response.use(response => {
+    if (response.data.status === 'SUCCESS') {
+        return response.data;
+    }
+}, error => {
+    if (error.response.data.status == "ERROR" && error.response.data.code == "401") {
+        MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
+            confirmButtonText: '重新登录',
+            cancelButtonText: '取消',
+            type: 'warning'
+        }).then(() => {
+            store.dispatch('logout').then(() => {
+                location.href = '/#/login';
+            })
+        }).catch(() => {});
+    } else {
+        Message({
+            showClose: true,
+            message: (error.response.data.msg).split(":")[1],
+            type: 'error'
+        });
+        return {}
+    }
+})
+
+export default service

+ 422 - 0
.history/src/views/MochaITOM/crew/index_20220607153718.vue

@@ -0,0 +1,422 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" >
+      <el-form-item label="班组名称:" prop="name">
+        <el-input
+          v-model.trim="queryParams.name"
+          placeholder="请输入班组名称"
+          clearable
+          size="small"
+          style="width: 160px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="责任人:" prop="dutyName">
+        <el-select v-model="queryParams.dutyName"   placeholder="请选择责任人" style="width: 140px" >
+          <el-option
+            v-for="item in zrr"
+            :key="item.name"
+            :label="item.name"
+            :value="item.name"
+            clearable
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button type="primary" icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        <el-button
+          type="success"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+        >新增</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-table v-loading="loading" :data="adminList" :max-height="tableHeight">
+      <el-table-column label="班组名称" align="center" prop="name"  show-overflow-tooltip />
+      <el-table-column label="责任人" align="center" prop="dutyName"  show-overflow-tooltip />
+      <el-table-column label="联系方式" align="center" prop="dutyPhone"  show-overflow-tooltip />
+      <el-table-column label="创建时间" align="center" prop="createTime"  show-overflow-tooltip />
+      <el-table-column label="创建人" align="center" prop="createBy"  show-overflow-tooltip />
+      <el-table-column label="修改时间" align="center" prop="updateTime"  show-overflow-tooltip />
+      <el-table-column label="修改人" align="center" prop="updateBy"  show-overflow-tooltip />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" >
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 修改、新增对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body :before-close="cancel" :close-on-click-modal="false">
+      <el-form ref="form" :model="form" :rules="rules" label-width="auto" >
+        <el-row :gutter="20">
+          <el-col :span="12" >
+            <el-form-item label="班组名称" prop="name">
+              <el-input v-model="form.name" style="width: 160px" placeholder="请填写班组名称" @input="onInput()" maxlength="15" show-word-limit />
+            </el-form-item>
+          </el-col>
+          <div class="btn" style="text-align: left;margin:0 auto 30px;float:right">
+            <el-button type="primary" icon="el-icon-plus" size="mini" @click="addItem">新增人员</el-button>
+          </div>
+          <el-table :data="list" border   stripe height="200" :rules="rules2" >
+            <el-table-column label="序号" width="80px" align='center'>
+              <template slot-scope="scope">
+                <span>{{ scope.$index +1 }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column prop="switch" label="负任人" align='center'>
+              <template slot-scope="scope">
+                <el-switch
+                  v-model="scope.row.switch"
+                  active-color="#13ce66"
+                  inactive-color="#ff4949"
+                  @change="handleStatusChange(scope.row,scope.$index)"
+                ></el-switch>
+              </template>
+            </el-table-column>
+            <el-table-column prop="name" label="姓名" align='center'>
+              <template slot-scope="scope">
+                <span v-if="!scope.row.isEgdit">{{scope.row.name}}</span>
+                <el-input v-if="scope.row.isEgdit" v-model="scope.row.name"></el-input>
+              </template>
+            </el-table-column>
+             <el-table-column prop="phone" label="手机号" align='center'>
+              <template slot-scope="scope">
+                <span v-if="!scope.row.isEgdit">{{scope.row.phone}}</span>
+                <el-input v-if="scope.row.isEgdit" v-model="scope.row.phone"  maxlength="11" ></el-input>
+              </template>
+            </el-table-column>
+            <el-table-column fixed="right" label="操作" align='center' >
+              <template slot-scope="scope">
+                <el-button v-if="!scope.row.isEgdit" type="primary" size="small" @click='edit(scope.$index,scope.row)' icon="el-icon-edit" plain></el-button>
+                <el-button v-if="scope.row.isEgdit" type="success" size="small" @click='editSuccess(scope.$index,scope.row)' icon="el-icon-check" plain></el-button>
+                <el-button @click.native.prevent="deleteItem(scope.$index, list)" type="danger" size="small" icon="el-icon-delete" plain></el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+    <el-pagination
+      style="bottom:0px"
+      background
+      @current-change="handleCurrentChange1"
+      :page-sizes="[10, 15, 20, 30]"
+      @size-change="handleSizeChange1"
+      :current-page="queryParams.pageNo"
+      :page-size="queryParams.pageSize"
+      layout="sizes,prev, pager, next"
+      :total="totalCount1"
+    >
+    </el-pagination>
+    <a href="" download="" id="xz" style="position: absolute;z-index: -1;opacity: 0;"></a>
+  </div>
+</template>
+<script>
+import { addDevopsTeam, delDevopsTeam, updateDevopsTeam, getDevopsTeam, getTD } from "@/api/MochaITOM/crew";
+export default {
+  name: "DevopsTeam",
+  data() {
+    return {
+      exportLoading:false,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      totalCount1:undefined,
+      totalCount2:undefined,
+      // 参数表格数据
+      adminList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        current: 1,
+        size: 15,
+        name: undefined,
+        dutyName:undefined,
+        pageNo:1,
+        pageSize:15,
+      },
+      // 查询参数
+      queryParams2: {
+        current: 1,
+        size: 15,
+        pageNo:1,
+        pageSize:15,
+      },
+      tableHeight:undefined,
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        name: [
+          { required: true, message: "班组名称不能为空",  trigger: "blur"  }
+        ],
+      },
+      rules2: {
+        
+        name: [
+          { required: true, message: "姓名不能为空",  trigger: "blur"  }
+        ],
+        phone: [
+          { required: true, message: "手机号不能为空",  trigger: "blur"  },
+          {
+            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
+            message: "请输入正确的手机号码",
+            trigger: "blur"
+          }
+        ],
+
+      },
+      list: [
+        {
+        name:undefined,
+        phone:undefined,
+        switch:false,
+        label:false,
+        userId:1,
+        },
+      ],
+      //责任人
+      zrr:[]
+    };
+  },
+  created() {
+    this.getList();//初始化table
+  },
+  mounted() {
+    // table高度
+    if(window.innerWidth <1920){
+      this.tableHeight = window.innerHeight - 300
+    }else{
+      this.tableHeight = window.innerHeight - 295
+    }
+    // 监听窗口大小变化
+    let self = this;
+    window.onresize = function() {
+      self.tableHeight = window.innerHeight - 300
+    }
+  },
+  methods: {
+    //分页查询
+    handleCurrentChange1(val) {
+      this.queryParams.pageNo = val;
+      this.getList();
+    },
+    //分页查询
+    handleSizeChange1(val) {
+      this.queryParams.pageSize = val;
+      this.getList();
+    },
+    //分页查询
+    handleCurrentChange2(val) {
+      this.queryParams2.pageNo = val;
+      this.getList();
+    },
+    //分页查询
+    handleSizeChange2(val) {
+      this.queryParams2.pageSize = val;
+      this.getList();
+    },
+    //新增数据
+    addItem() {
+      let item = {
+        name:undefined,
+        phone:undefined,
+        switch:false,
+        label:1,
+        userId:1,
+      }
+      this.list.push(item)
+    },
+    //删除数据
+    deleteItem(index, list) {
+      list.splice(index, 1);
+    },
+    //编辑数据
+    edit(index, row) {
+      this.$set(row, 'isEgdit', true)
+    },
+    //编辑成功
+    editSuccess(index, row) {
+      this.$set(row, 'isEgdit', false)
+    },
+    handleStatusChange(row,index){
+      if(row.switch === true){
+        row.label = 2
+      }else{
+        row.label = 1
+      }
+      for(let i = 0;i<this.list.length;i++){
+        if(i != index){
+          this.list[i].label = 1
+          this.list[i].switch = 1
+        } 
+      }
+    },
+    //强制el-input刷新
+    onInput(){
+        this.$forceUpdate();
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    //手机号验证
+    testPhone(str) {
+      // const reg = /^1[3|4|5|7|8|6|9][0-9]\d{8}$/;
+      // return reg.test(str);
+    },
+    vaildPhone(value) {
+      if (!this.testPhone(value)) {
+        this.$message.warning("请输入正确的手机号码");
+      }
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.queryParams = {
+        dutyName:undefined,
+        current:1,
+        size:15,
+        pageSize:15,
+        pageNo:1,
+      }
+      // this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 表单重置
+    reset() {
+      this.form = {};
+      // this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.current = 1;
+      this.getList();
+    },
+    /** 查询参数列表 */
+    getList() {
+      this.loading = true;
+      getDevopsTeam(this.queryParams).then(response => {
+        if(response.data.pageList.length>0){
+          this.adminList = response.data.pageList;
+          this.totalCount1 = response.data.totalCount;
+          for(let i=0;i<this.adminList.length;i++){
+            this.zrr[i] = {}
+            this.zrr[i].name = this.adminList[i].dutyName
+          }
+          this.loading = false;
+        }else{
+          this.adminList = []
+          this.loading = false;
+        }
+        
+      });
+    },
+
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      this.title = "修改";
+      this.form = JSON.parse(JSON.stringify(row))
+      this.list = this.form.userIds
+      getTD({teamId:this.form.id,current:1,size:20}).then(res =>{
+        let arr = res.data
+        for(let i = 0;i<arr.length;i++){
+          if(arr[i].label == "1"){
+            arr[i].switch = false
+          }else{
+            arr[i].switch = true
+          }
+        }
+        this.list = arr
+        this.open = true;
+      })
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "新增";
+      this.list = []
+    },
+    /** 提交按钮 */
+    submitForm(row) {
+      this.form.userIds = []
+      this.form.userIds = this.list
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          let arr = this.form.userIds
+          if(arr.length>0){
+            for(let i = 0;i<arr.length;i++){
+              if(!arr[i].name){
+                this.$message.error("姓名不能为空");
+                return
+              }
+              if(!arr[i].phone){
+                this.$message.error("电话不能为空");
+                return
+              }
+            }
+          }
+          this.loading = true
+          if (this.form.id != undefined) {
+            updateDevopsTeam(this.form).then(response => {
+              this.loading = false,
+              this.$message.success("修改成功");
+              this.open = false;
+              this.getList();
+            }).catch(()=>{
+              this.loading = false
+            })
+          } else {
+            addDevopsTeam(this.form).then(response => {
+              this.loading = false
+              if(response.status == "SUCCESS"){
+                this.$message.success("新增成功");
+                this.open = false;
+                this.getList();
+              }
+            })
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delDevopsTeam(ids);
+        }).then(() => {
+          this.getList();
+          this.$message.success("删除成功");
+        }).catch(() => {});
+    },
+  }
+};
+</script>

+ 434 - 0
.history/src/views/MochaITOM/crew/index_20220623132548.vue

@@ -0,0 +1,434 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" >
+      <el-form-item label="班组名称:" prop="name">
+        <el-input
+          v-model.trim="queryParams.name"
+          placeholder="请输入班组名称"
+          clearable
+          size="small"
+          style="width: 160px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="责任人:" prop="dutyName">
+        <el-select v-model="queryParams.dutyName"   placeholder="请选择责任人" style="width: 140px" >
+          <el-option
+            v-for="item in zrr"
+            :key="item.name"
+            :label="item.name"
+            :value="item.name"
+            clearable
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button type="primary" icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        <el-button
+          type="success"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+        >新增</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-table v-loading="loading" :data="adminList" :max-height="tableHeight">
+      <el-table-column label="班组名称" align="center" prop="name"  show-overflow-tooltip />
+      <el-table-column label="责任人" align="center" prop="dutyName"  show-overflow-tooltip />
+      <el-table-column label="联系方式" align="center" prop="dutyPhone"  show-overflow-tooltip />
+      <el-table-column label="创建时间" align="center" prop="createTime"  show-overflow-tooltip />
+      <el-table-column label="创建人" align="center" prop="createBy"  show-overflow-tooltip />
+      <el-table-column label="修改时间" align="center" prop="updateTime"  show-overflow-tooltip />
+      <el-table-column label="修改人" align="center" prop="updateBy"  show-overflow-tooltip />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" >
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 修改、新增对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body :before-close="cancel" :close-on-click-modal="false">
+      <el-form ref="form" :model="form" :rules="rules" label-width="auto" >
+        <el-row :gutter="20">
+          <el-col :span="12" >
+            <el-form-item label="班组名称" prop="name">
+              <el-input v-model="form.name" style="width: 160px" placeholder="请填写班组名称" @input="onInput()" maxlength="15" show-word-limit />
+            </el-form-item>
+          </el-col>
+          <div class="btn" style="text-align: left;margin:0 auto 30px;float:right">
+            <el-button type="primary" icon="el-icon-plus" size="mini" @click="addItem">新增人员</el-button>
+          </div>
+          <el-table :data="list" border   stripe height="200" :rules="rules2" >
+            <el-table-column label="序号" width="80px" align='center'>
+              <template slot-scope="scope">
+                <span>{{ scope.$index +1 }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column prop="switch" label="负任人" align='center'>
+              <template slot-scope="scope">
+                <el-switch
+                  v-model="scope.row.switch"
+                  active-color="#13ce66"
+                  inactive-color="#ff4949"
+                  @change="handleStatusChange(scope.row,scope.$index)"
+                ></el-switch>
+              </template>
+            </el-table-column>
+            <el-table-column prop="name" label="姓名" align='center'>
+              <template slot-scope="scope">
+                <span v-if="!scope.row.isEgdit">{{scope.row.name}}</span>
+                <el-input v-if="scope.row.isEgdit" v-model="scope.row.name"></el-input>
+              </template>
+            </el-table-column>
+             <el-table-column prop="phone" label="手机号" align='center'>
+              <template slot-scope="scope">
+                <span v-if="!scope.row.isEgdit">{{scope.row.phone}}</span>
+                <el-input v-if="scope.row.isEgdit" v-model="scope.row.phone"  maxlength="11" ></el-input>
+              </template>
+            </el-table-column>
+            <el-table-column fixed="right" label="操作" align='center' >
+              <template slot-scope="scope">
+                <el-button v-if="!scope.row.isEgdit" type="primary" size="small" @click='edit(scope.$index,scope.row)' icon="el-icon-edit" plain></el-button>
+                <el-button v-if="scope.row.isEgdit" type="success" size="small" @click='editSuccess(scope.$index,scope.row)' icon="el-icon-check" plain></el-button>
+                <el-button @click.native.prevent="deleteItem(scope.$index, list)" type="danger" size="small" icon="el-icon-delete" plain></el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+    <el-pagination
+      style="bottom:0px"
+      background
+      @current-change="handleCurrentChange1"
+      :page-sizes="[10, 15, 20, 30]"
+      @size-change="handleSizeChange1"
+      :current-page="queryParams.pageNo"
+      :page-size="queryParams.pageSize"
+      layout="sizes,prev, pager, next"
+      :total="totalCount1"
+    >
+    </el-pagination>
+    <a href="" download="" id="xz" style="position: absolute;z-index: -1;opacity: 0;"></a>
+  </div>
+</template>
+<script>
+import { addDevopsTeam, delDevopsTeam, updateDevopsTeam, getDevopsTeam, getTD } from "@/api/MochaITOM/crew";
+export default {
+  name: "DevopsTeam",
+  data() {
+    return {
+      exportLoading:false,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      totalCount1:undefined,
+      totalCount2:undefined,
+      // 参数表格数据
+      adminList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        current: 1,
+        size: 15,
+        name: undefined,
+        dutyName:undefined,
+        pageNo:1,
+        pageSize:15,
+      },
+      // 查询参数
+      queryParams2: {
+        current: 1,
+        size: 15,
+        pageNo:1,
+        pageSize:15,
+      },
+      tableHeight:undefined,
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        name: [
+          { required: true, message: "班组名称不能为空",  trigger: "blur"  }
+        ],
+      },
+      rules2: {
+
+        name: [
+          { required: true, message: "姓名不能为空",  trigger: "blur"  }
+        ],
+        phone: [
+          { required: true, message: "手机号不能为空",  trigger: "blur"  },
+          {
+            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
+            message: "请输入正确的手机号码",
+            trigger: "blur"
+          }
+        ],
+
+      },
+      list: [
+        {
+        name:undefined,
+        phone:undefined,
+        switch:false,
+        label:false,
+        userId:1,
+        },
+      ],
+      //责任人
+      zrr:[]
+    };
+  },
+  created() {
+    this.getList();//初始化table
+  },
+  mounted() {
+    // table高度
+    if(window.innerWidth <1920){
+      this.tableHeight = window.innerHeight - 300
+    }else{
+      this.tableHeight = window.innerHeight - 295
+    }
+    // 监听窗口大小变化
+    let self = this;
+    window.onresize = function() {
+      self.tableHeight = window.innerHeight - 300
+    }
+  },
+  methods: {
+    //分页查询
+    handleCurrentChange1(val) {
+      this.queryParams.pageNo = val;
+      this.getList();
+    },
+    //分页查询
+    handleSizeChange1(val) {
+      this.queryParams.pageSize = val;
+      this.getList();
+    },
+    //分页查询
+    handleCurrentChange2(val) {
+      this.queryParams2.pageNo = val;
+      this.getList();
+    },
+    //分页查询
+    handleSizeChange2(val) {
+      this.queryParams2.pageSize = val;
+      this.getList();
+    },
+    //新增数据
+    addItem() {
+      let item = {
+        name:undefined,
+        phone:undefined,
+        switch:false,
+        label:1,
+        userId:1,
+      }
+      this.list.push(item)
+    },
+    //删除数据
+    deleteItem(index, list) {
+      list.splice(index, 1);
+    },
+    //编辑数据
+    edit(index, row) {
+      this.$set(row, 'isEgdit', true)
+    },
+    //编辑成功
+    editSuccess(index, row) {
+      this.$set(row, 'isEgdit', false)
+    },
+    handleStatusChange(row,index){
+      if(row.switch === true){
+        row.label = 2
+      }else{
+        row.label = 1
+      }
+      for(let i = 0;i<this.list.length;i++){
+        if(i != index){
+          this.list[i].label = 1
+          this.list[i].switch = 1
+        }
+      }
+    },
+    //强制el-input刷新
+    onInput(){
+        this.$forceUpdate();
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    //手机号验证
+    testPhone(str) {
+      // const reg = /^1[3|4|5|7|8|6|9][0-9]\d{8}$/;
+      // return reg.test(str);
+    },
+    vaildPhone(value) {
+      if (!this.testPhone(value)) {
+        this.$message.warning("请输入正确的手机号码");
+      }
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.queryParams = {
+        dutyName:undefined,
+        current:1,
+        size:15,
+        pageSize:15,
+        pageNo:1,
+      }
+      // this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 表单重置
+    reset() {
+      this.form = {};
+      // this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.current = 1;
+      this.getList();
+    },
+    /** 查询参数列表 */
+    getList() {
+      this.loading = true;
+      getDevopsTeam(this.queryParams).then(response => {
+        if(response.data.pageList.length>0){
+          this.adminList = response.data.pageList;
+          this.totalCount1 = response.data.totalCount;
+          for(let i=0;i<this.adminList.length;i++){
+            this.zrr[i] = {}
+            this.zrr[i].name = this.adminList[i].dutyName
+          }
+          this.loading = false;
+        }else{
+          this.adminList = []
+          this.loading = false;
+        }
+
+      });
+    },
+
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      this.title = "修改";
+      this.form = JSON.parse(JSON.stringify(row))
+      this.list = this.form.userIds
+      getTD({teamId:this.form.id,current:1,size:20}).then(res =>{
+        let arr = res.data
+        for(let i = 0;i<arr.length;i++){
+          if(arr[i].label == "1"){
+            arr[i].switch = false
+          }else{
+            arr[i].switch = true
+          }
+        }
+        this.list = arr
+        this.open = true;
+      })
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "新增";
+      this.list = []
+    },
+    /** 提交按钮 */
+    submitForm(row) {
+      this.form.userIds = []
+      this.form.userIds = this.list
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          let arr = this.form.userIds
+          if(arr.length>0){
+            for(let i = 0;i<arr.length;i++){
+              if(!arr[i].name){
+                this.$message.error("姓名不能为空");
+                return
+              }
+              if(!arr[i].phone){
+                this.$message.error("电话不能为空");
+                return
+              }
+            }
+          }
+          for(let i =0;i<arr.length;i++){
+            if(i<arr.length-1){
+              if(arr[i].name == arr[i+1].name){
+                this.msgError("姓名不能重复");
+                return
+              }
+              if(arr[i].phone == arr[i+1].phone){
+                this.msgError("手机号不能重复");
+                return
+              }
+            }
+          }
+          this.loading = true
+          if (this.form.id != undefined) {
+            updateDevopsTeam(this.form).then(response => {
+              this.loading = false,
+              this.$message.success("修改成功");
+              this.open = false;
+              this.getList();
+            }).catch(()=>{
+              this.loading = false
+            })
+          } else {
+            addDevopsTeam(this.form).then(response => {
+              this.loading = false
+              if(response.status == "SUCCESS"){
+                this.$message.success("新增成功");
+                this.open = false;
+                this.getList();
+              }
+            })
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delDevopsTeam(ids);
+        }).then(() => {
+          this.getList();
+          this.$message.success("删除成功");
+        }).catch(() => {});
+    },
+  }
+};
+</script>

+ 434 - 0
.history/src/views/MochaITOM/crew/index_20220623132549.vue

@@ -0,0 +1,434 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" >
+      <el-form-item label="班组名称:" prop="name">
+        <el-input
+          v-model.trim="queryParams.name"
+          placeholder="请输入班组名称"
+          clearable
+          size="small"
+          style="width: 160px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="责任人:" prop="dutyName">
+        <el-select v-model="queryParams.dutyName"   placeholder="请选择责任人" style="width: 140px" >
+          <el-option
+            v-for="item in zrr"
+            :key="item.name"
+            :label="item.name"
+            :value="item.name"
+            clearable
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button type="primary" icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        <el-button
+          type="success"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+        >新增</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-table v-loading="loading" :data="adminList" :max-height="tableHeight">
+      <el-table-column label="班组名称" align="center" prop="name"  show-overflow-tooltip />
+      <el-table-column label="责任人" align="center" prop="dutyName"  show-overflow-tooltip />
+      <el-table-column label="联系方式" align="center" prop="dutyPhone"  show-overflow-tooltip />
+      <el-table-column label="创建时间" align="center" prop="createTime"  show-overflow-tooltip />
+      <el-table-column label="创建人" align="center" prop="createBy"  show-overflow-tooltip />
+      <el-table-column label="修改时间" align="center" prop="updateTime"  show-overflow-tooltip />
+      <el-table-column label="修改人" align="center" prop="updateBy"  show-overflow-tooltip />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" >
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 修改、新增对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body :before-close="cancel" :close-on-click-modal="false">
+      <el-form ref="form" :model="form" :rules="rules" label-width="auto" >
+        <el-row :gutter="20">
+          <el-col :span="12" >
+            <el-form-item label="班组名称" prop="name">
+              <el-input v-model="form.name" style="width: 160px" placeholder="请填写班组名称" @input="onInput()" maxlength="15" show-word-limit />
+            </el-form-item>
+          </el-col>
+          <div class="btn" style="text-align: left;margin:0 auto 30px;float:right">
+            <el-button type="primary" icon="el-icon-plus" size="mini" @click="addItem">新增人员</el-button>
+          </div>
+          <el-table :data="list" border   stripe height="200" :rules="rules2" >
+            <el-table-column label="序号" width="80px" align='center'>
+              <template slot-scope="scope">
+                <span>{{ scope.$index +1 }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column prop="switch" label="负任人" align='center'>
+              <template slot-scope="scope">
+                <el-switch
+                  v-model="scope.row.switch"
+                  active-color="#13ce66"
+                  inactive-color="#ff4949"
+                  @change="handleStatusChange(scope.row,scope.$index)"
+                ></el-switch>
+              </template>
+            </el-table-column>
+            <el-table-column prop="name" label="姓名" align='center'>
+              <template slot-scope="scope">
+                <span v-if="!scope.row.isEgdit">{{scope.row.name}}</span>
+                <el-input v-if="scope.row.isEgdit" v-model="scope.row.name"></el-input>
+              </template>
+            </el-table-column>
+             <el-table-column prop="phone" label="手机号" align='center'>
+              <template slot-scope="scope">
+                <span v-if="!scope.row.isEgdit">{{scope.row.phone}}</span>
+                <el-input v-if="scope.row.isEgdit" v-model="scope.row.phone"  maxlength="11" ></el-input>
+              </template>
+            </el-table-column>
+            <el-table-column fixed="right" label="操作" align='center' >
+              <template slot-scope="scope">
+                <el-button v-if="!scope.row.isEgdit" type="primary" size="small" @click='edit(scope.$index,scope.row)' icon="el-icon-edit" plain></el-button>
+                <el-button v-if="scope.row.isEgdit" type="success" size="small" @click='editSuccess(scope.$index,scope.row)' icon="el-icon-check" plain></el-button>
+                <el-button @click.native.prevent="deleteItem(scope.$index, list)" type="danger" size="small" icon="el-icon-delete" plain></el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+    <el-pagination
+      style="bottom:0px"
+      background
+      @current-change="handleCurrentChange1"
+      :page-sizes="[10, 15, 20, 30]"
+      @size-change="handleSizeChange1"
+      :current-page="queryParams.pageNo"
+      :page-size="queryParams.pageSize"
+      layout="sizes,prev, pager, next"
+      :total="totalCount1"
+    >
+    </el-pagination>
+    <a href="" download="" id="xz" style="position: absolute;z-index: -1;opacity: 0;"></a>
+  </div>
+</template>
+<script>
+import { addDevopsTeam, delDevopsTeam, updateDevopsTeam, getDevopsTeam, getTD } from "@/api/MochaITOM/crew";
+export default {
+  name: "DevopsTeam",
+  data() {
+    return {
+      exportLoading:false,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      totalCount1:undefined,
+      totalCount2:undefined,
+      // 参数表格数据
+      adminList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        current: 1,
+        size: 15,
+        name: undefined,
+        dutyName:undefined,
+        pageNo:1,
+        pageSize:15,
+      },
+      // 查询参数
+      queryParams2: {
+        current: 1,
+        size: 15,
+        pageNo:1,
+        pageSize:15,
+      },
+      tableHeight:undefined,
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        name: [
+          { required: true, message: "班组名称不能为空",  trigger: "blur"  }
+        ],
+      },
+      rules2: {
+
+        name: [
+          { required: true, message: "姓名不能为空",  trigger: "blur"  }
+        ],
+        phone: [
+          { required: true, message: "手机号不能为空",  trigger: "blur"  },
+          {
+            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
+            message: "请输入正确的手机号码",
+            trigger: "blur"
+          }
+        ],
+
+      },
+      list: [
+        {
+        name:undefined,
+        phone:undefined,
+        switch:false,
+        label:false,
+        userId:1,
+        },
+      ],
+      //责任人
+      zrr:[]
+    };
+  },
+  created() {
+    this.getList();//初始化table
+  },
+  mounted() {
+    // table高度
+    if(window.innerWidth <1920){
+      this.tableHeight = window.innerHeight - 300
+    }else{
+      this.tableHeight = window.innerHeight - 295
+    }
+    // 监听窗口大小变化
+    let self = this;
+    window.onresize = function() {
+      self.tableHeight = window.innerHeight - 300
+    }
+  },
+  methods: {
+    //分页查询
+    handleCurrentChange1(val) {
+      this.queryParams.pageNo = val;
+      this.getList();
+    },
+    //分页查询
+    handleSizeChange1(val) {
+      this.queryParams.pageSize = val;
+      this.getList();
+    },
+    //分页查询
+    handleCurrentChange2(val) {
+      this.queryParams2.pageNo = val;
+      this.getList();
+    },
+    //分页查询
+    handleSizeChange2(val) {
+      this.queryParams2.pageSize = val;
+      this.getList();
+    },
+    //新增数据
+    addItem() {
+      let item = {
+        name:undefined,
+        phone:undefined,
+        switch:false,
+        label:1,
+        userId:1,
+      }
+      this.list.push(item)
+    },
+    //删除数据
+    deleteItem(index, list) {
+      list.splice(index, 1);
+    },
+    //编辑数据
+    edit(index, row) {
+      this.$set(row, 'isEgdit', true)
+    },
+    //编辑成功
+    editSuccess(index, row) {
+      this.$set(row, 'isEgdit', false)
+    },
+    handleStatusChange(row,index){
+      if(row.switch === true){
+        row.label = 2
+      }else{
+        row.label = 1
+      }
+      for(let i = 0;i<this.list.length;i++){
+        if(i != index){
+          this.list[i].label = 1
+          this.list[i].switch = 1
+        }
+      }
+    },
+    //强制el-input刷新
+    onInput(){
+        this.$forceUpdate();
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    //手机号验证
+    testPhone(str) {
+      // const reg = /^1[3|4|5|7|8|6|9][0-9]\d{8}$/;
+      // return reg.test(str);
+    },
+    vaildPhone(value) {
+      if (!this.testPhone(value)) {
+        this.$message.warning("请输入正确的手机号码");
+      }
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.queryParams = {
+        dutyName:undefined,
+        current:1,
+        size:15,
+        pageSize:15,
+        pageNo:1,
+      }
+      // this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 表单重置
+    reset() {
+      this.form = {};
+      // this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.current = 1;
+      this.getList();
+    },
+    /** 查询参数列表 */
+    getList() {
+      this.loading = true;
+      getDevopsTeam(this.queryParams).then(response => {
+        if(response.data.pageList.length>0){
+          this.adminList = response.data.pageList;
+          this.totalCount1 = response.data.totalCount;
+          for(let i=0;i<this.adminList.length;i++){
+            this.zrr[i] = {}
+            this.zrr[i].name = this.adminList[i].dutyName
+          }
+          this.loading = false;
+        }else{
+          this.adminList = []
+          this.loading = false;
+        }
+
+      });
+    },
+
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      this.title = "修改";
+      this.form = JSON.parse(JSON.stringify(row))
+      this.list = this.form.userIds
+      getTD({teamId:this.form.id,current:1,size:20}).then(res =>{
+        let arr = res.data
+        for(let i = 0;i<arr.length;i++){
+          if(arr[i].label == "1"){
+            arr[i].switch = false
+          }else{
+            arr[i].switch = true
+          }
+        }
+        this.list = arr
+        this.open = true;
+      })
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "新增";
+      this.list = []
+    },
+    /** 提交按钮 */
+    submitForm(row) {
+      this.form.userIds = []
+      this.form.userIds = this.list
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          let arr = this.form.userIds
+          if(arr.length>0){
+            for(let i = 0;i<arr.length;i++){
+              if(!arr[i].name){
+                this.$message.error("姓名不能为空");
+                return
+              }
+              if(!arr[i].phone){
+                this.$message.error("电话不能为空");
+                return
+              }
+            }
+          }
+          for(let i =0;i<arr.length;i++){
+            if(i<arr.length-1){
+              if(arr[i].name == arr[i+1].name){
+                this.msgError("姓名不能重复");
+                return
+              }
+              if(arr[i].phone == arr[i+1].phone){
+                this.msgError("手机号不能重复");
+                return
+              }
+            }
+          }
+          this.loading = true
+          if (this.form.id != undefined) {
+            updateDevopsTeam(this.form).then(response => {
+              this.loading = false,
+              this.$message.success("修改成功");
+              this.open = false;
+              this.getList();
+            }).catch(()=>{
+              this.loading = false
+            })
+          } else {
+            addDevopsTeam(this.form).then(response => {
+              this.loading = false
+              if(response.status == "SUCCESS"){
+                this.$message.success("新增成功");
+                this.open = false;
+                this.getList();
+              }
+            })
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delDevopsTeam(ids);
+        }).then(() => {
+          this.getList();
+          this.$message.success("删除成功");
+        }).catch(() => {});
+    },
+  }
+};
+</script>

+ 434 - 0
.history/src/views/MochaITOM/crew/index_20220623132604.vue

@@ -0,0 +1,434 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" >
+      <el-form-item label="班组名称:" prop="name">
+        <el-input
+          v-model.trim="queryParams.name"
+          placeholder="请输入班组名称"
+          clearable
+          size="small"
+          style="width: 160px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="责任人:" prop="dutyName">
+        <el-select v-model="queryParams.dutyName"   placeholder="请选择责任人" style="width: 140px" >
+          <el-option
+            v-for="item in zrr"
+            :key="item.name"
+            :label="item.name"
+            :value="item.name"
+            clearable
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button type="primary" icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        <el-button
+          type="success"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+        >新增</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-table v-loading="loading" :data="adminList" :max-height="tableHeight">
+      <el-table-column label="班组名称" align="center" prop="name"  show-overflow-tooltip />
+      <el-table-column label="责任人" align="center" prop="dutyName"  show-overflow-tooltip />
+      <el-table-column label="联系方式" align="center" prop="dutyPhone"  show-overflow-tooltip />
+      <el-table-column label="创建时间" align="center" prop="createTime"  show-overflow-tooltip />
+      <el-table-column label="创建人" align="center" prop="createBy"  show-overflow-tooltip />
+      <el-table-column label="修改时间" align="center" prop="updateTime"  show-overflow-tooltip />
+      <el-table-column label="修改人" align="center" prop="updateBy"  show-overflow-tooltip />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" >
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 修改、新增对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body :before-close="cancel" :close-on-click-modal="false">
+      <el-form ref="form" :model="form" :rules="rules" label-width="auto" >
+        <el-row :gutter="20">
+          <el-col :span="12" >
+            <el-form-item label="班组名称" prop="name">
+              <el-input v-model="form.name" style="width: 160px" placeholder="请填写班组名称" @input="onInput()" maxlength="15" show-word-limit />
+            </el-form-item>
+          </el-col>
+          <div class="btn" style="text-align: left;margin:0 auto 30px;float:right">
+            <el-button type="primary" icon="el-icon-plus" size="mini" @click="addItem">新增人员</el-button>
+          </div>
+          <el-table :data="list" border   stripe height="200" :rules="rules2" >
+            <el-table-column label="序号" width="80px" align='center'>
+              <template slot-scope="scope">
+                <span>{{ scope.$index +1 }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column prop="switch" label="负任人" align='center'>
+              <template slot-scope="scope">
+                <el-switch
+                  v-model="scope.row.switch"
+                  active-color="#13ce66"
+                  inactive-color="#ff4949"
+                  @change="handleStatusChange(scope.row,scope.$index)"
+                ></el-switch>
+              </template>
+            </el-table-column>
+            <el-table-column prop="name" label="姓名" align='center'>
+              <template slot-scope="scope">
+                <span v-if="!scope.row.isEgdit">{{scope.row.name}}</span>
+                <el-input v-if="scope.row.isEgdit" v-model="scope.row.name"></el-input>
+              </template>
+            </el-table-column>
+             <el-table-column prop="phone" label="手机号" align='center'>
+              <template slot-scope="scope">
+                <span v-if="!scope.row.isEgdit">{{scope.row.phone}}</span>
+                <el-input v-if="scope.row.isEgdit" v-model="scope.row.phone"  maxlength="11" ></el-input>
+              </template>
+            </el-table-column>
+            <el-table-column fixed="right" label="操作" align='center' >
+              <template slot-scope="scope">
+                <el-button v-if="!scope.row.isEgdit" type="primary" size="small" @click='edit(scope.$index,scope.row)' icon="el-icon-edit" plain></el-button>
+                <el-button v-if="scope.row.isEgdit" type="success" size="small" @click='editSuccess(scope.$index,scope.row)' icon="el-icon-check" plain></el-button>
+                <el-button @click.native.prevent="deleteItem(scope.$index, list)" type="danger" size="small" icon="el-icon-delete" plain></el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+    <el-pagination
+      style="bottom:0px"
+      background
+      @current-change="handleCurrentChange1"
+      :page-sizes="[10, 15, 20, 30]"
+      @size-change="handleSizeChange1"
+      :current-page="queryParams.pageNo"
+      :page-size="queryParams.pageSize"
+      layout="sizes,prev, pager, next"
+      :total="totalCount1"
+    >
+    </el-pagination>
+    <a href="" download="" id="xz" style="position: absolute;z-index: -1;opacity: 0;"></a>
+  </div>
+</template>
+<script>
+import { addDevopsTeam, delDevopsTeam, updateDevopsTeam, getDevopsTeam, getTD } from "@/api/MochaITOM/crew";
+export default {
+  name: "DevopsTeam",
+  data() {
+    return {
+      exportLoading:false,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      totalCount1:undefined,
+      totalCount2:undefined,
+      // 参数表格数据
+      adminList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        current: 1,
+        size: 15,
+        name: undefined,
+        dutyName:undefined,
+        pageNo:1,
+        pageSize:15,
+      },
+      // 查询参数
+      queryParams2: {
+        current: 1,
+        size: 15,
+        pageNo:1,
+        pageSize:15,
+      },
+      tableHeight:undefined,
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        name: [
+          { required: true, message: "班组名称不能为空",  trigger: "blur"  }
+        ],
+      },
+      rules2: {
+
+        name: [
+          { required: true, message: "姓名不能为空",  trigger: "blur"  }
+        ],
+        phone: [
+          { required: true, message: "手机号不能为空",  trigger: "blur"  },
+          {
+            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
+            message: "请输入正确的手机号码",
+            trigger: "blur"
+          }
+        ],
+
+      },
+      list: [
+        {
+        name:undefined,
+        phone:undefined,
+        switch:false,
+        label:false,
+        userId:1,
+        },
+      ],
+      //责任人
+      zrr:[]
+    };
+  },
+  created() {
+    this.getList();//初始化table
+  },
+  mounted() {
+    // table高度
+    if(window.innerWidth <1920){
+      this.tableHeight = window.innerHeight - 300
+    }else{
+      this.tableHeight = window.innerHeight - 295
+    }
+    // 监听窗口大小变化
+    let self = this;
+    window.onresize = function() {
+      self.tableHeight = window.innerHeight - 300
+    }
+  },
+  methods: {
+    //分页查询
+    handleCurrentChange1(val) {
+      this.queryParams.pageNo = val;
+      this.getList();
+    },
+    //分页查询
+    handleSizeChange1(val) {
+      this.queryParams.pageSize = val;
+      this.getList();
+    },
+    //分页查询
+    handleCurrentChange2(val) {
+      this.queryParams2.pageNo = val;
+      this.getList();
+    },
+    //分页查询
+    handleSizeChange2(val) {
+      this.queryParams2.pageSize = val;
+      this.getList();
+    },
+    //新增数据
+    addItem() {
+      let item = {
+        name:undefined,
+        phone:undefined,
+        switch:false,
+        label:1,
+        userId:1,
+      }
+      this.list.push(item)
+    },
+    //删除数据
+    deleteItem(index, list) {
+      list.splice(index, 1);
+    },
+    //编辑数据
+    edit(index, row) {
+      this.$set(row, 'isEgdit', true)
+    },
+    //编辑成功
+    editSuccess(index, row) {
+      this.$set(row, 'isEgdit', false)
+    },
+    handleStatusChange(row,index){
+      if(row.switch === true){
+        row.label = 2
+      }else{
+        row.label = 1
+      }
+      for(let i = 0;i<this.list.length;i++){
+        if(i != index){
+          this.list[i].label = 1
+          this.list[i].switch = 1
+        }
+      }
+    },
+    //强制el-input刷新
+    onInput(){
+        this.$forceUpdate();
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    //手机号验证
+    testPhone(str) {
+      // const reg = /^1[3|4|5|7|8|6|9][0-9]\d{8}$/;
+      // return reg.test(str);
+    },
+    vaildPhone(value) {
+      if (!this.testPhone(value)) {
+        this.$message.warning("请输入正确的手机号码");
+      }
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.queryParams = {
+        dutyName:undefined,
+        current:1,
+        size:15,
+        pageSize:15,
+        pageNo:1,
+      }
+      // this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 表单重置
+    reset() {
+      this.form = {};
+      // this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.current = 1;
+      this.getList();
+    },
+    /** 查询参数列表 */
+    getList() {
+      this.loading = true;
+      getDevopsTeam(this.queryParams).then(response => {
+        if(response.data.pageList.length>0){
+          this.adminList = response.data.pageList;
+          this.totalCount1 = response.data.totalCount;
+          for(let i=0;i<this.adminList.length;i++){
+            this.zrr[i] = {}
+            this.zrr[i].name = this.adminList[i].dutyName
+          }
+          this.loading = false;
+        }else{
+          this.adminList = []
+          this.loading = false;
+        }
+
+      });
+    },
+
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      this.title = "修改";
+      this.form = JSON.parse(JSON.stringify(row))
+      this.list = this.form.userIds
+      getTD({teamId:this.form.id,current:1,size:20}).then(res =>{
+        let arr = res.data
+        for(let i = 0;i<arr.length;i++){
+          if(arr[i].label == "1"){
+            arr[i].switch = false
+          }else{
+            arr[i].switch = true
+          }
+        }
+        this.list = arr
+        this.open = true;
+      })
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "新增";
+      this.list = []
+    },
+    /** 提交按钮 */
+    submitForm(row) {
+      this.form.userIds = []
+      this.form.userIds = this.list
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          let arr = this.form.userIds
+          if(arr.length>0){
+            for(let i = 0;i<arr.length;i++){
+              if(!arr[i].name){
+                this.$message.error("姓名不能为空");
+                return
+              }
+              if(!arr[i].phone){
+                this.$message.error("电话不能为空");
+                return
+              }
+            }
+          }
+          for(let i =0;i<arr.length;i++){
+            if(i<arr.length-1){
+              if(arr[i].name == arr[i+1].name){
+                this.$message.error("姓名不能重复");
+                return
+              }
+              if(arr[i].phone == arr[i+1].phone){
+                this.$message.error("手机号不能重复");
+                return
+              }
+            }
+          }
+          this.loading = true
+          if (this.form.id != undefined) {
+            updateDevopsTeam(this.form).then(response => {
+              this.loading = false,
+              this.$message.success("修改成功");
+              this.open = false;
+              this.getList();
+            }).catch(()=>{
+              this.loading = false
+            })
+          } else {
+            addDevopsTeam(this.form).then(response => {
+              this.loading = false
+              if(response.status == "SUCCESS"){
+                this.$message.success("新增成功");
+                this.open = false;
+                this.getList();
+              }
+            })
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delDevopsTeam(ids);
+        }).then(() => {
+          this.getList();
+          this.$message.success("删除成功");
+        }).catch(() => {});
+    },
+  }
+};
+</script>

+ 434 - 0
.history/src/views/MochaITOM/crew/index_20220623132605.vue

@@ -0,0 +1,434 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" >
+      <el-form-item label="班组名称:" prop="name">
+        <el-input
+          v-model.trim="queryParams.name"
+          placeholder="请输入班组名称"
+          clearable
+          size="small"
+          style="width: 160px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="责任人:" prop="dutyName">
+        <el-select v-model="queryParams.dutyName"   placeholder="请选择责任人" style="width: 140px" >
+          <el-option
+            v-for="item in zrr"
+            :key="item.name"
+            :label="item.name"
+            :value="item.name"
+            clearable
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button type="primary" icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        <el-button
+          type="success"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+        >新增</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-table v-loading="loading" :data="adminList" :max-height="tableHeight">
+      <el-table-column label="班组名称" align="center" prop="name"  show-overflow-tooltip />
+      <el-table-column label="责任人" align="center" prop="dutyName"  show-overflow-tooltip />
+      <el-table-column label="联系方式" align="center" prop="dutyPhone"  show-overflow-tooltip />
+      <el-table-column label="创建时间" align="center" prop="createTime"  show-overflow-tooltip />
+      <el-table-column label="创建人" align="center" prop="createBy"  show-overflow-tooltip />
+      <el-table-column label="修改时间" align="center" prop="updateTime"  show-overflow-tooltip />
+      <el-table-column label="修改人" align="center" prop="updateBy"  show-overflow-tooltip />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" >
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 修改、新增对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body :before-close="cancel" :close-on-click-modal="false">
+      <el-form ref="form" :model="form" :rules="rules" label-width="auto" >
+        <el-row :gutter="20">
+          <el-col :span="12" >
+            <el-form-item label="班组名称" prop="name">
+              <el-input v-model="form.name" style="width: 160px" placeholder="请填写班组名称" @input="onInput()" maxlength="15" show-word-limit />
+            </el-form-item>
+          </el-col>
+          <div class="btn" style="text-align: left;margin:0 auto 30px;float:right">
+            <el-button type="primary" icon="el-icon-plus" size="mini" @click="addItem">新增人员</el-button>
+          </div>
+          <el-table :data="list" border   stripe height="200" :rules="rules2" >
+            <el-table-column label="序号" width="80px" align='center'>
+              <template slot-scope="scope">
+                <span>{{ scope.$index +1 }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column prop="switch" label="负任人" align='center'>
+              <template slot-scope="scope">
+                <el-switch
+                  v-model="scope.row.switch"
+                  active-color="#13ce66"
+                  inactive-color="#ff4949"
+                  @change="handleStatusChange(scope.row,scope.$index)"
+                ></el-switch>
+              </template>
+            </el-table-column>
+            <el-table-column prop="name" label="姓名" align='center'>
+              <template slot-scope="scope">
+                <span v-if="!scope.row.isEgdit">{{scope.row.name}}</span>
+                <el-input v-if="scope.row.isEgdit" v-model="scope.row.name"></el-input>
+              </template>
+            </el-table-column>
+             <el-table-column prop="phone" label="手机号" align='center'>
+              <template slot-scope="scope">
+                <span v-if="!scope.row.isEgdit">{{scope.row.phone}}</span>
+                <el-input v-if="scope.row.isEgdit" v-model="scope.row.phone"  maxlength="11" ></el-input>
+              </template>
+            </el-table-column>
+            <el-table-column fixed="right" label="操作" align='center' >
+              <template slot-scope="scope">
+                <el-button v-if="!scope.row.isEgdit" type="primary" size="small" @click='edit(scope.$index,scope.row)' icon="el-icon-edit" plain></el-button>
+                <el-button v-if="scope.row.isEgdit" type="success" size="small" @click='editSuccess(scope.$index,scope.row)' icon="el-icon-check" plain></el-button>
+                <el-button @click.native.prevent="deleteItem(scope.$index, list)" type="danger" size="small" icon="el-icon-delete" plain></el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+    <el-pagination
+      style="bottom:0px"
+      background
+      @current-change="handleCurrentChange1"
+      :page-sizes="[10, 15, 20, 30]"
+      @size-change="handleSizeChange1"
+      :current-page="queryParams.pageNo"
+      :page-size="queryParams.pageSize"
+      layout="sizes,prev, pager, next"
+      :total="totalCount1"
+    >
+    </el-pagination>
+    <a href="" download="" id="xz" style="position: absolute;z-index: -1;opacity: 0;"></a>
+  </div>
+</template>
+<script>
+import { addDevopsTeam, delDevopsTeam, updateDevopsTeam, getDevopsTeam, getTD } from "@/api/MochaITOM/crew";
+export default {
+  name: "DevopsTeam",
+  data() {
+    return {
+      exportLoading:false,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      totalCount1:undefined,
+      totalCount2:undefined,
+      // 参数表格数据
+      adminList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        current: 1,
+        size: 15,
+        name: undefined,
+        dutyName:undefined,
+        pageNo:1,
+        pageSize:15,
+      },
+      // 查询参数
+      queryParams2: {
+        current: 1,
+        size: 15,
+        pageNo:1,
+        pageSize:15,
+      },
+      tableHeight:undefined,
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        name: [
+          { required: true, message: "班组名称不能为空",  trigger: "blur"  }
+        ],
+      },
+      rules2: {
+
+        name: [
+          { required: true, message: "姓名不能为空",  trigger: "blur"  }
+        ],
+        phone: [
+          { required: true, message: "手机号不能为空",  trigger: "blur"  },
+          {
+            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
+            message: "请输入正确的手机号码",
+            trigger: "blur"
+          }
+        ],
+
+      },
+      list: [
+        {
+        name:undefined,
+        phone:undefined,
+        switch:false,
+        label:false,
+        userId:1,
+        },
+      ],
+      //责任人
+      zrr:[]
+    };
+  },
+  created() {
+    this.getList();//初始化table
+  },
+  mounted() {
+    // table高度
+    if(window.innerWidth <1920){
+      this.tableHeight = window.innerHeight - 300
+    }else{
+      this.tableHeight = window.innerHeight - 295
+    }
+    // 监听窗口大小变化
+    let self = this;
+    window.onresize = function() {
+      self.tableHeight = window.innerHeight - 300
+    }
+  },
+  methods: {
+    //分页查询
+    handleCurrentChange1(val) {
+      this.queryParams.pageNo = val;
+      this.getList();
+    },
+    //分页查询
+    handleSizeChange1(val) {
+      this.queryParams.pageSize = val;
+      this.getList();
+    },
+    //分页查询
+    handleCurrentChange2(val) {
+      this.queryParams2.pageNo = val;
+      this.getList();
+    },
+    //分页查询
+    handleSizeChange2(val) {
+      this.queryParams2.pageSize = val;
+      this.getList();
+    },
+    //新增数据
+    addItem() {
+      let item = {
+        name:undefined,
+        phone:undefined,
+        switch:false,
+        label:1,
+        userId:1,
+      }
+      this.list.push(item)
+    },
+    //删除数据
+    deleteItem(index, list) {
+      list.splice(index, 1);
+    },
+    //编辑数据
+    edit(index, row) {
+      this.$set(row, 'isEgdit', true)
+    },
+    //编辑成功
+    editSuccess(index, row) {
+      this.$set(row, 'isEgdit', false)
+    },
+    handleStatusChange(row,index){
+      if(row.switch === true){
+        row.label = 2
+      }else{
+        row.label = 1
+      }
+      for(let i = 0;i<this.list.length;i++){
+        if(i != index){
+          this.list[i].label = 1
+          this.list[i].switch = 1
+        }
+      }
+    },
+    //强制el-input刷新
+    onInput(){
+        this.$forceUpdate();
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    //手机号验证
+    testPhone(str) {
+      // const reg = /^1[3|4|5|7|8|6|9][0-9]\d{8}$/;
+      // return reg.test(str);
+    },
+    vaildPhone(value) {
+      if (!this.testPhone(value)) {
+        this.$message.warning("请输入正确的手机号码");
+      }
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.queryParams = {
+        dutyName:undefined,
+        current:1,
+        size:15,
+        pageSize:15,
+        pageNo:1,
+      }
+      // this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 表单重置
+    reset() {
+      this.form = {};
+      // this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.current = 1;
+      this.getList();
+    },
+    /** 查询参数列表 */
+    getList() {
+      this.loading = true;
+      getDevopsTeam(this.queryParams).then(response => {
+        if(response.data.pageList.length>0){
+          this.adminList = response.data.pageList;
+          this.totalCount1 = response.data.totalCount;
+          for(let i=0;i<this.adminList.length;i++){
+            this.zrr[i] = {}
+            this.zrr[i].name = this.adminList[i].dutyName
+          }
+          this.loading = false;
+        }else{
+          this.adminList = []
+          this.loading = false;
+        }
+
+      });
+    },
+
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      this.title = "修改";
+      this.form = JSON.parse(JSON.stringify(row))
+      this.list = this.form.userIds
+      getTD({teamId:this.form.id,current:1,size:20}).then(res =>{
+        let arr = res.data
+        for(let i = 0;i<arr.length;i++){
+          if(arr[i].label == "1"){
+            arr[i].switch = false
+          }else{
+            arr[i].switch = true
+          }
+        }
+        this.list = arr
+        this.open = true;
+      })
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "新增";
+      this.list = []
+    },
+    /** 提交按钮 */
+    submitForm(row) {
+      this.form.userIds = []
+      this.form.userIds = this.list
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          let arr = this.form.userIds
+          if(arr.length>0){
+            for(let i = 0;i<arr.length;i++){
+              if(!arr[i].name){
+                this.$message.error("姓名不能为空");
+                return
+              }
+              if(!arr[i].phone){
+                this.$message.error("电话不能为空");
+                return
+              }
+            }
+          }
+          for(let i =0;i<arr.length;i++){
+            if(i<arr.length-1){
+              if(arr[i].name == arr[i+1].name){
+                this.$message.error("姓名不能重复");
+                return
+              }
+              if(arr[i].phone == arr[i+1].phone){
+                this.$message.error("手机号不能重复");
+                return
+              }
+            }
+          }
+          this.loading = true
+          if (this.form.id != undefined) {
+            updateDevopsTeam(this.form).then(response => {
+              this.loading = false,
+              this.$message.success("修改成功");
+              this.open = false;
+              this.getList();
+            }).catch(()=>{
+              this.loading = false
+            })
+          } else {
+            addDevopsTeam(this.form).then(response => {
+              this.loading = false
+              if(response.status == "SUCCESS"){
+                this.$message.success("新增成功");
+                this.open = false;
+                this.getList();
+              }
+            })
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delDevopsTeam(ids);
+        }).then(() => {
+          this.getList();
+          this.$message.success("删除成功");
+        }).catch(() => {});
+    },
+  }
+};
+</script>

Некоторые файлы не были показаны из-за большого количества измененных файлов