فهرست منبع

修改title配置

ming 3 سال پیش
والد
کامیت
fde11ea511
100فایلهای تغییر یافته به همراه5592 افزوده شده و 0 حذف شده
  1. 3 0
      .browserslistrc
  2. 15 0
      .eslintrc.js
  3. 10 0
      .gitattributes
  4. 27 0
      .gitignore
  5. 3 0
      .stylelintrc.js
  6. 3 0
      babel.config.js
  7. 18 0
      deploy.sh
  8. 2294 0
      mock/controller/icon.js
  9. 37 0
      mock/controller/router.js
  10. 65 0
      mock/controller/table.js
  11. 103 0
      mock/controller/user.js
  12. 16 0
      mock/index.js
  13. 94 0
      mock/mockServer.js
  14. 43 0
      mock/utils/index.js
  15. 72 0
      package.json
  16. 16 0
      prettier.config.js
  17. BIN
      public/favicon.ico
  18. BIN
      public/favicon1.ico
  19. 57 0
      public/index.html
  20. 36 0
      public/static/config.js
  21. 96 0
      public/static/css/loading.css
  22. BIN
      public/static/伍继变量列表导入模板.xlsx
  23. BIN
      public/static/伍继摄像头导入模板.xlsx
  24. BIN
      public/static/伍继监控设备导入模板.xlsx
  25. BIN
      public/static/伍继通信设备导入模板.xlsx
  26. 11 0
      sh.exe.stackdump
  27. 36 0
      src/App.vue
  28. 36 0
      src/api/alarmManage/index.js
  29. 10 0
      src/api/alarmingManage/index.js
  30. 12 0
      src/api/dataManage/chainAnalysis.js
  31. 22 0
      src/api/dataManage/demandAnalysis.js
  32. 31 0
      src/api/dataManage/energyReport.js
  33. 10 0
      src/api/dataManage/patrolPlan.js
  34. 12 0
      src/api/dataManage/sameAnalysis.js
  35. 79 0
      src/api/deviceManage/powerEquip/communicateEquip.js
  36. 55 0
      src/api/deviceManage/powerEquip/deviceAttribute.js
  37. 9 0
      src/api/deviceManage/videoEquip.js
  38. 9 0
      src/api/icon.js
  39. 47 0
      src/api/planOutage/index.js
  40. 24 0
      src/api/powerQuality/harmonicReport.js
  41. 40 0
      src/api/powerQuality/loopMonitor.js
  42. 30 0
      src/api/powerQuality/loopReport.js
  43. 30 0
      src/api/powerQuality/realScore.js
  44. 30 0
      src/api/powerQuality/scoreReport.js
  45. 20 0
      src/api/powerQuality/unbalanceAnalysis.js
  46. 28 0
      src/api/publicList.js
  47. 9 0
      src/api/router.js
  48. 57 0
      src/api/siteManage/basicInfo.js
  49. 44 0
      src/api/siteManage/camera.js
  50. 37 0
      src/api/siteManage/index.js
  51. 27 0
      src/api/siteManage/powerScore.js
  52. 64 0
      src/api/siteManage/variableList.js
  53. 60 0
      src/api/siteManage/watchDog.js
  54. 55 0
      src/api/stationManage/index.js
  55. 80 0
      src/api/systemManage/rolePermission.js
  56. 58 0
      src/api/systemManage/userManage.js
  57. 25 0
      src/api/table.js
  58. 43 0
      src/api/user.js
  59. 122 0
      src/assets/css/global.scss
  60. 1111 0
      src/assets/css/index.scss
  61. BIN
      src/assets/error_images/403.png
  62. BIN
      src/assets/error_images/404.png
  63. BIN
      src/assets/error_images/cloud.png
  64. BIN
      src/assets/images/archiveImg.png
  65. BIN
      src/assets/images/bg-smooth.jpg
  66. BIN
      src/assets/images/common-mainIcon.jpg
  67. BIN
      src/assets/images/default_head.jpg
  68. BIN
      src/assets/images/descIcon.png
  69. BIN
      src/assets/images/doneWorkIcon.png
  70. BIN
      src/assets/images/img.jpg
  71. 1 0
      src/assets/images/jianxiu.svg
  72. BIN
      src/assets/images/jianxiuImg.png
  73. BIN
      src/assets/images/logo.png
  74. BIN
      src/assets/images/logo1.png
  75. BIN
      src/assets/images/logo_admin.png
  76. BIN
      src/assets/images/noDataImg.png
  77. BIN
      src/assets/images/record-bg2.png
  78. BIN
      src/assets/images/record-dts.png
  79. BIN
      src/assets/images/record-exception.png
  80. BIN
      src/assets/images/record-item.png
  81. BIN
      src/assets/images/record-station.png
  82. 7 0
      src/assets/images/userIcon.svg
  83. BIN
      src/assets/images/workDailyIcon.png
  84. BIN
      src/assets/images/workIcon.png
  85. BIN
      src/assets/images/workTimeIcon.png
  86. BIN
      src/assets/login_images/login_background.png
  87. BIN
      src/assets/login_images/login_form.png
  88. BIN
      src/assets/logo.png
  89. BIN
      src/assets/logo1.png
  90. BIN
      src/assets/logo_admin.png
  91. 43 0
      src/components/SvgIcon.vue
  92. 9 0
      src/config/config.js
  93. 8 0
      src/config/default/index.js
  94. 14 0
      src/config/default/net.config.js
  95. 80 0
      src/config/default/setting.config.js
  96. 28 0
      src/config/default/theme.config.js
  97. 9 0
      src/config/index.js
  98. 4 0
      src/icons/index.js
  99. 7 0
      src/icons/svgIcon/alarmManage.svg
  100. 1 0
      src/icons/svgIcon/anticon-dingwei.svg

+ 3 - 0
.browserslistrc

@@ -0,0 +1,3 @@
+> 1%
+last 2 versions
+not dead

+ 15 - 0
.eslintrc.js

@@ -0,0 +1,15 @@
+module.exports = {
+  root: true,
+  env: {
+    node: true,
+  },
+  extends: ['plugin:vue/vue3-essential', 'eslint:recommended', '@vue/prettier'],
+  parserOptions: {
+    parser: 'babel-eslint',
+  },
+  rules: {
+    "prettier/prettier": "off",
+    'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
+    'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
+  },
+}

+ 10 - 0
.gitattributes

@@ -0,0 +1,10 @@
+*.html text eol=lf
+*.css text eol=lf
+*.js text eol=lf linguist-language=vue
+*.scss text eol=lf
+*.vue text eol=lf
+*.hbs text eol=lf
+*.sh text eol=lf
+*.md text eol=lf
+*.json text eol=lf
+*.yml text eol=lf

+ 27 - 0
.gitignore

@@ -0,0 +1,27 @@
+.DS_Store
+node_modules
+dist
+.history
+package-lock.json
+*.zip
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+
+

+ 3 - 0
.stylelintrc.js

@@ -0,0 +1,3 @@
+module.exports = {
+  extends: ['stylelint-config-recess-order', 'stylelint-config-prettier'],
+}

+ 3 - 0
babel.config.js

@@ -0,0 +1,3 @@
+module.exports = {
+  presets: ['@vue/cli-plugin-babel/preset'],
+}

+ 18 - 0
deploy.sh

@@ -0,0 +1,18 @@
+#!/usr/bin/env bash
+set -e
+npm run build
+cd dist
+touch .nojekyll
+git init
+git add -A
+git commit -m 'deploy'
+git push -f "https://${access_token}@gitee.com/chu1204505056/vue-admin-beautiful-mini.git" master:gh-pages
+git push -f "https://${access_token}@gitee.com/chu1204505056/vue-admin-beautiful-antdv.git" master:gh-pages
+start "https://gitee.com/chu1204505056/vue-admin-beautiful-mini/pages"
+start "https://gitee.com/chu1204505056/vue-admin-beautiful-antdv/pages"
+cd -
+exec /bin/bash
+
+
+
+

+ 2294 - 0
mock/controller/icon.js

@@ -0,0 +1,2294 @@
+const data = [
+  '24-hours-fill',
+  '24-hours-line',
+  '4k-fill',
+  '4k-line',
+  'a-b',
+  'account-box-fill',
+  'account-box-line',
+  'account-circle-fill',
+  'account-circle-line',
+  'account-pin-box-fill',
+  'account-pin-box-line',
+  'account-pin-circle-fill',
+  'account-pin-circle-line',
+  'add-box-fill',
+  'add-box-line',
+  'add-circle-fill',
+  'add-circle-line',
+  'add-fill',
+  'add-line',
+  'admin-fill',
+  'admin-line',
+  'airplay-fill',
+  'airplay-line',
+  'alarm-fill',
+  'alarm-line',
+  'alarm-warning-fill',
+  'alarm-warning-line',
+  'album-fill',
+  'album-line',
+  'alert-fill',
+  'alert-line',
+  'aliens-fill',
+  'aliens-line',
+  'align-bottom',
+  'align-center',
+  'align-justify',
+  'align-left',
+  'align-right',
+  'align-top',
+  'align-vertically',
+  'alipay-fill',
+  'alipay-line',
+  'amazon-fill',
+  'amazon-line',
+  'anchor-fill',
+  'anchor-line',
+  'ancient-gate-fill',
+  'ancient-gate-line',
+  'ancient-pavilion-fill',
+  'ancient-pavilion-line',
+  'android-fill',
+  'android-line',
+  'angularjs-fill',
+  'angularjs-line',
+  'anticlockwise-2-fill',
+  'anticlockwise-2-line',
+  'anticlockwise-fill',
+  'anticlockwise-line',
+  'app-store-fill',
+  'app-store-line',
+  'apple-fill',
+  'apple-line',
+  'apps-2-fill',
+  'apps-2-line',
+  'apps-fill',
+  'apps-line',
+  'archive-drawer-fill',
+  'archive-drawer-line',
+  'archive-fill',
+  'archive-line',
+  'arrow-down-circle-fill',
+  'arrow-down-circle-line',
+  'arrow-down-fill',
+  'arrow-down-line',
+  'arrow-down-s-fill',
+  'arrow-down-s-line',
+  'arrow-drop-down-fill',
+  'arrow-drop-down-line',
+  'arrow-drop-left-fill',
+  'arrow-drop-left-line',
+  'arrow-drop-right-fill',
+  'arrow-drop-right-line',
+  'arrow-drop-up-fill',
+  'arrow-drop-up-line',
+  'arrow-go-back-fill',
+  'arrow-go-back-line',
+  'arrow-go-forward-fill',
+  'arrow-go-forward-line',
+  'arrow-left-circle-fill',
+  'arrow-left-circle-line',
+  'arrow-left-down-fill',
+  'arrow-left-down-line',
+  'arrow-left-fill',
+  'arrow-left-line',
+  'arrow-left-right-fill',
+  'arrow-left-right-line',
+  'arrow-left-s-fill',
+  'arrow-left-s-line',
+  'arrow-left-up-fill',
+  'arrow-left-up-line',
+  'arrow-right-circle-fill',
+  'arrow-right-circle-line',
+  'arrow-right-down-fill',
+  'arrow-right-down-line',
+  'arrow-right-fill',
+  'arrow-right-line',
+  'arrow-right-s-fill',
+  'arrow-right-s-line',
+  'arrow-right-up-fill',
+  'arrow-right-up-line',
+  'arrow-up-circle-fill',
+  'arrow-up-circle-line',
+  'arrow-up-down-fill',
+  'arrow-up-down-line',
+  'arrow-up-fill',
+  'arrow-up-line',
+  'arrow-up-s-fill',
+  'arrow-up-s-line',
+  'artboard-2-fill',
+  'artboard-2-line',
+  'artboard-fill',
+  'artboard-line',
+  'article-fill',
+  'article-line',
+  'aspect-ratio-fill',
+  'aspect-ratio-line',
+  'asterisk',
+  'at-fill',
+  'at-line',
+  'attachment-2',
+  'attachment-fill',
+  'attachment-line',
+  'auction-fill',
+  'auction-line',
+  'award-fill',
+  'award-line',
+  'baidu-fill',
+  'baidu-line',
+  'ball-pen-fill',
+  'ball-pen-line',
+  'bank-card-2-fill',
+  'bank-card-2-line',
+  'bank-card-fill',
+  'bank-card-line',
+  'bank-fill',
+  'bank-line',
+  'bar-chart-2-fill',
+  'bar-chart-2-line',
+  'bar-chart-box-fill',
+  'bar-chart-box-line',
+  'bar-chart-fill',
+  'bar-chart-grouped-fill',
+  'bar-chart-grouped-line',
+  'bar-chart-horizontal-fill',
+  'bar-chart-horizontal-line',
+  'bar-chart-line',
+  'barcode-box-fill',
+  'barcode-box-line',
+  'barcode-fill',
+  'barcode-line',
+  'barricade-fill',
+  'barricade-line',
+  'base-station-fill',
+  'base-station-line',
+  'basketball-fill',
+  'basketball-line',
+  'battery-2-charge-fill',
+  'battery-2-charge-line',
+  'battery-2-fill',
+  'battery-2-line',
+  'battery-charge-fill',
+  'battery-charge-line',
+  'battery-fill',
+  'battery-line',
+  'battery-low-fill',
+  'battery-low-line',
+  'battery-saver-fill',
+  'battery-saver-line',
+  'battery-share-fill',
+  'battery-share-line',
+  'bear-smile-fill',
+  'bear-smile-line',
+  'behance-fill',
+  'behance-line',
+  'bell-fill',
+  'bell-line',
+  'bike-fill',
+  'bike-line',
+  'bilibili-fill',
+  'bilibili-line',
+  'bill-fill',
+  'bill-line',
+  'billiards-fill',
+  'billiards-line',
+  'bit-coin-fill',
+  'bit-coin-line',
+  'blaze-fill',
+  'blaze-line',
+  'bluetooth-connect-fill',
+  'bluetooth-connect-line',
+  'bluetooth-fill',
+  'bluetooth-line',
+  'blur-off-fill',
+  'blur-off-line',
+  'body-scan-fill',
+  'body-scan-line',
+  'bold',
+  'book-2-fill',
+  'book-2-line',
+  'book-3-fill',
+  'book-3-line',
+  'book-fill',
+  'book-line',
+  'book-mark-fill',
+  'book-mark-line',
+  'book-open-fill',
+  'book-open-line',
+  'book-read-fill',
+  'book-read-line',
+  'booklet-fill',
+  'booklet-line',
+  'bookmark-2-fill',
+  'bookmark-2-line',
+  'bookmark-3-fill',
+  'bookmark-3-line',
+  'bookmark-fill',
+  'bookmark-line',
+  'boxing-fill',
+  'boxing-line',
+  'braces-fill',
+  'braces-line',
+  'brackets-fill',
+  'brackets-line',
+  'briefcase-2-fill',
+  'briefcase-2-line',
+  'briefcase-3-fill',
+  'briefcase-3-line',
+  'briefcase-4-fill',
+  'briefcase-4-line',
+  'briefcase-5-fill',
+  'briefcase-5-line',
+  'briefcase-fill',
+  'briefcase-line',
+  'bring-forward',
+  'bring-to-front',
+  'broadcast-fill',
+  'broadcast-line',
+  'brush-2-fill',
+  'brush-2-line',
+  'brush-3-fill',
+  'brush-3-line',
+  'brush-4-fill',
+  'brush-4-line',
+  'brush-fill',
+  'brush-line',
+  'bubble-chart-fill',
+  'bubble-chart-line',
+  'bug-2-fill',
+  'bug-2-line',
+  'bug-fill',
+  'bug-line',
+  'building-2-fill',
+  'building-2-line',
+  'building-3-fill',
+  'building-3-line',
+  'building-4-fill',
+  'building-4-line',
+  'building-fill',
+  'building-line',
+  'bus-2-fill',
+  'bus-2-line',
+  'bus-fill',
+  'bus-line',
+  'bus-wifi-fill',
+  'bus-wifi-line',
+  'cactus-fill',
+  'cactus-line',
+  'cake-2-fill',
+  'cake-2-line',
+  'cake-3-fill',
+  'cake-3-line',
+  'cake-fill',
+  'cake-line',
+  'calculator-fill',
+  'calculator-line',
+  'calendar-2-fill',
+  'calendar-2-line',
+  'calendar-check-fill',
+  'calendar-check-line',
+  'calendar-event-fill',
+  'calendar-event-line',
+  'calendar-fill',
+  'calendar-line',
+  'calendar-todo-fill',
+  'calendar-todo-line',
+  'camera-2-fill',
+  'camera-2-line',
+  'camera-3-fill',
+  'camera-3-line',
+  'camera-fill',
+  'camera-lens-fill',
+  'camera-lens-line',
+  'camera-line',
+  'camera-off-fill',
+  'camera-off-line',
+  'camera-switch-fill',
+  'camera-switch-line',
+  'capsule-fill',
+  'capsule-line',
+  'car-fill',
+  'car-line',
+  'car-washing-fill',
+  'car-washing-line',
+  'caravan-fill',
+  'caravan-line',
+  'cast-fill',
+  'cast-line',
+  'cellphone-fill',
+  'cellphone-line',
+  'celsius-fill',
+  'celsius-line',
+  'centos-fill',
+  'centos-line',
+  'character-recognition-fill',
+  'character-recognition-line',
+  'charging-pile-2-fill',
+  'charging-pile-2-line',
+  'charging-pile-fill',
+  'charging-pile-line',
+  'chat-1-fill',
+  'chat-1-line',
+  'chat-2-fill',
+  'chat-2-line',
+  'chat-3-fill',
+  'chat-3-line',
+  'chat-4-fill',
+  'chat-4-line',
+  'chat-check-fill',
+  'chat-check-line',
+  'chat-delete-fill',
+  'chat-delete-line',
+  'chat-download-fill',
+  'chat-download-line',
+  'chat-follow-up-fill',
+  'chat-follow-up-line',
+  'chat-forward-fill',
+  'chat-forward-line',
+  'chat-heart-fill',
+  'chat-heart-line',
+  'chat-history-fill',
+  'chat-history-line',
+  'chat-new-fill',
+  'chat-new-line',
+  'chat-off-fill',
+  'chat-off-line',
+  'chat-poll-fill',
+  'chat-poll-line',
+  'chat-private-fill',
+  'chat-private-line',
+  'chat-quote-fill',
+  'chat-quote-line',
+  'chat-settings-fill',
+  'chat-settings-line',
+  'chat-smile-2-fill',
+  'chat-smile-2-line',
+  'chat-smile-3-fill',
+  'chat-smile-3-line',
+  'chat-smile-fill',
+  'chat-smile-line',
+  'chat-upload-fill',
+  'chat-upload-line',
+  'chat-voice-fill',
+  'chat-voice-line',
+  'check-double-fill',
+  'check-double-line',
+  'check-fill',
+  'check-line',
+  'checkbox-blank-circle-fill',
+  'checkbox-blank-circle-line',
+  'checkbox-blank-fill',
+  'checkbox-blank-line',
+  'checkbox-circle-fill',
+  'checkbox-circle-line',
+  'checkbox-fill',
+  'checkbox-indeterminate-fill',
+  'checkbox-indeterminate-line',
+  'checkbox-line',
+  'checkbox-multiple-blank-fill',
+  'checkbox-multiple-blank-line',
+  'checkbox-multiple-fill',
+  'checkbox-multiple-line',
+  'china-railway-fill',
+  'china-railway-line',
+  'chrome-fill',
+  'chrome-line',
+  'clapperboard-fill',
+  'clapperboard-line',
+  'clipboard-fill',
+  'clipboard-line',
+  'clockwise-2-fill',
+  'clockwise-2-line',
+  'clockwise-fill',
+  'clockwise-line',
+  'close-circle-fill',
+  'close-circle-line',
+  'close-fill',
+  'close-line',
+  'closed-captioning-fill',
+  'closed-captioning-line',
+  'cloud-fill',
+  'cloud-line',
+  'cloud-off-fill',
+  'cloud-off-line',
+  'cloud-windy-fill',
+  'cloud-windy-line',
+  'cloudy-2-fill',
+  'cloudy-2-line',
+  'cloudy-fill',
+  'cloudy-line',
+  'code-box-fill',
+  'code-box-line',
+  'code-fill',
+  'code-line',
+  'code-s-fill',
+  'code-s-line',
+  'code-s-slash-fill',
+  'code-s-slash-line',
+  'code-view',
+  'codepen-fill',
+  'codepen-line',
+  'coin-fill',
+  'coin-line',
+  'coins-fill',
+  'coins-line',
+  'collage-fill',
+  'collage-line',
+  'command-fill',
+  'command-line',
+  'community-fill',
+  'community-line',
+  'compass-2-fill',
+  'compass-2-line',
+  'compass-3-fill',
+  'compass-3-line',
+  'compass-4-fill',
+  'compass-4-line',
+  'compass-discover-fill',
+  'compass-discover-line',
+  'compass-fill',
+  'compass-line',
+  'compasses-2-fill',
+  'compasses-2-line',
+  'compasses-fill',
+  'compasses-line',
+  'computer-fill',
+  'computer-line',
+  'contacts-book-2-fill',
+  'contacts-book-2-line',
+  'contacts-book-fill',
+  'contacts-book-line',
+  'contacts-book-upload-fill',
+  'contacts-book-upload-line',
+  'contacts-fill',
+  'contacts-line',
+  'contrast-2-fill',
+  'contrast-2-line',
+  'contrast-drop-2-fill',
+  'contrast-drop-2-line',
+  'contrast-drop-fill',
+  'contrast-drop-line',
+  'contrast-fill',
+  'contrast-line',
+  'copper-coin-fill',
+  'copper-coin-line',
+  'copper-diamond-fill',
+  'copper-diamond-line',
+  'copyleft-fill',
+  'copyleft-line',
+  'copyright-fill',
+  'copyright-line',
+  'coreos-fill',
+  'coreos-line',
+  'coupon-2-fill',
+  'coupon-2-line',
+  'coupon-3-fill',
+  'coupon-3-line',
+  'coupon-4-fill',
+  'coupon-4-line',
+  'coupon-5-fill',
+  'coupon-5-line',
+  'coupon-fill',
+  'coupon-line',
+  'cpu-fill',
+  'cpu-line',
+  'creative-commons-by-fill',
+  'creative-commons-by-line',
+  'creative-commons-fill',
+  'creative-commons-line',
+  'creative-commons-nc-fill',
+  'creative-commons-nc-line',
+  'creative-commons-nd-fill',
+  'creative-commons-nd-line',
+  'creative-commons-sa-fill',
+  'creative-commons-sa-line',
+  'creative-commons-zero-fill',
+  'creative-commons-zero-line',
+  'criminal-fill',
+  'criminal-line',
+  'crop-2-fill',
+  'crop-2-line',
+  'crop-fill',
+  'crop-line',
+  'css3-fill',
+  'css3-line',
+  'cup-fill',
+  'cup-line',
+  'currency-fill',
+  'currency-line',
+  'cursor-fill',
+  'cursor-line',
+  'customer-service-2-fill',
+  'customer-service-2-line',
+  'customer-service-fill',
+  'customer-service-line',
+  'dashboard-2-fill',
+  'dashboard-2-line',
+  'dashboard-3-fill',
+  'dashboard-3-line',
+  'dashboard-fill',
+  'dashboard-line',
+  'database-2-fill',
+  'database-2-line',
+  'database-fill',
+  'database-line',
+  'delete-back-2-fill',
+  'delete-back-2-line',
+  'delete-back-fill',
+  'delete-back-line',
+  'delete-bin-2-fill',
+  'delete-bin-2-line',
+  'delete-bin-3-fill',
+  'delete-bin-3-line',
+  'delete-bin-4-fill',
+  'delete-bin-4-line',
+  'delete-bin-5-fill',
+  'delete-bin-5-line',
+  'delete-bin-6-fill',
+  'delete-bin-6-line',
+  'delete-bin-7-fill',
+  'delete-bin-7-line',
+  'delete-bin-fill',
+  'delete-bin-line',
+  'delete-column',
+  'delete-row',
+  'device-fill',
+  'device-line',
+  'device-recover-fill',
+  'device-recover-line',
+  'dingding-fill',
+  'dingding-line',
+  'direction-fill',
+  'direction-line',
+  'disc-fill',
+  'disc-line',
+  'discord-fill',
+  'discord-line',
+  'discuss-fill',
+  'discuss-line',
+  'dislike-fill',
+  'dislike-line',
+  'disqus-fill',
+  'disqus-line',
+  'divide-fill',
+  'divide-line',
+  'donut-chart-fill',
+  'donut-chart-line',
+  'door-closed-fill',
+  'door-closed-line',
+  'door-fill',
+  'door-line',
+  'door-lock-box-fill',
+  'door-lock-box-line',
+  'door-lock-fill',
+  'door-lock-line',
+  'door-open-fill',
+  'door-open-line',
+  'dossier-fill',
+  'dossier-line',
+  'douban-fill',
+  'douban-line',
+  'double-quotes-l',
+  'double-quotes-r',
+  'download-2-fill',
+  'download-2-line',
+  'download-cloud-2-fill',
+  'download-cloud-2-line',
+  'download-cloud-fill',
+  'download-cloud-line',
+  'download-fill',
+  'download-line',
+  'draft-fill',
+  'draft-line',
+  'drag-drop-fill',
+  'drag-drop-line',
+  'drag-move-2-fill',
+  'drag-move-2-line',
+  'drag-move-fill',
+  'drag-move-line',
+  'dribbble-fill',
+  'dribbble-line',
+  'drive-fill',
+  'drive-line',
+  'drizzle-fill',
+  'drizzle-line',
+  'drop-fill',
+  'drop-line',
+  'dropbox-fill',
+  'dropbox-line',
+  'dual-sim-1-fill',
+  'dual-sim-1-line',
+  'dual-sim-2-fill',
+  'dual-sim-2-line',
+  'dv-fill',
+  'dv-line',
+  'dvd-fill',
+  'dvd-line',
+  'e-bike-2-fill',
+  'e-bike-2-line',
+  'e-bike-fill',
+  'e-bike-line',
+  'earth-fill',
+  'earth-line',
+  'earthquake-fill',
+  'earthquake-line',
+  'edge-fill',
+  'edge-line',
+  'edit-2-fill',
+  'edit-2-line',
+  'edit-box-fill',
+  'edit-box-line',
+  'edit-circle-fill',
+  'edit-circle-line',
+  'edit-fill',
+  'edit-line',
+  'eject-fill',
+  'eject-line',
+  'emotion-2-fill',
+  'emotion-2-line',
+  'emotion-fill',
+  'emotion-happy-fill',
+  'emotion-happy-line',
+  'emotion-laugh-fill',
+  'emotion-laugh-line',
+  'emotion-line',
+  'emotion-normal-fill',
+  'emotion-normal-line',
+  'emotion-sad-fill',
+  'emotion-sad-line',
+  'emotion-unhappy-fill',
+  'emotion-unhappy-line',
+  'empathize-fill',
+  'empathize-line',
+  'emphasis-cn',
+  'emphasis',
+  'english-input',
+  'equalizer-fill',
+  'equalizer-line',
+  'eraser-fill',
+  'eraser-line',
+  'error-warning-fill',
+  'error-warning-line',
+  'evernote-fill',
+  'evernote-line',
+  'exchange-box-fill',
+  'exchange-box-line',
+  'exchange-cny-fill',
+  'exchange-cny-line',
+  'exchange-dollar-fill',
+  'exchange-dollar-line',
+  'exchange-fill',
+  'exchange-funds-fill',
+  'exchange-funds-line',
+  'exchange-line',
+  'external-link-fill',
+  'external-link-line',
+  'eye-2-fill',
+  'eye-2-line',
+  'eye-close-fill',
+  'eye-close-line',
+  'eye-fill',
+  'eye-line',
+  'eye-off-fill',
+  'eye-off-line',
+  'facebook-box-fill',
+  'facebook-box-line',
+  'facebook-circle-fill',
+  'facebook-circle-line',
+  'facebook-fill',
+  'facebook-line',
+  'fahrenheit-fill',
+  'fahrenheit-line',
+  'feedback-fill',
+  'feedback-line',
+  'file-2-fill',
+  'file-2-line',
+  'file-3-fill',
+  'file-3-line',
+  'file-4-fill',
+  'file-4-line',
+  'file-add-fill',
+  'file-add-line',
+  'file-chart-2-fill',
+  'file-chart-2-line',
+  'file-chart-fill',
+  'file-chart-line',
+  'file-cloud-fill',
+  'file-cloud-line',
+  'file-code-fill',
+  'file-code-line',
+  'file-copy-2-fill',
+  'file-copy-2-line',
+  'file-copy-fill',
+  'file-copy-line',
+  'file-damage-fill',
+  'file-damage-line',
+  'file-download-fill',
+  'file-download-line',
+  'file-edit-fill',
+  'file-edit-line',
+  'file-excel-2-fill',
+  'file-excel-2-line',
+  'file-excel-fill',
+  'file-excel-line',
+  'file-fill',
+  'file-forbid-fill',
+  'file-forbid-line',
+  'file-gif-fill',
+  'file-gif-line',
+  'file-history-fill',
+  'file-history-line',
+  'file-hwp-fill',
+  'file-hwp-line',
+  'file-info-fill',
+  'file-info-line',
+  'file-line',
+  'file-list-2-fill',
+  'file-list-2-line',
+  'file-list-3-fill',
+  'file-list-3-line',
+  'file-list-fill',
+  'file-list-line',
+  'file-lock-fill',
+  'file-lock-line',
+  'file-mark-fill',
+  'file-mark-line',
+  'file-music-fill',
+  'file-music-line',
+  'file-paper-2-fill',
+  'file-paper-2-line',
+  'file-paper-fill',
+  'file-paper-line',
+  'file-pdf-fill',
+  'file-pdf-line',
+  'file-ppt-2-fill',
+  'file-ppt-2-line',
+  'file-ppt-fill',
+  'file-ppt-line',
+  'file-reduce-fill',
+  'file-reduce-line',
+  'file-search-fill',
+  'file-search-line',
+  'file-settings-fill',
+  'file-settings-line',
+  'file-shield-2-fill',
+  'file-shield-2-line',
+  'file-shield-fill',
+  'file-shield-line',
+  'file-shred-fill',
+  'file-shred-line',
+  'file-text-fill',
+  'file-text-line',
+  'file-transfer-fill',
+  'file-transfer-line',
+  'file-unknow-fill',
+  'file-unknow-line',
+  'file-upload-fill',
+  'file-upload-line',
+  'file-user-fill',
+  'file-user-line',
+  'file-warning-fill',
+  'file-warning-line',
+  'file-word-2-fill',
+  'file-word-2-line',
+  'file-word-fill',
+  'file-word-line',
+  'file-zip-fill',
+  'file-zip-line',
+  'film-fill',
+  'film-line',
+  'filter-2-fill',
+  'filter-2-line',
+  'filter-3-fill',
+  'filter-3-line',
+  'filter-fill',
+  'filter-line',
+  'filter-off-fill',
+  'filter-off-line',
+  'find-replace-fill',
+  'find-replace-line',
+  'finder-fill',
+  'finder-line',
+  'fingerprint-2-fill',
+  'fingerprint-2-line',
+  'fingerprint-fill',
+  'fingerprint-line',
+  'fire-fill',
+  'fire-line',
+  'firefox-fill',
+  'firefox-line',
+  'first-aid-kit-fill',
+  'first-aid-kit-line',
+  'flag-2-fill',
+  'flag-2-line',
+  'flag-fill',
+  'flag-line',
+  'flashlight-fill',
+  'flashlight-line',
+  'flask-fill',
+  'flask-line',
+  'flight-land-fill',
+  'flight-land-line',
+  'flight-takeoff-fill',
+  'flight-takeoff-line',
+  'flood-fill',
+  'flood-line',
+  'flow-chart',
+  'flutter-fill',
+  'flutter-line',
+  'focus-2-fill',
+  'focus-2-line',
+  'focus-3-fill',
+  'focus-3-line',
+  'focus-fill',
+  'focus-line',
+  'foggy-fill',
+  'foggy-line',
+  'folder-2-fill',
+  'folder-2-line',
+  'folder-3-fill',
+  'folder-3-line',
+  'folder-4-fill',
+  'folder-4-line',
+  'folder-5-fill',
+  'folder-5-line',
+  'folder-add-fill',
+  'folder-add-line',
+  'folder-chart-2-fill',
+  'folder-chart-2-line',
+  'folder-chart-fill',
+  'folder-chart-line',
+  'folder-download-fill',
+  'folder-download-line',
+  'folder-fill',
+  'folder-forbid-fill',
+  'folder-forbid-line',
+  'folder-history-fill',
+  'folder-history-line',
+  'folder-info-fill',
+  'folder-info-line',
+  'folder-keyhole-fill',
+  'folder-keyhole-line',
+  'folder-line',
+  'folder-lock-fill',
+  'folder-lock-line',
+  'folder-music-fill',
+  'folder-music-line',
+  'folder-open-fill',
+  'folder-open-line',
+  'folder-received-fill',
+  'folder-received-line',
+  'folder-reduce-fill',
+  'folder-reduce-line',
+  'folder-settings-fill',
+  'folder-settings-line',
+  'folder-shared-fill',
+  'folder-shared-line',
+  'folder-shield-2-fill',
+  'folder-shield-2-line',
+  'folder-shield-fill',
+  'folder-shield-line',
+  'folder-transfer-fill',
+  'folder-transfer-line',
+  'folder-unknow-fill',
+  'folder-unknow-line',
+  'folder-upload-fill',
+  'folder-upload-line',
+  'folder-user-fill',
+  'folder-user-line',
+  'folder-warning-fill',
+  'folder-warning-line',
+  'folder-zip-fill',
+  'folder-zip-line',
+  'folders-fill',
+  'folders-line',
+  'font-color',
+  'font-size-2',
+  'font-size',
+  'football-fill',
+  'football-line',
+  'footprint-fill',
+  'footprint-line',
+  'forbid-2-fill',
+  'forbid-2-line',
+  'forbid-fill',
+  'forbid-line',
+  'format-clear',
+  'fridge-fill',
+  'fridge-line',
+  'fullscreen-exit-fill',
+  'fullscreen-exit-line',
+  'fullscreen-fill',
+  'fullscreen-line',
+  'function-fill',
+  'function-line',
+  'functions',
+  'funds-box-fill',
+  'funds-box-line',
+  'funds-fill',
+  'funds-line',
+  'gallery-fill',
+  'gallery-line',
+  'gallery-upload-fill',
+  'gallery-upload-line',
+  'game-fill',
+  'game-line',
+  'gamepad-fill',
+  'gamepad-line',
+  'gas-station-fill',
+  'gas-station-line',
+  'gatsby-fill',
+  'gatsby-line',
+  'genderless-fill',
+  'genderless-line',
+  'ghost-2-fill',
+  'ghost-2-line',
+  'ghost-fill',
+  'ghost-line',
+  'ghost-smile-fill',
+  'ghost-smile-line',
+  'gift-2-fill',
+  'gift-2-line',
+  'gift-fill',
+  'gift-line',
+  'git-branch-fill',
+  'git-branch-line',
+  'git-commit-fill',
+  'git-commit-line',
+  'git-merge-fill',
+  'git-merge-line',
+  'git-pull-request-fill',
+  'git-pull-request-line',
+  'git-repository-commits-fill',
+  'git-repository-commits-line',
+  'git-repository-fill',
+  'git-repository-line',
+  'git-repository-private-fill',
+  'git-repository-private-line',
+  'github-fill',
+  'github-line',
+  'gitlab-fill',
+  'gitlab-line',
+  'global-fill',
+  'global-line',
+  'globe-fill',
+  'globe-line',
+  'goblet-fill',
+  'goblet-line',
+  'google-fill',
+  'google-line',
+  'google-play-fill',
+  'google-play-line',
+  'government-fill',
+  'government-line',
+  'gps-fill',
+  'gps-line',
+  'gradienter-fill',
+  'gradienter-line',
+  'grid-fill',
+  'grid-line',
+  'group-2-fill',
+  'group-2-line',
+  'group-fill',
+  'group-line',
+  'guide-fill',
+  'guide-line',
+  'h-1',
+  'h-2',
+  'h-3',
+  'h-4',
+  'h-5',
+  'h-6',
+  'hail-fill',
+  'hail-line',
+  'hammer-fill',
+  'hammer-line',
+  'hand-coin-fill',
+  'hand-coin-line',
+  'hand-heart-fill',
+  'hand-heart-line',
+  'hand-sanitizer-fill',
+  'hand-sanitizer-line',
+  'handbag-fill',
+  'handbag-line',
+  'hard-drive-2-fill',
+  'hard-drive-2-line',
+  'hard-drive-fill',
+  'hard-drive-line',
+  'hashtag',
+  'haze-2-fill',
+  'haze-2-line',
+  'haze-fill',
+  'haze-line',
+  'hd-fill',
+  'hd-line',
+  'heading',
+  'headphone-fill',
+  'headphone-line',
+  'health-book-fill',
+  'health-book-line',
+  'heart-2-fill',
+  'heart-2-line',
+  'heart-3-fill',
+  'heart-3-line',
+  'heart-add-fill',
+  'heart-add-line',
+  'heart-fill',
+  'heart-line',
+  'heart-pulse-fill',
+  'heart-pulse-line',
+  'hearts-fill',
+  'hearts-line',
+  'heavy-showers-fill',
+  'heavy-showers-line',
+  'history-fill',
+  'history-line',
+  'home-2-fill',
+  'home-2-line',
+  'home-3-fill',
+  'home-3-line',
+  'home-4-fill',
+  'home-4-line',
+  'home-5-fill',
+  'home-5-line',
+  'home-6-fill',
+  'home-6-line',
+  'home-7-fill',
+  'home-7-line',
+  'home-8-fill',
+  'home-8-line',
+  'home-fill',
+  'home-gear-fill',
+  'home-gear-line',
+  'home-heart-fill',
+  'home-heart-line',
+  'home-line',
+  'home-smile-2-fill',
+  'home-smile-2-line',
+  'home-smile-fill',
+  'home-smile-line',
+  'home-wifi-fill',
+  'home-wifi-line',
+  'honor-of-kings-fill',
+  'honor-of-kings-line',
+  'honour-fill',
+  'honour-line',
+  'hospital-fill',
+  'hospital-line',
+  'hotel-bed-fill',
+  'hotel-bed-line',
+  'hotel-fill',
+  'hotel-line',
+  'hotspot-fill',
+  'hotspot-line',
+  'hq-fill',
+  'hq-line',
+  'html5-fill',
+  'html5-line',
+  'ie-fill',
+  'ie-line',
+  'image-2-fill',
+  'image-2-line',
+  'image-add-fill',
+  'image-add-line',
+  'image-edit-fill',
+  'image-edit-line',
+  'image-fill',
+  'image-line',
+  'inbox-archive-fill',
+  'inbox-archive-line',
+  'inbox-fill',
+  'inbox-line',
+  'inbox-unarchive-fill',
+  'inbox-unarchive-line',
+  'increase-decrease-fill',
+  'increase-decrease-line',
+  'indent-decrease',
+  'indent-increase',
+  'indeterminate-circle-fill',
+  'indeterminate-circle-line',
+  'information-fill',
+  'information-line',
+  'infrared-thermometer-fill',
+  'infrared-thermometer-line',
+  'ink-bottle-fill',
+  'ink-bottle-line',
+  'input-cursor-move',
+  'input-method-fill',
+  'input-method-line',
+  'insert-column-left',
+  'insert-column-right',
+  'insert-row-bottom',
+  'insert-row-top',
+  'instagram-fill',
+  'instagram-line',
+  'install-fill',
+  'install-line',
+  'invision-fill',
+  'invision-line',
+  'italic',
+  'kakao-talk-fill',
+  'kakao-talk-line',
+  'key-2-fill',
+  'key-2-line',
+  'key-fill',
+  'key-line',
+  'keyboard-box-fill',
+  'keyboard-box-line',
+  'keyboard-fill',
+  'keyboard-line',
+  'keynote-fill',
+  'keynote-line',
+  'knife-blood-fill',
+  'knife-blood-line',
+  'knife-fill',
+  'knife-line',
+  'landscape-fill',
+  'landscape-line',
+  'layout-2-fill',
+  'layout-2-line',
+  'layout-3-fill',
+  'layout-3-line',
+  'layout-4-fill',
+  'layout-4-line',
+  'layout-5-fill',
+  'layout-5-line',
+  'layout-6-fill',
+  'layout-6-line',
+  'layout-bottom-2-fill',
+  'layout-bottom-2-line',
+  'layout-bottom-fill',
+  'layout-bottom-line',
+  'layout-column-fill',
+  'layout-column-line',
+  'layout-fill',
+  'layout-grid-fill',
+  'layout-grid-line',
+  'layout-left-2-fill',
+  'layout-left-2-line',
+  'layout-left-fill',
+  'layout-left-line',
+  'layout-line',
+  'layout-masonry-fill',
+  'layout-masonry-line',
+  'layout-right-2-fill',
+  'layout-right-2-line',
+  'layout-right-fill',
+  'layout-right-line',
+  'layout-row-fill',
+  'layout-row-line',
+  'layout-top-2-fill',
+  'layout-top-2-line',
+  'layout-top-fill',
+  'layout-top-line',
+  'leaf-fill',
+  'leaf-line',
+  'lifebuoy-fill',
+  'lifebuoy-line',
+  'lightbulb-fill',
+  'lightbulb-flash-fill',
+  'lightbulb-flash-line',
+  'lightbulb-line',
+  'line-chart-fill',
+  'line-chart-line',
+  'line-fill',
+  'line-height',
+  'line-line',
+  'link-m',
+  'link-unlink-m',
+  'link-unlink',
+  'link',
+  'linkedin-box-fill',
+  'linkedin-box-line',
+  'linkedin-fill',
+  'linkedin-line',
+  'links-fill',
+  'links-line',
+  'list-check-2',
+  'list-check',
+  'list-ordered',
+  'list-settings-fill',
+  'list-settings-line',
+  'list-unordered',
+  'live-fill',
+  'live-line',
+  'loader-2-fill',
+  'loader-2-line',
+  'loader-3-fill',
+  'loader-3-line',
+  'loader-4-fill',
+  'loader-4-line',
+  'loader-5-fill',
+  'loader-5-line',
+  'loader-fill',
+  'loader-line',
+  'lock-2-fill',
+  'lock-2-line',
+  'lock-fill',
+  'lock-line',
+  'lock-password-fill',
+  'lock-password-line',
+  'lock-unlock-fill',
+  'lock-unlock-line',
+  'login-box-fill',
+  'login-box-line',
+  'login-circle-fill',
+  'login-circle-line',
+  'logout-box-fill',
+  'logout-box-line',
+  'logout-box-r-fill',
+  'logout-box-r-line',
+  'logout-circle-fill',
+  'logout-circle-line',
+  'logout-circle-r-fill',
+  'logout-circle-r-line',
+  'luggage-cart-fill',
+  'luggage-cart-line',
+  'luggage-deposit-fill',
+  'luggage-deposit-line',
+  'lungs-fill',
+  'lungs-line',
+  'mac-fill',
+  'mac-line',
+  'macbook-fill',
+  'macbook-line',
+  'magic-fill',
+  'magic-line',
+  'mail-add-fill',
+  'mail-add-line',
+  'mail-check-fill',
+  'mail-check-line',
+  'mail-close-fill',
+  'mail-close-line',
+  'mail-download-fill',
+  'mail-download-line',
+  'mail-fill',
+  'mail-forbid-fill',
+  'mail-forbid-line',
+  'mail-line',
+  'mail-lock-fill',
+  'mail-lock-line',
+  'mail-open-fill',
+  'mail-open-line',
+  'mail-send-fill',
+  'mail-send-line',
+  'mail-settings-fill',
+  'mail-settings-line',
+  'mail-star-fill',
+  'mail-star-line',
+  'mail-unread-fill',
+  'mail-unread-line',
+  'mail-volume-fill',
+  'mail-volume-line',
+  'map-2-fill',
+  'map-2-line',
+  'map-fill',
+  'map-line',
+  'map-pin-2-fill',
+  'map-pin-2-line',
+  'map-pin-3-fill',
+  'map-pin-3-line',
+  'map-pin-4-fill',
+  'map-pin-4-line',
+  'map-pin-5-fill',
+  'map-pin-5-line',
+  'map-pin-add-fill',
+  'map-pin-add-line',
+  'map-pin-fill',
+  'map-pin-line',
+  'map-pin-range-fill',
+  'map-pin-range-line',
+  'map-pin-time-fill',
+  'map-pin-time-line',
+  'map-pin-user-fill',
+  'map-pin-user-line',
+  'mark-pen-fill',
+  'mark-pen-line',
+  'markdown-fill',
+  'markdown-line',
+  'markup-fill',
+  'markup-line',
+  'mastercard-fill',
+  'mastercard-line',
+  'mastodon-fill',
+  'mastodon-line',
+  'medal-2-fill',
+  'medal-2-line',
+  'medal-fill',
+  'medal-line',
+  'medicine-bottle-fill',
+  'medicine-bottle-line',
+  'medium-fill',
+  'medium-line',
+  'men-fill',
+  'men-line',
+  'mental-health-fill',
+  'mental-health-line',
+  'menu-2-fill',
+  'menu-2-line',
+  'menu-3-fill',
+  'menu-3-line',
+  'menu-4-fill',
+  'menu-4-line',
+  'menu-5-fill',
+  'menu-5-line',
+  'menu-add-fill',
+  'menu-add-line',
+  'menu-fill',
+  'menu-fold-fill',
+  'menu-fold-line',
+  'menu-line',
+  'menu-unfold-fill',
+  'menu-unfold-line',
+  'merge-cells-horizontal',
+  'merge-cells-vertical',
+  'message-2-fill',
+  'message-2-line',
+  'message-3-fill',
+  'message-3-line',
+  'message-fill',
+  'message-line',
+  'messenger-fill',
+  'messenger-line',
+  'meteor-fill',
+  'meteor-line',
+  'mic-2-fill',
+  'mic-2-line',
+  'mic-fill',
+  'mic-line',
+  'mic-off-fill',
+  'mic-off-line',
+  'mickey-fill',
+  'mickey-line',
+  'microscope-fill',
+  'microscope-line',
+  'microsoft-fill',
+  'microsoft-line',
+  'mind-map',
+  'mini-program-fill',
+  'mini-program-line',
+  'mist-fill',
+  'mist-line',
+  'money-cny-box-fill',
+  'money-cny-box-line',
+  'money-cny-circle-fill',
+  'money-cny-circle-line',
+  'money-dollar-box-fill',
+  'money-dollar-box-line',
+  'money-dollar-circle-fill',
+  'money-dollar-circle-line',
+  'money-euro-box-fill',
+  'money-euro-box-line',
+  'money-euro-circle-fill',
+  'money-euro-circle-line',
+  'money-pound-box-fill',
+  'money-pound-box-line',
+  'money-pound-circle-fill',
+  'money-pound-circle-line',
+  'moon-clear-fill',
+  'moon-clear-line',
+  'moon-cloudy-fill',
+  'moon-cloudy-line',
+  'moon-fill',
+  'moon-foggy-fill',
+  'moon-foggy-line',
+  'moon-line',
+  'more-2-fill',
+  'more-2-line',
+  'more-fill',
+  'more-line',
+  'motorbike-fill',
+  'motorbike-line',
+  'mouse-fill',
+  'mouse-line',
+  'movie-2-fill',
+  'movie-2-line',
+  'movie-fill',
+  'movie-line',
+  'music-2-fill',
+  'music-2-line',
+  'music-fill',
+  'music-line',
+  'mv-fill',
+  'mv-line',
+  'navigation-fill',
+  'navigation-line',
+  'netease-cloud-music-fill',
+  'netease-cloud-music-line',
+  'netflix-fill',
+  'netflix-line',
+  'newspaper-fill',
+  'newspaper-line',
+  'node-tree',
+  'notification-2-fill',
+  'notification-2-line',
+  'notification-3-fill',
+  'notification-3-line',
+  'notification-4-fill',
+  'notification-4-line',
+  'notification-badge-fill',
+  'notification-badge-line',
+  'notification-fill',
+  'notification-line',
+  'notification-off-fill',
+  'notification-off-line',
+  'npmjs-fill',
+  'npmjs-line',
+  'number-0',
+  'number-1',
+  'number-2',
+  'number-3',
+  'number-4',
+  'number-5',
+  'number-6',
+  'number-7',
+  'number-8',
+  'number-9',
+  'numbers-fill',
+  'numbers-line',
+  'nurse-fill',
+  'nurse-line',
+  'oil-fill',
+  'oil-line',
+  'omega',
+  'open-arm-fill',
+  'open-arm-line',
+  'open-source-fill',
+  'open-source-line',
+  'opera-fill',
+  'opera-line',
+  'order-play-fill',
+  'order-play-line',
+  'organization-chart',
+  'outlet-2-fill',
+  'outlet-2-line',
+  'outlet-fill',
+  'outlet-line',
+  'page-separator',
+  'pages-fill',
+  'pages-line',
+  'paint-brush-fill',
+  'paint-brush-line',
+  'paint-fill',
+  'paint-line',
+  'palette-fill',
+  'palette-line',
+  'pantone-fill',
+  'pantone-line',
+  'paragraph',
+  'parent-fill',
+  'parent-line',
+  'parentheses-fill',
+  'parentheses-line',
+  'parking-box-fill',
+  'parking-box-line',
+  'parking-fill',
+  'parking-line',
+  'passport-fill',
+  'passport-line',
+  'patreon-fill',
+  'patreon-line',
+  'pause-circle-fill',
+  'pause-circle-line',
+  'pause-fill',
+  'pause-line',
+  'pause-mini-fill',
+  'pause-mini-line',
+  'paypal-fill',
+  'paypal-line',
+  'pen-nib-fill',
+  'pen-nib-line',
+  'pencil-fill',
+  'pencil-line',
+  'pencil-ruler-2-fill',
+  'pencil-ruler-2-line',
+  'pencil-ruler-fill',
+  'pencil-ruler-line',
+  'percent-fill',
+  'percent-line',
+  'phone-camera-fill',
+  'phone-camera-line',
+  'phone-fill',
+  'phone-find-fill',
+  'phone-find-line',
+  'phone-line',
+  'phone-lock-fill',
+  'phone-lock-line',
+  'picture-in-picture-2-fill',
+  'picture-in-picture-2-line',
+  'picture-in-picture-exit-fill',
+  'picture-in-picture-exit-line',
+  'picture-in-picture-fill',
+  'picture-in-picture-line',
+  'pie-chart-2-fill',
+  'pie-chart-2-line',
+  'pie-chart-box-fill',
+  'pie-chart-box-line',
+  'pie-chart-fill',
+  'pie-chart-line',
+  'pin-distance-fill',
+  'pin-distance-line',
+  'ping-pong-fill',
+  'ping-pong-line',
+  'pinterest-fill',
+  'pinterest-line',
+  'pinyin-input',
+  'pixelfed-fill',
+  'pixelfed-line',
+  'plane-fill',
+  'plane-line',
+  'plant-fill',
+  'plant-line',
+  'play-circle-fill',
+  'play-circle-line',
+  'play-fill',
+  'play-line',
+  'play-list-2-fill',
+  'play-list-2-line',
+  'play-list-add-fill',
+  'play-list-add-line',
+  'play-list-fill',
+  'play-list-line',
+  'play-mini-fill',
+  'play-mini-line',
+  'playstation-fill',
+  'playstation-line',
+  'plug-2-fill',
+  'plug-2-line',
+  'plug-fill',
+  'plug-line',
+  'polaroid-2-fill',
+  'polaroid-2-line',
+  'polaroid-fill',
+  'polaroid-line',
+  'police-car-fill',
+  'police-car-line',
+  'price-tag-2-fill',
+  'price-tag-2-line',
+  'price-tag-3-fill',
+  'price-tag-3-line',
+  'price-tag-fill',
+  'price-tag-line',
+  'printer-cloud-fill',
+  'printer-cloud-line',
+  'printer-fill',
+  'printer-line',
+  'product-hunt-fill',
+  'product-hunt-line',
+  'profile-fill',
+  'profile-line',
+  'projector-2-fill',
+  'projector-2-line',
+  'projector-fill',
+  'projector-line',
+  'psychotherapy-fill',
+  'psychotherapy-line',
+  'pulse-fill',
+  'pulse-line',
+  'pushpin-2-fill',
+  'pushpin-2-line',
+  'pushpin-fill',
+  'pushpin-line',
+  'qq-fill',
+  'qq-line',
+  'qr-code-fill',
+  'qr-code-line',
+  'qr-scan-2-fill',
+  'qr-scan-2-line',
+  'qr-scan-fill',
+  'qr-scan-line',
+  'question-answer-fill',
+  'question-answer-line',
+  'question-fill',
+  'question-line',
+  'question-mark',
+  'questionnaire-fill',
+  'questionnaire-line',
+  'quill-pen-fill',
+  'quill-pen-line',
+  'radar-fill',
+  'radar-line',
+  'radio-2-fill',
+  'radio-2-line',
+  'radio-button-fill',
+  'radio-button-line',
+  'radio-fill',
+  'radio-line',
+  'rainbow-fill',
+  'rainbow-line',
+  'rainy-fill',
+  'rainy-line',
+  'reactjs-fill',
+  'reactjs-line',
+  'record-circle-fill',
+  'record-circle-line',
+  'record-mail-fill',
+  'record-mail-line',
+  'recycle-fill',
+  'recycle-line',
+  'red-packet-fill',
+  'red-packet-line',
+  'reddit-fill',
+  'reddit-line',
+  'refresh-fill',
+  'refresh-line',
+  'refund-2-fill',
+  'refund-2-line',
+  'refund-fill',
+  'refund-line',
+  'registered-fill',
+  'registered-line',
+  'remixicon-fill',
+  'remixicon-line',
+  'remote-control-2-fill',
+  'remote-control-2-line',
+  'remote-control-fill',
+  'remote-control-line',
+  'repeat-2-fill',
+  'repeat-2-line',
+  'repeat-fill',
+  'repeat-line',
+  'repeat-one-fill',
+  'repeat-one-line',
+  'reply-all-fill',
+  'reply-all-line',
+  'reply-fill',
+  'reply-line',
+  'reserved-fill',
+  'reserved-line',
+  'rest-time-fill',
+  'rest-time-line',
+  'restart-fill',
+  'restart-line',
+  'restaurant-2-fill',
+  'restaurant-2-line',
+  'restaurant-fill',
+  'restaurant-line',
+  'rewind-fill',
+  'rewind-line',
+  'rewind-mini-fill',
+  'rewind-mini-line',
+  'rhythm-fill',
+  'rhythm-line',
+  'riding-fill',
+  'riding-line',
+  'road-map-fill',
+  'road-map-line',
+  'roadster-fill',
+  'roadster-line',
+  'robot-fill',
+  'robot-line',
+  'rocket-2-fill',
+  'rocket-2-line',
+  'rocket-fill',
+  'rocket-line',
+  'rotate-lock-fill',
+  'rotate-lock-line',
+  'rounded-corner',
+  'route-fill',
+  'route-line',
+  'router-fill',
+  'router-line',
+  'rss-fill',
+  'rss-line',
+  'ruler-2-fill',
+  'ruler-2-line',
+  'ruler-fill',
+  'ruler-line',
+  'run-fill',
+  'run-line',
+  'safari-fill',
+  'safari-line',
+  'safe-2-fill',
+  'safe-2-line',
+  'safe-fill',
+  'safe-line',
+  'sailboat-fill',
+  'sailboat-line',
+  'save-2-fill',
+  'save-2-line',
+  'save-3-fill',
+  'save-3-line',
+  'save-fill',
+  'save-line',
+  'scales-2-fill',
+  'scales-2-line',
+  'scales-3-fill',
+  'scales-3-line',
+  'scales-fill',
+  'scales-line',
+  'scan-2-fill',
+  'scan-2-line',
+  'scan-fill',
+  'scan-line',
+  'scissors-2-fill',
+  'scissors-2-line',
+  'scissors-cut-fill',
+  'scissors-cut-line',
+  'scissors-fill',
+  'scissors-line',
+  'screenshot-2-fill',
+  'screenshot-2-line',
+  'screenshot-fill',
+  'screenshot-line',
+  'sd-card-fill',
+  'sd-card-line',
+  'sd-card-mini-fill',
+  'sd-card-mini-line',
+  'search-2-fill',
+  'search-2-line',
+  'search-eye-fill',
+  'search-eye-line',
+  'search-fill',
+  'search-line',
+  'secure-payment-fill',
+  'secure-payment-line',
+  'seedling-fill',
+  'seedling-line',
+  'send-backward',
+  'send-plane-2-fill',
+  'send-plane-2-line',
+  'send-plane-fill',
+  'send-plane-line',
+  'send-to-back',
+  'sensor-fill',
+  'sensor-line',
+  'separator',
+  'server-fill',
+  'server-line',
+  'service-fill',
+  'service-line',
+  'settings-2-fill',
+  'settings-2-line',
+  'settings-3-fill',
+  'settings-3-line',
+  'settings-4-fill',
+  'settings-4-line',
+  'settings-5-fill',
+  'settings-5-line',
+  'settings-6-fill',
+  'settings-6-line',
+  'settings-fill',
+  'settings-line',
+  'shape-2-fill',
+  'shape-2-line',
+  'shape-fill',
+  'shape-line',
+  'share-box-fill',
+  'share-box-line',
+  'share-circle-fill',
+  'share-circle-line',
+  'share-fill',
+  'share-forward-2-fill',
+  'share-forward-2-line',
+  'share-forward-box-fill',
+  'share-forward-box-line',
+  'share-forward-fill',
+  'share-forward-line',
+  'share-line',
+  'shield-check-fill',
+  'shield-check-line',
+  'shield-cross-fill',
+  'shield-cross-line',
+  'shield-fill',
+  'shield-flash-fill',
+  'shield-flash-line',
+  'shield-keyhole-fill',
+  'shield-keyhole-line',
+  'shield-line',
+  'shield-star-fill',
+  'shield-star-line',
+  'shield-user-fill',
+  'shield-user-line',
+  'ship-2-fill',
+  'ship-2-line',
+  'ship-fill',
+  'ship-line',
+  'shirt-fill',
+  'shirt-line',
+  'shopping-bag-2-fill',
+  'shopping-bag-2-line',
+  'shopping-bag-3-fill',
+  'shopping-bag-3-line',
+  'shopping-bag-fill',
+  'shopping-bag-line',
+  'shopping-basket-2-fill',
+  'shopping-basket-2-line',
+  'shopping-basket-fill',
+  'shopping-basket-line',
+  'shopping-cart-2-fill',
+  'shopping-cart-2-line',
+  'shopping-cart-fill',
+  'shopping-cart-line',
+  'showers-fill',
+  'showers-line',
+  'shuffle-fill',
+  'shuffle-line',
+  'shut-down-fill',
+  'shut-down-line',
+  'side-bar-fill',
+  'side-bar-line',
+  'signal-tower-fill',
+  'signal-tower-line',
+  'signal-wifi-1-fill',
+  'signal-wifi-1-line',
+  'signal-wifi-2-fill',
+  'signal-wifi-2-line',
+  'signal-wifi-3-fill',
+  'signal-wifi-3-line',
+  'signal-wifi-error-fill',
+  'signal-wifi-error-line',
+  'signal-wifi-fill',
+  'signal-wifi-line',
+  'signal-wifi-off-fill',
+  'signal-wifi-off-line',
+  'sim-card-2-fill',
+  'sim-card-2-line',
+  'sim-card-fill',
+  'sim-card-line',
+  'single-quotes-l',
+  'single-quotes-r',
+  'sip-fill',
+  'sip-line',
+  'skip-back-fill',
+  'skip-back-line',
+  'skip-back-mini-fill',
+  'skip-back-mini-line',
+  'skip-forward-fill',
+  'skip-forward-line',
+  'skip-forward-mini-fill',
+  'skip-forward-mini-line',
+  'skull-2-fill',
+  'skull-2-line',
+  'skull-fill',
+  'skull-line',
+  'skype-fill',
+  'skype-line',
+  'slack-fill',
+  'slack-line',
+  'slice-fill',
+  'slice-line',
+  'slideshow-2-fill',
+  'slideshow-2-line',
+  'slideshow-3-fill',
+  'slideshow-3-line',
+  'slideshow-4-fill',
+  'slideshow-4-line',
+  'slideshow-fill',
+  'slideshow-line',
+  'smartphone-fill',
+  'smartphone-line',
+  'snapchat-fill',
+  'snapchat-line',
+  'snowy-fill',
+  'snowy-line',
+  'sort-asc',
+  'sort-desc',
+  'sound-module-fill',
+  'sound-module-line',
+  'soundcloud-fill',
+  'soundcloud-line',
+  'space-ship-fill',
+  'space-ship-line',
+  'space',
+  'spam-2-fill',
+  'spam-2-line',
+  'spam-3-fill',
+  'spam-3-line',
+  'spam-fill',
+  'spam-line',
+  'speaker-2-fill',
+  'speaker-2-line',
+  'speaker-3-fill',
+  'speaker-3-line',
+  'speaker-fill',
+  'speaker-line',
+  'spectrum-fill',
+  'spectrum-line',
+  'speed-fill',
+  'speed-line',
+  'speed-mini-fill',
+  'speed-mini-line',
+  'split-cells-horizontal',
+  'split-cells-vertical',
+  'spotify-fill',
+  'spotify-line',
+  'spy-fill',
+  'spy-line',
+  'stack-fill',
+  'stack-line',
+  'stack-overflow-fill',
+  'stack-overflow-line',
+  'stackshare-fill',
+  'stackshare-line',
+  'star-fill',
+  'star-half-fill',
+  'star-half-line',
+  'star-half-s-fill',
+  'star-half-s-line',
+  'star-line',
+  'star-s-fill',
+  'star-s-line',
+  'star-smile-fill',
+  'star-smile-line',
+  'steam-fill',
+  'steam-line',
+  'steering-2-fill',
+  'steering-2-line',
+  'steering-fill',
+  'steering-line',
+  'stethoscope-fill',
+  'stethoscope-line',
+  'sticky-note-2-fill',
+  'sticky-note-2-line',
+  'sticky-note-fill',
+  'sticky-note-line',
+  'stock-fill',
+  'stock-line',
+  'stop-circle-fill',
+  'stop-circle-line',
+  'stop-fill',
+  'stop-line',
+  'stop-mini-fill',
+  'stop-mini-line',
+  'store-2-fill',
+  'store-2-line',
+  'store-3-fill',
+  'store-3-line',
+  'store-fill',
+  'store-line',
+  'strikethrough-2',
+  'strikethrough',
+  'subscript-2',
+  'subscript',
+  'subtract-fill',
+  'subtract-line',
+  'subway-fill',
+  'subway-line',
+  'subway-wifi-fill',
+  'subway-wifi-line',
+  'suitcase-2-fill',
+  'suitcase-2-line',
+  'suitcase-3-fill',
+  'suitcase-3-line',
+  'suitcase-fill',
+  'suitcase-line',
+  'sun-cloudy-fill',
+  'sun-cloudy-line',
+  'sun-fill',
+  'sun-foggy-fill',
+  'sun-foggy-line',
+  'sun-line',
+  'superscript-2',
+  'superscript',
+  'surgical-mask-fill',
+  'surgical-mask-line',
+  'surround-sound-fill',
+  'surround-sound-line',
+  'survey-fill',
+  'survey-line',
+  'swap-box-fill',
+  'swap-box-line',
+  'swap-fill',
+  'swap-line',
+  'switch-fill',
+  'switch-line',
+  'sword-fill',
+  'sword-line',
+  'syringe-fill',
+  'syringe-line',
+  't-box-fill',
+  't-box-line',
+  't-shirt-2-fill',
+  't-shirt-2-line',
+  't-shirt-air-fill',
+  't-shirt-air-line',
+  't-shirt-fill',
+  't-shirt-line',
+  'table-2',
+  'table-alt-fill',
+  'table-alt-line',
+  'table-fill',
+  'table-line',
+  'tablet-fill',
+  'tablet-line',
+  'takeaway-fill',
+  'takeaway-line',
+  'taobao-fill',
+  'taobao-line',
+  'tape-fill',
+  'tape-line',
+  'task-fill',
+  'task-line',
+  'taxi-fill',
+  'taxi-line',
+  'taxi-wifi-fill',
+  'taxi-wifi-line',
+  'team-fill',
+  'team-line',
+  'telegram-fill',
+  'telegram-line',
+  'temp-cold-fill',
+  'temp-cold-line',
+  'temp-hot-fill',
+  'temp-hot-line',
+  'terminal-box-fill',
+  'terminal-box-line',
+  'terminal-fill',
+  'terminal-line',
+  'terminal-window-fill',
+  'terminal-window-line',
+  'test-tube-fill',
+  'test-tube-line',
+  'text-direction-l',
+  'text-direction-r',
+  'text-spacing',
+  'text-wrap',
+  'text',
+  'thermometer-fill',
+  'thermometer-line',
+  'thumb-down-fill',
+  'thumb-down-line',
+  'thumb-up-fill',
+  'thumb-up-line',
+  'thunderstorms-fill',
+  'thunderstorms-line',
+  'ticket-2-fill',
+  'ticket-2-line',
+  'ticket-fill',
+  'ticket-line',
+  'time-fill',
+  'time-line',
+  'timer-2-fill',
+  'timer-2-line',
+  'timer-fill',
+  'timer-flash-fill',
+  'timer-flash-line',
+  'timer-line',
+  'todo-fill',
+  'todo-line',
+  'toggle-fill',
+  'toggle-line',
+  'tools-fill',
+  'tools-line',
+  'tornado-fill',
+  'tornado-line',
+  'trademark-fill',
+  'trademark-line',
+  'traffic-light-fill',
+  'traffic-light-line',
+  'train-fill',
+  'train-line',
+  'train-wifi-fill',
+  'train-wifi-line',
+  'translate-2',
+  'translate',
+  'travesti-fill',
+  'travesti-line',
+  'treasure-map-fill',
+  'treasure-map-line',
+  'trello-fill',
+  'trello-line',
+  'trophy-fill',
+  'trophy-line',
+  'truck-fill',
+  'truck-line',
+  'tumblr-fill',
+  'tumblr-line',
+  'tv-2-fill',
+  'tv-2-line',
+  'tv-fill',
+  'tv-line',
+  'twitch-fill',
+  'twitch-line',
+  'twitter-fill',
+  'twitter-line',
+  'typhoon-fill',
+  'typhoon-line',
+  'u-disk-fill',
+  'u-disk-line',
+  'ubuntu-fill',
+  'ubuntu-line',
+  'umbrella-fill',
+  'umbrella-line',
+  'underline',
+  'uninstall-fill',
+  'uninstall-line',
+  'unsplash-fill',
+  'unsplash-line',
+  'upload-2-fill',
+  'upload-2-line',
+  'upload-cloud-2-fill',
+  'upload-cloud-2-line',
+  'upload-cloud-fill',
+  'upload-cloud-line',
+  'upload-fill',
+  'upload-line',
+  'usb-fill',
+  'usb-line',
+  'user-2-fill',
+  'user-2-line',
+  'user-3-fill',
+  'user-3-line',
+  'user-4-fill',
+  'user-4-line',
+  'user-5-fill',
+  'user-5-line',
+  'user-6-fill',
+  'user-6-line',
+  'user-add-fill',
+  'user-add-line',
+  'user-fill',
+  'user-follow-fill',
+  'user-follow-line',
+  'user-heart-fill',
+  'user-heart-line',
+  'user-line',
+  'user-location-fill',
+  'user-location-line',
+  'user-received-2-fill',
+  'user-received-2-line',
+  'user-received-fill',
+  'user-received-line',
+  'user-search-fill',
+  'user-search-line',
+  'user-settings-fill',
+  'user-settings-line',
+  'user-shared-2-fill',
+  'user-shared-2-line',
+  'user-shared-fill',
+  'user-shared-line',
+  'user-smile-fill',
+  'user-smile-line',
+  'user-star-fill',
+  'user-star-line',
+  'user-unfollow-fill',
+  'user-unfollow-line',
+  'user-voice-fill',
+  'user-voice-line',
+  'video-add-fill',
+  'video-add-line',
+  'video-chat-fill',
+  'video-chat-line',
+  'video-download-fill',
+  'video-download-line',
+  'video-fill',
+  'video-line',
+  'video-upload-fill',
+  'video-upload-line',
+  'vidicon-2-fill',
+  'vidicon-2-line',
+  'vidicon-fill',
+  'vidicon-line',
+  'vimeo-fill',
+  'vimeo-line',
+  'vip-crown-2-fill',
+  'vip-crown-2-line',
+  'vip-crown-fill',
+  'vip-crown-line',
+  'vip-diamond-fill',
+  'vip-diamond-line',
+  'vip-fill',
+  'vip-line',
+  'virus-fill',
+  'virus-line',
+  'visa-fill',
+  'visa-line',
+  'voice-recognition-fill',
+  'voice-recognition-line',
+  'voiceprint-fill',
+  'voiceprint-line',
+  'volume-down-fill',
+  'volume-down-line',
+  'volume-mute-fill',
+  'volume-mute-line',
+  'volume-off-vibrate-fill',
+  'volume-off-vibrate-line',
+  'volume-up-fill',
+  'volume-up-line',
+  'volume-vibrate-fill',
+  'volume-vibrate-line',
+  'vuejs-fill',
+  'vuejs-line',
+  'walk-fill',
+  'walk-line',
+  'wallet-2-fill',
+  'wallet-2-line',
+  'wallet-3-fill',
+  'wallet-3-line',
+  'wallet-fill',
+  'wallet-line',
+  'water-flash-fill',
+  'water-flash-line',
+  'webcam-fill',
+  'webcam-line',
+  'wechat-2-fill',
+  'wechat-2-line',
+  'wechat-fill',
+  'wechat-line',
+  'wechat-pay-fill',
+  'wechat-pay-line',
+  'weibo-fill',
+  'weibo-line',
+  'whatsapp-fill',
+  'whatsapp-line',
+  'wheelchair-fill',
+  'wheelchair-line',
+  'wifi-fill',
+  'wifi-line',
+  'wifi-off-fill',
+  'wifi-off-line',
+  'window-2-fill',
+  'window-2-line',
+  'window-fill',
+  'window-line',
+  'windows-fill',
+  'windows-line',
+  'windy-fill',
+  'windy-line',
+  'wireless-charging-fill',
+  'wireless-charging-line',
+  'women-fill',
+  'women-line',
+  'wubi-input',
+  'xbox-fill',
+  'xbox-line',
+  'xing-fill',
+  'xing-line',
+  'youtube-fill',
+  'youtube-line',
+  'zcool-fill',
+  'zcool-line',
+  'zhihu-fill',
+  'zhihu-line',
+  'zoom-in-fill',
+  'zoom-in-line',
+  'zoom-out-fill',
+  'zoom-out-line',
+  'zzz-fill',
+  'zzz-line',
+]
+module.exports = [
+  {
+    url: '/icon/getList',
+    type: 'get',
+    response(config) {
+      const { title, current = 1, pageSize = 72 } = config.query
+      let mockList = data.filter((item) => {
+        if (title && item.indexOf(title) < 0) return false
+        return true
+      })
+      const pageList = mockList.filter(
+        (item, index) =>
+          index < pageSize * current && index >= pageSize * (current - 1)
+      )
+      return {
+        code: 200,
+        msg: 'success',
+        totalCount: mockList.length,
+        data: pageList,
+      }
+    },
+  },
+]

+ 37 - 0
mock/controller/router.js

@@ -0,0 +1,37 @@
+const data = [
+  {
+    path: '/',
+    component: 'Layout',
+    redirect: '/index',
+    meta: {
+      title: '首页',
+      icon: 'home-4-line',
+      affix: true,
+    },
+    children: [
+      {
+        path: 'index',
+        name: 'Index',
+        component: '@/views/index',
+        meta: {
+          title: '首页',
+          icon: 'home-4-line',
+          affix: true,
+        },
+      },
+    ],
+  },
+]
+module.exports = [
+  {
+    url: '/menu/navigate',
+    type: 'get',
+    response() {
+      return {
+        code: 200,
+        msg: 'success',
+        data,
+      }
+    },
+  },
+]

+ 65 - 0
mock/controller/table.js

@@ -0,0 +1,65 @@
+const { mock } = require('mockjs')
+const { handleRandomImage } = require('../utils')
+const List = []
+const count = 50
+for (let i = 0; i < count; i++) {
+  List.push(
+    mock({
+      uuid: '@uuid',
+      id: '@id',
+      title: '@title(1, 2)',
+      description: '@csentence',
+      'status|1': ['published', 'draft', 'deleted'],
+      author: '@cname',
+      datetime: '@datetime',
+      pageViews: '@integer(300, 5000)',
+      img: handleRandomImage(228, 228),
+      switch: '@boolean',
+      percent: '@integer(80,99)',
+      'rate|1': [1, 2, 3, 4, 5],
+    })
+  )
+}
+
+module.exports = [
+  {
+    url: '/table/getList',
+    type: 'get',
+    response(config) {
+      const { title, current = 1, pageSize = 10 } = config.query
+      let mockList = List.filter((item) => {
+        return !(title && item.title.indexOf(title) < 0)
+      })
+      const pageList = mockList.filter(
+        (item, index) =>
+          index < pageSize * current && index >= pageSize * (current - 1)
+      )
+      return {
+        code: 200,
+        msg: 'success',
+        total: mockList.length,
+        data: pageList,
+      }
+    },
+  },
+  {
+    url: '/table/doEdit',
+    type: 'post',
+    response() {
+      return {
+        code: 200,
+        msg: '模拟保存成功',
+      }
+    },
+  },
+  {
+    url: '/table/doDelete',
+    type: 'post',
+    response() {
+      return {
+        code: 200,
+        msg: '模拟删除成功',
+      }
+    },
+  },
+]

+ 103 - 0
mock/controller/user.js

@@ -0,0 +1,103 @@
+const accessTokens = {
+  admin: 'admin-accessToken',
+  editor: 'editor-accessToken',
+  test: 'test-accessToken',
+}
+
+module.exports = [
+  {
+    url: '/login',
+    type: 'post',
+    response(config) {
+      const { username } = config.body
+      const accessToken = accessTokens[username]
+      if (!accessToken) {
+        return {
+          code: 500,
+          msg: '帐户或密码不正确。',
+        }
+      }
+      return {
+        code: 200,
+        msg: 'success',
+        data: { accessToken },
+      }
+    },
+  },
+  {
+    url: '/socialLogin',
+    type: 'post',
+    response(config) {
+      const { code } = config.body
+      if (!code) {
+        return {
+          code: 500,
+          msg: '未成功获取Token。',
+        }
+      }
+      return {
+        code: 200,
+        msg: 'success',
+        data: { accessToken: accessTokens['admin'] },
+      }
+    },
+  },
+  {
+    url: '/register',
+    type: 'post',
+    response() {
+      return {
+        code: 200,
+        msg: '模拟注册成功',
+      }
+    },
+  },
+  {
+    url: '/userInfo',
+    type: 'post',
+    response(config) {
+      const { accessToken } = config.body
+      let roles = ['admin']
+      let ability = ['READ']
+      let username = 'admin'
+      if ('admin-accessToken' === accessToken) {
+        roles = ['admin']
+        ability = ['READ', 'WRITE', 'DELETE']
+        username = 'admin'
+      }
+      if ('editor-accessToken' === accessToken) {
+        roles = ['editor']
+        ability = ['READ', 'WRITE']
+        username = 'editor'
+      }
+      if ('test-accessToken' === accessToken) {
+        roles = ['admin', 'editor']
+        ability = ['READ']
+        username = 'test'
+      }
+      return {
+        code: 200,
+        msg: 'success',
+        data: {
+          roles,
+          ability,
+          username,
+          'avatar|1': [
+            'https://i.gtimg.cn/club/item/face/img/2/15922_100.gif',
+            'https://i.gtimg.cn/club/item/face/img/8/15918_100.gif',
+          ],
+        },
+      }
+    },
+  },
+  {
+    url: '/logout',
+    type: 'post',
+    response() {
+      return {
+        code: 200,
+        msg: 'success',
+      }
+    },
+  },
+]

+ 16 - 0
mock/index.js

@@ -0,0 +1,16 @@
+/**
+ * @author chuzhixin 1204505056@qq.com
+ * @description 导入所有 controller 模块,npm run serve时在node环境中自动输出controller文件夹下Mock接口,请勿修改。
+ */
+
+const { handleMockArray } = require('./utils')
+
+const mocks = []
+const mockArray = handleMockArray()
+mockArray.forEach((item) => {
+  const obj = require(item)
+  mocks.push(...obj)
+})
+module.exports = {
+  mocks,
+}

+ 94 - 0
mock/mockServer.js

@@ -0,0 +1,94 @@
+const chokidar = require('chokidar')
+const bodyParser = require('body-parser')
+const chalk = require('chalk')
+const path = require('path')
+const Mock = require('mockjs')
+const { baseURL } = require('../src/config')
+const mockDir = path.join(process.cwd(), 'mock')
+
+/**
+ *
+ * @param app
+ * @returns {{mockStartIndex: number, mockRoutesLength: number}}
+ */
+const registerRoutes = (app) => {
+  let mockLastIndex
+  const { mocks } = require('./index.js')
+  const mocksForServer = mocks.map((route) => {
+    return responseFake(route.url, route.type, route.response)
+  })
+  for (const mock of mocksForServer) {
+    app[mock.type](mock.url, mock.response)
+    mockLastIndex = app._router.stack.length
+  }
+  const mockRoutesLength = Object.keys(mocksForServer).length
+  return {
+    mockRoutesLength: mockRoutesLength,
+    mockStartIndex: mockLastIndex - mockRoutesLength,
+  }
+}
+
+/**
+ *
+ * @param url
+ * @param type
+ * @param respond
+ * @returns {{response(*=, *=): void, type: (*|string), url: RegExp}}
+ */
+const responseFake = (url, type, respond) => {
+  return {
+    url: new RegExp(`${baseURL}${url}`),
+    type: type || 'get',
+    response(req, res) {
+      res.status(200)
+      if (JSON.stringify(req.body) !== '{}') {
+        console.log(chalk.green(`> 请求地址:${req.path}`))
+        console.log(chalk.green(`> 请求参数:${JSON.stringify(req.body)}\n`))
+      } else {
+        console.log(chalk.green(`> 请求地址:${req.path}\n`))
+      }
+      res.json(
+        Mock.mock(respond instanceof Function ? respond(req, res) : respond)
+      )
+    },
+  }
+}
+/**
+ *
+ * @param app
+ */
+module.exports = (app) => {
+  app.use(bodyParser.json())
+  app.use(
+    bodyParser.urlencoded({
+      extended: true,
+    })
+  )
+
+  const mockRoutes = registerRoutes(app)
+  let mockRoutesLength = mockRoutes.mockRoutesLength
+  let mockStartIndex = mockRoutes.mockStartIndex
+  chokidar
+    .watch(mockDir, {
+      ignored: /mock-server/,
+      ignoreInitial: true,
+    })
+    .on('all', (event) => {
+      if (event === 'change' || event === 'add') {
+        try {
+          app._router.stack.splice(mockStartIndex, mockRoutesLength)
+
+          Object.keys(require.cache).forEach((item) => {
+            if (item.includes(mockDir)) {
+              delete require.cache[require.resolve(item)]
+            }
+          })
+          const mockRoutes = registerRoutes(app)
+          mockRoutesLength = mockRoutes.mockRoutesLength
+          mockStartIndex = mockRoutes.mockStartIndex
+        } catch (error) {
+          console.log(chalk.red(error))
+        }
+      }
+    })
+}

+ 43 - 0
mock/utils/index.js

@@ -0,0 +1,43 @@
+const { Random } = require('mockjs')
+const { join } = require('path')
+const fs = require('fs')
+
+/**
+ * @author chuzhixin 1204505056@qq.com
+ * @description 随机生成图片url。
+ * @param width
+ * @param height
+ * @returns {string}
+ */
+function handleRandomImage(width = 50, height = 50) {
+  return `https://picsum.photos/${width}/${height}?random=${Random.guid()}`
+}
+
+/**
+ * @author chuzhixin 1204505056@qq.com
+ * @description 处理所有 controller 模块,npm run serve时在node环境中自动输出controller文件夹下Mock接口,请勿修改。
+ * @returns {[]}
+ */
+function handleMockArray() {
+  const mockArray = []
+  const getFiles = (jsonPath) => {
+    const jsonFiles = []
+    const findJsonFile = (path) => {
+      const files = fs.readdirSync(path)
+      files.forEach((item) => {
+        const fPath = join(path, item)
+        const stat = fs.statSync(fPath)
+        if (stat.isDirectory() === true) findJsonFile(item)
+        if (stat.isFile() === true) jsonFiles.push(item)
+      })
+    }
+    findJsonFile(jsonPath)
+    jsonFiles.forEach((item) => mockArray.push(`./controller/${item}`))
+  }
+  getFiles('mock/controller')
+  return mockArray
+}
+module.exports = {
+  handleRandomImage,
+  handleMockArray,
+}

+ 72 - 0
package.json

@@ -0,0 +1,72 @@
+{
+    "name": "vue-admin-beautiful-antdv",
+    "version": "1.0.0",
+    "private": true,
+    "scripts": {
+        "serve": "vue-cli-service serve",
+        "build": "vue-cli-service build",
+        "lint": "vue-cli-service lint",
+        "clear": "rimraf node_modules&&npm install --registry=https://registry.npm.taobao.org",
+        "use:npm": "nrm use npm",
+        "use:taobao": "nrm use taobao",
+        "update": "ncu -u --target greatest&&npm install --registry=https://registry.npm.taobao.org",
+        "deploy": "start ./deploy.sh"
+    },
+    "dependencies": {
+        "ant-design-vue": "2.0.0-rc.9",
+        "axios": "^0.21.1",
+        "clipboard": "^2.0.6",
+        "core-js": "^3.8.3",
+        "dayjs": "^1.10.4",
+        "default-passive-events": "^2.0.0",
+        "echarts": "^5.2.1",
+        "element-plus": "^1.1.0-beta.20",
+        "js-cookie": "^3.0.0-rc.1",
+        "mockjs": "^1.1.0",
+        "remixicon": "^2.5.0",
+        "video.js": "^7.17.0",
+        "videojs-contrib-hls": "^5.15.0",
+        "vue": "^3.2.18",
+        "vue-router": "^4.0.3",
+        "vuex": "^4.0.0"
+    },
+    "devDependencies": {
+        "@vue/cli-plugin-babel": "^4.5.9",
+        "@vue/cli-plugin-eslint": "^4.5.9",
+        "@vue/cli-service": "^4.5.9",
+        "@vue/compiler-sfc": "^3.0.5",
+        "@vue/eslint-config-prettier": "^6.0.0",
+        "babel-eslint": "^11.0.0-beta.2",
+        "body-parser": "^1.19.0",
+        "chalk": "^4.1.0",
+        "chokidar": "^3.5.1",
+        "eslint": "^7.19.0",
+        "eslint-plugin-prettier": "^3.3.1",
+        "eslint-plugin-vue": "^7.5.0",
+        "filemanager-webpack-plugin": "^3.1.0",
+        "image-webpack-loader": "^8.1.0",
+        "imagemin-gifsicle": "^2.0.0",
+        "less": "^4.1.1",
+        "less-loader": "^7.3.0",
+        "lint-staged": "^10.5.3",
+        "node-sass": "^4.14.1",
+        "prettier": "^2.2.1",
+        "sass": "^1.42.1",
+        "sass-loader": "^8.0.2",
+        "stylelint": "^13.9.0",
+        "stylelint-config-prettier": "^8.0.2",
+        "stylelint-config-recess-order": "^2.3.0",
+        "svg-sprite-loader": "^5.2.1",
+        "vab-config": "0.0.8",
+        "webpackbar": "^5.0.0-3"
+    },
+    "gitHooks": {
+        "pre-commit": "lint-staged"
+    },
+    "lint-staged": {
+        "*.{js,jsx,vue}": [
+            "vue-cli-service lint",
+            "git add"
+        ]
+    }
+}

+ 16 - 0
prettier.config.js

@@ -0,0 +1,16 @@
+module.exports = {
+  printWidth: 80,
+  tabWidth: 2,
+  useTabs: false,
+  semi: false,
+  singleQuote: true,
+  quoteProps: 'as-needed',
+  jsxSingleQuote: false,
+  trailingComma: 'es5',
+  bracketSpacing: true,
+  jsxBracketSameLine: false,
+  arrowParens: 'always',
+  htmlWhitespaceSensitivity: 'ignore',
+  vueIndentScriptAndStyle: true,
+  endOfLine: 'lf',
+}

BIN
public/favicon.ico


BIN
public/favicon1.ico


+ 57 - 0
public/index.html

@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="utf-8" />
+  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+  <meta name="viewport" content="width=device-width,initial-scale=1.0" />
+  <link rel="icon" href="<%= BASE_URL %>favicon.ico" />
+  <title>
+    <%= htmlWebpackPlugin.options.title %>
+  </title>
+  <meta
+    content="vab,vab官网,后台管理框架,vue后台管理框架,vue-admin-beautiful,vue-admin-beautiful-pro,vue-admin-beautiful官网,vue-admin-beautiful文档,vue-element-admin,vue-element-admin官网,vue-element-admin文档,vue-admin,vue-admin官网,vue-admin文档"
+    name="keywords" />
+  <meta
+    content="<%= VUE_APP_TITLE %>官网与文档基于vue-admin-beautiful-pro构建,简称vab(是一款超棒的vue+element中后台前端快速开发框架),QQ群972435319,作者:<%= VUE_APP_AUTHOR %>"
+    name="description" />
+  <meta content="<%= VUE_APP_AUTHOR %>" name="author" />
+  <link href="<%= BASE_URL %>static/css/loading.css" rel="stylesheet" />
+  <script>
+    var _hmt = _hmt || [];
+    (function () {
+      var hm = document.createElement("script");
+      hm.src = "https://hm.baidu.com/hm.js?7174bade1219f9cc272e7978f9523fc8";
+      var s = document.getElementsByTagName("script")[0];
+      s.parentNode.insertBefore(hm, s);
+    })();
+  </script>
+</head>
+
+<body>
+  <noscript>
+    <strong>
+      We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work
+        properly without JavaScript enabled. Please enable it to continue.
+    </strong>
+  </noscript>
+  <div id="app">
+    <div class="first-loading-wrp">
+      <div class="loading-wrp">
+        <span class="dot dot-spin">
+          <i></i>
+          <i></i>
+          <i></i>
+          <i></i>
+        </span>
+      </div>
+      <h1>
+        <%= VUE_APP_TITLE %>
+      </h1>
+    </div>
+  </div>
+  <!-- built files will be auto injected -->
+  <script src="./static/config.js"></script>
+</body>
+
+</html>

+ 36 - 0
public/static/config.js

@@ -0,0 +1,36 @@
+// api 请求路径
+var PLATFROM_CONFIG = {};
+// PLATFROM_CONFIG.baseUrl = "http://172.16.120.104:8010/" //杨强本地
+// PLATFROM_CONFIG.baseUrl = "http://172.16.1.196:8010/" //超博本地
+
+if (window.location.host.indexOf('localhost') != -1 || window.location.host.indexOf('pcdev.ewoogi.com') != -1) {
+    PLATFROM_CONFIG.baseUrl = "https://qhome.usky.cn/fivapi/" //线上--->测试
+    PLATFROM_CONFIG.images = "https://qhome.usky.cn/file/" //线上图片--->测试
+    PLATFROM_CONFIG.fileUrl = "https://qhome.usky.cn/file/" //xlsx文件访问路径--->测试
+} else {
+    PLATFROM_CONFIG.baseUrl = "https://wx.ewoogi.com/api/" //线上--->正式
+    PLATFROM_CONFIG.images = "https://wx.ewoogi.com/file/" //线上图片--->正式
+    PLATFROM_CONFIG.fileUrl = "https://wx.ewoogi.com/file/" //xlsx文件访问路径--->正式
+}
+
+// 本地json文件请求路径
+PLATFROM_CONFIG.Interface = "/vuefiv/InterfaceReturn.json"
+PLATFROM_CONFIG.ione = "/vuefiv/1.json"
+
+
+
+// 当前站点 siteId 信息存储
+// var PLATFROM_SITEID = {};
+// PLATFROM_SITEID.id = 0;
+
+
+//alarming WEBSOCKET
+// let userInfo = window.localStorage.getItem("key");
+// var PLATFROM_WEBSOCKET = {};
+// 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`

+ 96 - 0
public/static/css/loading.css

@@ -0,0 +1,96 @@
+.first-loading-wrp {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  height: 90vh;
+  min-height: 90vh;
+}
+
+.first-loading-wrp > h1 {
+  font-size: 24px;
+  font-weight: bolder;
+}
+
+.first-loading-wrp .loading-wrp {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  padding: 98px;
+}
+
+.dot {
+  position: relative;
+  box-sizing: border-box;
+  display: inline-block;
+  width: 64px;
+  height: 64px;
+  font-size: 64px;
+  transform: rotate(45deg);
+  animation: antRotate 1.2s infinite linear;
+}
+
+.dot i {
+  position: absolute;
+  display: block;
+  width: 28px;
+  height: 28px;
+  background-color: #1890ff;
+  border-radius: 100%;
+  opacity: 0.3;
+  transform: scale(0.75);
+  transform-origin: 50% 50%;
+  animation: antSpinMove 1s infinite linear alternate;
+}
+
+.dot i:nth-child(1) {
+  top: 0;
+  left: 0;
+}
+
+.dot i:nth-child(2) {
+  top: 0;
+  right: 0;
+  -webkit-animation-delay: 0.4s;
+  animation-delay: 0.4s;
+}
+
+.dot i:nth-child(3) {
+  right: 0;
+  bottom: 0;
+  -webkit-animation-delay: 0.8s;
+  animation-delay: 0.8s;
+}
+
+.dot i:nth-child(4) {
+  bottom: 0;
+  left: 0;
+  -webkit-animation-delay: 1.2s;
+  animation-delay: 1.2s;
+}
+
+@keyframes antRotate {
+  to {
+    -webkit-transform: rotate(405deg);
+    transform: rotate(405deg);
+  }
+}
+
+@-webkit-keyframes antRotate {
+  to {
+    -webkit-transform: rotate(405deg);
+    transform: rotate(405deg);
+  }
+}
+
+@keyframes antSpinMove {
+  to {
+    opacity: 1;
+  }
+}
+
+@-webkit-keyframes antSpinMove {
+  to {
+    opacity: 1;
+  }
+}

BIN
public/static/伍继变量列表导入模板.xlsx


BIN
public/static/伍继摄像头导入模板.xlsx


BIN
public/static/伍继监控设备导入模板.xlsx


BIN
public/static/伍继通信设备导入模板.xlsx


+ 11 - 0
sh.exe.stackdump

@@ -0,0 +1,11 @@
+Stack trace:
+Frame        Function    Args
+000FFFFB540  00180064365 (00180275F10, 00180266FD1, 000FFFFCA60, 000FFFFBA20)
+000FFFFBA70  001800499D2 (00100002000, 0018034EB80, 00000000001, 00000000128)
+000FFFFCA80  00180049A11 (00000000001, 0018034EE90, 000FFFFCA60, 00000000008)
+000FFFFCB10  0018005CFCD (00000000000, 000FFFFCC40, 001800DC3EF, 00000000000)
+000FFFFCBF0  0018005D12B (000FFFFCDF0, 00000000000, FFFFFFFFFFFFFFD7, 00000000000)
+000FFFFCCE0  0018004A1A8 (00000000000, 00000000000, 00000000000, 00000000000)
+000FFFFCDA0  00180048A2A (00000000000, 00000000000, 00000000000, 00000000000)
+000FFFFCE50  00180048AEC (00000000000, 00000000000, 00000000000, 00000000000)
+End of stack trace

+ 36 - 0
src/App.vue

@@ -0,0 +1,36 @@
+<template>
+  <router-view />
+</template>
+<script>
+import { defineComponent, watchEffect } from 'vue'
+// import {useRouter} from 'vue-router'
+
+import store from '@/store'
+
+export default defineComponent({
+  setup() {
+    let hasToken = store.getters['user/accessToken']
+    // let router = useRouter();
+
+    watchEffect((fn, options) => {
+      fn, options
+      if (!hasToken) {
+        // router.push({
+        //   path: '/login',
+        // })
+      } else {
+        console.log(2)
+
+      }
+    })
+    return {
+      store,
+    }
+  },
+})
+
+</script>
+
+<style lang="less">
+@import '~@/vab/styles/vab.less';
+</style>

+ 36 - 0
src/api/alarmManage/index.js

@@ -0,0 +1,36 @@
+import request from '@/utils/request'
+
+//巡检管理-巡检计划-计划列表查询
+export function alarmGradeCount(params) {
+    return request({
+        url: '/alarmPower/alarmGradeCount',
+        method: 'GET',
+        params,
+    })
+}
+
+//巡检管理-巡检计划-计划列表详情
+export function alarmGradeList(params) {
+    return request({
+        url: '/alarmPower/alarmGradeList',
+        method: 'GET',
+        params,
+    })
+}
+
+//巡检管理-巡检计划-计划列表弹窗详情
+export function alarmPower1(params) {
+    return request({
+        url: '/alarmPower/' + params,
+        method: 'GET',
+    })
+}
+
+//巡检管理-巡检计划-计划列表详情-修改
+export function alarmPower(params) {
+    return request({
+        url: '/alarmPower/',
+        method: 'PUT',
+        data: params,
+    })
+}

+ 10 - 0
src/api/alarmingManage/index.js

@@ -0,0 +1,10 @@
+// import request from '@/utils/request'
+
+//停电计划-查询
+// export function plannedOutageList(params) {
+//     return request({
+//         url: '/wcBlackoutPlan/plannedOutageList',
+//         method: 'POST',
+//         data: params,
+//     })
+// }

+ 12 - 0
src/api/dataManage/chainAnalysis.js

@@ -0,0 +1,12 @@
+import request from '@/utils/request'
+
+
+
+//环比分析
+export function ringRatioList(params) {
+    return request({
+        url: '/htAnalogData/ringRatioList',
+        method: 'POST',
+        data: params,
+    })
+}

+ 22 - 0
src/api/dataManage/demandAnalysis.js

@@ -0,0 +1,22 @@
+import request from '@/utils/request'
+
+
+
+//需量分析
+export function demandAnalysis(params) {
+    return request({
+        url: '/htAnalogData/demandAnalysis',
+        method: 'GET',
+        params,
+    })
+}
+
+
+//需量分析设备请求
+export function deviceBoxList(params) {
+    return request({
+        url: '/device/deviceBoxList',
+        method: 'GET',
+        params,
+    })
+}

+ 31 - 0
src/api/dataManage/energyReport.js

@@ -0,0 +1,31 @@
+import request from '@/utils/request'
+
+
+
+//用能月报分析
+export function monthlyReport2(params) {
+    return request({
+        url: '/htAnalogData/monthlyReport',
+        method: 'GET',
+        params,
+    })
+}
+
+
+//用能月报设备请求
+export function deviceBoxList(params) {
+    return request({
+        url: '/device/deviceBoxList',
+        method: 'GET',
+        params,
+    })
+}
+
+//表格-导出
+export function monthlyReportExport(params) {
+    return request({
+        url: '/htAnalogData/monthlyReportExport',
+        method: 'GET',
+        params,
+    })
+}

+ 10 - 0
src/api/dataManage/patrolPlan.js

@@ -0,0 +1,10 @@
+import request from '@/utils/request'
+
+//巡检管理-巡检计划-计划列表查询
+export function patrolInspectionSchemeList(params) {
+    return request({
+        url: '/patrolInspectionScheme/patrolInspectionSchemeList',
+        method: 'GET',
+        params,
+    })
+}

+ 12 - 0
src/api/dataManage/sameAnalysis.js

@@ -0,0 +1,12 @@
+import request from '@/utils/request'
+
+
+
+//同比分析
+export function yearOnYearList(params) {
+    return request({
+        url: '/htAnalogData/yearOnYearList',
+        method: 'POST',
+        data: params,
+    })
+}

+ 79 - 0
src/api/deviceManage/powerEquip/communicateEquip.js

@@ -0,0 +1,79 @@
+import request from '@/utils/request'
+
+//设备管理-通信设备-查询
+export function correspondDeviceList(params) {
+    return request({
+        url: '/device/correspondDeviceList',
+        method: 'GET',
+        params,
+    })
+}
+
+//设备管理-通信设备-修改
+export function correspondDeviceUpdate(params) {
+    return request({
+        url: '/device/correspondDeviceUpdate',
+        method: 'POST',
+        data: params,
+    })
+}
+
+//设备管理-通信设备-新增
+export function correspondDeviceAdd(params) {
+    return request({
+        url: '/device/correspondDeviceAdd',
+        method: 'POST',
+        data: params,
+    })
+}
+
+//设备管理-通信设备-注销
+export function correspondDeviceDel(params) {
+    return request({
+        url: '/device/correspondDeviceDel',
+        method: 'GET',
+        params,
+    })
+}
+
+//设备管理-通信设备-克隆
+export function variableCloning(params) {
+    return request({
+        url: '/device/variableCloning',
+        method: 'GET',
+        params,
+    })
+}
+
+//通信设备--通信设备-克隆-设备下拉框查询
+export function deviceList(params) {
+    return request({
+        url: '/device/deviceList',
+        method: 'GET',
+        params,
+    })
+}
+
+
+//站点管理-通信设备-导出
+export function deviceExport(params) {
+    return request({
+        url: '/device/correspondDeviceExport',
+        method: 'GET',
+        params,
+    })
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 55 - 0
src/api/deviceManage/powerEquip/deviceAttribute.js

@@ -0,0 +1,55 @@
+import request from '@/utils/request'
+
+export function monitorDeviceList(params) {
+  return request({
+    url: '/deviceAttribute/monitorDeviceList',
+    method: 'GET',
+    params,
+  })
+}
+
+
+export function deviceNewsList(params) {
+  return request({
+    url: '/deviceAttribute/deviceNewsList',
+    method: 'GET',
+    params,
+  })
+}
+
+export function deviceNewsAdd(params) {
+  return request({
+    url: '/deviceAttribute/deviceNewsAdd',
+    method: 'POST',
+    data: params,
+  })
+}
+
+export function deviceNewsUpdate(params) {
+  return request({
+    url: '/deviceAttribute/deviceNewsUpdate',
+    method: 'POST',
+    data: params,
+  })
+}
+
+export function deviceNewsDel(params) {
+  return request({
+    url: '/deviceAttribute/deviceNewsDel',
+    method: 'GET',
+    params,
+  })
+}
+
+export function variableListone(params) {
+  return request({
+    url: '/deviceAnalogVariableList/variableListone',
+    method: 'POST',
+    data: params,
+  })
+}
+
+
+
+
+

+ 9 - 0
src/api/deviceManage/videoEquip.js

@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+//视频列表
+export function videoMonitoringDeviceList(params) {
+    return request({
+        url: '/device/videoMonitoringDeviceList',
+        method: 'GET',
+        params,
+    })
+}

+ 9 - 0
src/api/icon.js

@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+
+export function getIconList(params) {
+  return request({
+    url: '/icon/getList',
+    method: 'get',
+    params,
+  })
+}

+ 47 - 0
src/api/planOutage/index.js

@@ -0,0 +1,47 @@
+import request from '@/utils/request'
+
+//停电计划-查询
+export function plannedOutageList(params) {
+    return request({
+        url: '/wcBlackoutPlan/plannedOutageList',
+        method: 'POST',
+        data: params,
+    })
+}
+
+//停电计划-注销
+export function plannedOutageDel(params) {
+    return request({
+        url: '/wcBlackoutPlan/plannedOutageDel',
+        method: 'GET',
+        params,
+    })
+}
+
+//停电计划-新增
+export function plannedOutageAdd(params) {
+    return request({
+        url: '/wcBlackoutPlan/plannedOutageAdd',
+        method: 'POST',
+        data: params,
+    })
+}
+
+//停电计划-修改
+export function plannedOutageUpdate(params) {
+    return request({
+        url: '/wcBlackoutPlan/plannedOutageUpdate',
+        method: 'POST',
+        data: params,
+    })
+}
+
+
+//停电计划-导出
+export function outagePlanListExport(params) {
+    return request({
+        url: 'wcBlackoutPlan/outagePlanListExport',
+        method: 'GET',
+        params,
+    })
+}

+ 24 - 0
src/api/powerQuality/harmonicReport.js

@@ -0,0 +1,24 @@
+import request from '@/utils/request'
+
+//历史电流电压评分
+export function rtRealScore(params) {
+    return request({
+        url: '/htAnalogData/rtRealScore',
+        method: 'GET',
+        params,
+    })
+}
+
+//通信设备列表查询-无分页
+export function deviceListOne(params) {
+    return request({
+        url: '/device/deviceListOne',
+        method: 'GET',
+        params,
+    })
+}
+
+
+
+
+

+ 40 - 0
src/api/powerQuality/loopMonitor.js

@@ -0,0 +1,40 @@
+import request from '@/utils/request'
+
+
+
+//通信设备列表查询-无分页
+export function deviceListOne(params) {
+    return request({
+        url: '/device/deviceListOne',
+        method: 'GET',
+        params,
+    })
+}
+
+// // 实时评分主页面  (实时消费组模拟量-----电能质量(实时评分)
+// export function realScore(params) {
+//     return request({
+//         url: '/rtAnalogData/realScore',
+//         method: 'GET',
+//         params,
+//     })
+// }
+
+// // 实时评分弹框详情  (历史消费组模拟量----历史电流电压评分)
+// export function rtRealScore(params) {
+//     return request({
+//         url: '/htAnalogData/rtRealScore',
+//         method: 'GET',
+//         params,
+//     })
+// }
+
+
+// 单回路监测
+export function realScoreOne(params) {
+    return request({
+        url: '/rtAnalogData/realScoreOne',
+        method: 'GET',
+        params,
+    })
+}

+ 30 - 0
src/api/powerQuality/loopReport.js

@@ -0,0 +1,30 @@
+import request from '@/utils/request'
+
+
+
+//通信设备列表查询-无分页
+export function deviceListOne(params) {
+    return request({
+        url: '/device/deviceListOne',
+        method: 'GET',
+        params,
+    })
+}
+
+// 单回路报告主页面 
+export function SingleLoopReportData(params) {
+    return request({
+        url: '/htAnalogData/SingleLoopReportData',
+        method: 'GET',
+        params,
+    })
+}
+
+// // 实时评分弹框详情  (历史消费组模拟量----历史电流电压评分)
+// export function rtRealScore(params) {
+//     return request({
+//         url: '/htAnalogData/rtRealScore',
+//         method: 'GET',
+//         params,
+//     })
+// }

+ 30 - 0
src/api/powerQuality/realScore.js

@@ -0,0 +1,30 @@
+import request from '@/utils/request'
+
+
+
+//通信设备列表查询-无分页
+export function deviceListOne(params) {
+    return request({
+        url: '/device/deviceListOne',
+        method: 'GET',
+        params,
+    })
+}
+
+// 实时评分主页面  (实时消费组模拟量-----电能质量(实时评分)
+export function realScore(params) {
+    return request({
+        url: '/rtAnalogData/realScore',
+        method: 'GET',
+        params,
+    })
+}
+
+// 实时评分弹框详情  (历史消费组模拟量----历史电流电压评分)
+export function rtRealScore(params) {
+    return request({
+        url: '/htAnalogData/rtRealScore',
+        method: 'GET',
+        params,
+    })
+}

+ 30 - 0
src/api/powerQuality/scoreReport.js

@@ -0,0 +1,30 @@
+import request from '@/utils/request'
+
+
+
+//通信设备列表查询-无分页
+// export function deviceListOne(params) {
+//     return request({
+//         url: '/device/deviceListOne',
+//         method: 'GET',
+//         params,
+//     })
+// }
+
+// 评估报告主页面 
+export function evaluationReport(params) {
+    return request({
+        url: 'rtAnalogData/evaluationReport',
+        method: 'GET',
+        params,
+    })
+}
+
+// 实时评分弹框详情  (历史消费组模拟量----历史电流电压评分)
+export function rtRealScore(params) {
+    return request({
+        url: '/htAnalogData/rtRealScore',
+        method: 'GET',
+        params,
+    })
+}

+ 20 - 0
src/api/powerQuality/unbalanceAnalysis.js

@@ -0,0 +1,20 @@
+import request from '@/utils/request'
+
+//通信设备列表查询-无分页
+export function deviceListOne(params) {
+    return request({
+        url: '/device/deviceListOne',
+        method: 'GET',
+        params,
+    })
+}
+
+
+// 三项不平衡  (历史消费组模拟量----历史电流电压评分)
+export function rtRealScore(params) {
+    return request({
+        url: '/htAnalogData/rtRealScore',
+        method: 'GET',
+        params,
+    })
+}

+ 28 - 0
src/api/publicList.js

@@ -0,0 +1,28 @@
+import request from '@/utils/request'
+
+export function SiteList(params) {
+    return request({
+        url: '/site/list',
+        method: 'GET',
+        params,
+    })
+}
+
+export function dataManagementDeviceList(params) {
+    return request({
+        url: '/device/dataManagementDeviceList',
+        method: 'GET',
+        params,
+    })
+}
+
+// 公共按钮权限
+export function getAuthorities(params) {
+    return request({
+        url: '/userSite/getButtonlistone',
+        method: 'GET',
+        params,
+    })
+}
+
+// 设备下拉

+ 9 - 0
src/api/router.js

@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+
+export function getRouterList(params) {
+  return request({
+    url: '/getRouters',
+    method: 'get',
+    params,
+  })
+}

+ 57 - 0
src/api/siteManage/basicInfo.js

@@ -0,0 +1,57 @@
+import request from '@/utils/request'
+
+//动态属性
+export function dynamicPropertiesDroplist(params) {
+    return request({
+        url: '/site/dynamicPropertiesDroplist',
+        method: 'GET',
+        params,
+    })
+}
+
+//图片上传
+// export function uploadImg(params) {
+//     return request({
+//         url: '/patrolInspectionDevice/pictureUpload',
+//         method: 'POST',
+//         data: params,
+//     })
+// }
+
+
+//站点基本信息-新增
+export function siteAdd(params) {
+    return request({
+        url: '/site/siteAdd',
+        method: 'POST',
+        data: params,
+    })
+}
+
+
+// 台区列表查询
+export function platformList(params) {
+    return request({
+        url: '/platformArea/platformAreaListOne',
+        method: 'GET',
+        params,
+    })
+}
+
+// 站点详情查询
+export function getSite(params) {
+    return request({
+        url: '/site/getSite',
+        method: 'GET',
+        params,
+    })
+}
+
+// 所属线路下拉
+export function routeDroplist(params) {
+    return request({
+        url: '/site/routeDroplist',
+        method: 'GET',
+        params,
+    })
+}

+ 44 - 0
src/api/siteManage/camera.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+
+//视频列表
+export function videoMonitoringDeviceList(params) {
+    return request({
+        url: '/device/videoMonitoringDeviceList',
+        method: 'GET',
+        params,
+    })
+}
+
+export function correspondDeviceAdd(params) {
+    return request({
+        url: '/device/correspondDeviceAdd',
+        method: 'POST',
+        data: params,
+    })
+}
+
+export function correspondDeviceUpdate(params) {
+    return request({
+        url: '/device/correspondDeviceUpdate',
+        method: 'POST',
+        data: params,
+    })
+}
+
+export function correspondDeviceDel(params) {
+    return request({
+        url: '/device/correspondDeviceDel',
+        method: 'GET',
+        params,
+    })
+}
+
+//站点管理-摄像头-导出
+export function deviceExport(params) {
+    return request({
+        url: '/device/deviceExport',
+        method: 'GET',
+        params,
+    })
+}

+ 37 - 0
src/api/siteManage/index.js

@@ -0,0 +1,37 @@
+import request from '@/utils/request'
+
+//树结构
+export function siteTreeList(params) {
+    return request({
+        url: '/site/sitelist',
+        method: 'GET',
+        params,
+    })
+}
+
+//站点模板选择
+export function list(params) {
+    return request({
+        url: '/site/list',
+        method: 'GET',
+        data: params,
+    })
+}
+
+// 新建分组
+export function siteGroupingAdd(params) {
+    return request({
+        url: '/siteGrouping/siteGroupingAdd',
+        method: 'GET',
+        params,
+    })
+}
+
+// 修改分组
+export function siteGroupingUpdate(params) {
+    return request({
+        url: '/siteGrouping/siteGroupingUpdate',
+        method: 'GET',
+        params,
+    })
+}

+ 27 - 0
src/api/siteManage/powerScore.js

@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+//评分配置-新增
+export function powerQualityAdd(params) {
+    return request({
+        url: '/powerQualityConfig/powerQualityAdd',
+        method: 'POST',
+        data: params,
+    })
+}
+//评分配置-修改
+export function powerQualityUpdate(params) {
+    return request({
+        url: '/powerQualityConfig/powerQualityUpdate',
+        method: 'POST',
+        data: params,
+    })
+}
+
+// 评分配置-详情查询
+export function powerQualityList(params) {
+    return request({
+        url: '/powerQualityConfig/powerQualityList',
+        method: 'GET',
+        params,
+    })
+}

+ 64 - 0
src/api/siteManage/variableList.js

@@ -0,0 +1,64 @@
+import request from '@/utils/request'
+
+// 变量列表查询
+export function variableList(params) {
+    return request({
+        url: '/deviceAnalogVariableList/variableListone',
+        method: 'POST',
+        data: params,
+    })
+}
+
+// 通信设备下拉
+export function deviceList(params) {
+    return request({
+        url: '/device/deviceList',
+        method: 'GET',
+        params,
+    })
+}
+
+// 监控设备下拉
+export function deviceNewsListBox(params) {
+    return request({
+        url: '/deviceAttribute/deviceNewsListBox',
+        method: 'GET',
+        params,
+    })
+}
+
+//变量列表-新增
+export function variableAdd(params) {
+    return request({
+        url: '/deviceAnalogVariableList/variableListAdd',
+        method: 'POST',
+        data: params,
+    })
+}
+
+//变量列表-修改
+export function variableListUpdate(params) {
+    return request({
+        url: '/deviceAnalogVariableList/variableListUpdate',
+        method: 'POST',
+        data: params,
+    })
+}
+
+// 变量列表-删除
+export function variableListDel(params) {
+    return request({
+        url: '/deviceAnalogVariableList/variableListDel',
+        method: 'GET',
+        params,
+    })
+}
+
+//站点管理-变量列表-导出
+export function variableListExport(params) {
+    return request({
+        url: '/deviceAnalogVariableList/variableListExport',
+        method: 'GET',
+        params,
+    })
+}

+ 60 - 0
src/api/siteManage/watchDog.js

@@ -0,0 +1,60 @@
+import request from '@/utils/request'
+
+// export function monitorDeviceList(params) {
+//     return request({
+//         url: '/deviceAttribute/monitorDeviceList',
+//         method: 'GET',
+//         params,
+//     })
+// }
+
+
+export function deviceNewsList(params) {
+    return request({
+        url: '/deviceAttribute/deviceNewsList',
+        method: 'GET',
+        params,
+    })
+}
+
+export function deviceNewsAdd(params) {
+    return request({
+        url: '/deviceAttribute/deviceNewsAdd',
+        method: 'POST',
+        data: params,
+    })
+}
+
+export function deviceNewsUpdate(params) {
+    return request({
+        url: '/deviceAttribute/deviceNewsUpdate',
+        method: 'POST',
+        data: params,
+    })
+}
+
+export function deviceNewsDel(params) {
+    return request({
+        url: '/deviceAttribute/deviceNewsDel',
+        method: 'GET',
+        params,
+    })
+}
+
+
+//监控设备-导出
+export function deviceAttributeExport(params) {
+    return request({
+        url: '/deviceAttribute/deviceAttributeExport',
+        method: 'GET',
+        params,
+    })
+}
+
+// export function variableListone(params) {
+//     return request({
+//         url: '/deviceAnalogVariableList/variableListone',
+//         method: 'POST',
+//         data: params,
+//     })
+// }

+ 55 - 0
src/api/stationManage/index.js

@@ -0,0 +1,55 @@
+import request from '@/utils/request'
+
+// 列表查询
+export function platformList(params) {
+    return request({
+        url: '/platformArea/platformAreaListOne',
+        method: 'GET',
+        params,
+    })
+}
+
+//台区-新增
+export function platformAreaAdd(params) {
+    return request({
+        url: 'platformArea/platformAreaAdd',
+        method: 'POST',
+        data: params,
+    })
+}
+
+// 台区-修改
+export function platformAreaUpdate(params) {
+    return request({
+        url: '/platformArea/platformAreaUpdate',
+        method: 'POST',
+        data: params,
+    })
+}
+
+// 台区-回显
+export function platformAreaListOne(params) {
+    return request({
+        url: '/platformArea/platformAreaList',
+        method: 'GET',
+        params,
+    })
+}
+
+//台区-删除
+export function platformAreaDel(params) {
+    return request({
+        url: '/platformArea/platformAreaDel',
+        method: 'GET',
+        params,
+    })
+}
+
+// 站点设备列表查询
+export function siteDeviceList(params) {
+    return request({
+        url: '/platformArea/siteDeviceList',
+        method: 'GET',
+        params,
+    })
+}

+ 80 - 0
src/api/systemManage/rolePermission.js

@@ -0,0 +1,80 @@
+import request from '@/utils/request'
+
+// 角色查询
+export function roleList(params) {
+    return request({
+        url: '/system/role/list',
+        method: 'GET',
+        params,
+    })
+}
+
+
+//角色-新增
+export function roleAdd(params) {
+    return request({
+        url: '/system/role',
+        method: 'POST',
+        data: params,
+    })
+}
+
+// 角色-回显
+export function roleDetail(params, params2) {
+    return request({
+        url: '/system/role/' + params2,
+        method: 'GET',
+        params,
+    })
+}
+
+
+//角色-修改
+export function roleUpdate(params) {
+    return request({
+        url: '/system/role',
+        method: 'PUT',
+        data: params,
+    })
+}
+
+// 角色-删除
+export function roleDelete(params, params2) {
+    return request({
+        url: '/system/role/' + params2,
+        method: 'DELETE',
+        params,
+    })
+}
+
+
+// 菜单查询
+
+export function roleMenuTreeselect(params, params2) {
+    return request({
+        url: '/system/menu/roleMenuTreeselect/' + params2,
+        method: 'GET',
+        params,
+    })
+}
+
+// 右侧表格树查询
+export function getAuthorityTable(params) {
+    return request({
+        url: '/userSite/getAuthority',
+        method: 'GET',
+        params,
+    })
+}
+
+
+
+
+//角色-保存
+export function saveMenu(params) {
+    return request({
+        url: '/system/role/editOne',
+        method: 'PUT',
+        data: params,
+    })
+}

+ 58 - 0
src/api/systemManage/userManage.js

@@ -0,0 +1,58 @@
+import request from '@/utils/request'
+
+// 列表查询
+export function list(params) {
+    return request({
+        url: '/system/user/list',
+        method: 'GET',
+        params,
+    })
+}
+
+// 角色下拉查询
+export function optionselect(params) {
+    return request({
+        url: '/system/role/optionselect',
+        method: 'GET',
+        params,
+    })
+}
+
+
+
+//用户管理列表-新增
+export function userAdd(params) {
+    return request({
+        url: '/system/user/',
+        method: 'POST',
+        data: params,
+    })
+}
+
+//用户管理列表-修改
+export function userUpdate(params) {
+    return request({
+        url: '/system/user/',
+        method: 'PUT',
+        data: params,
+    })
+}
+
+// 角色-回显
+export function authRole(params, userId) {
+    return request({
+        url: '/system/user/authRole/' + userId,
+        method: 'GET',
+        params,
+    })
+}
+
+
+//用户授权角色
+export function authRoleDetail(params) {
+    return request({
+        url: '/system/user/authRole',
+        method: 'PUT',
+        data: params,
+    })
+}

+ 25 - 0
src/api/table.js

@@ -0,0 +1,25 @@
+import request from '@/utils/request'
+
+export function getList(params) {
+  return request({
+    url: '/table/getList',
+    method: 'get',
+    params,
+  })
+}
+
+export function doEdit(data) {
+  return request({
+    url: '/table/doEdit',
+    method: 'post',
+    data,
+  })
+}
+
+export function doDelete(data) {
+  return request({
+    url: '/table/doDelete',
+    method: 'post',
+    data,
+  })
+}

+ 43 - 0
src/api/user.js

@@ -0,0 +1,43 @@
+import request from '@/utils/request'
+import { tokenName } from '@/config'
+
+export async function login(data) {
+  return request({
+    url: '/login',
+    method: 'POST',
+    data,
+  })
+}
+
+export async function socialLogin(data) {
+  return request({
+    url: '/socialLogin',
+    method: 'post',
+    data,
+  })
+}
+
+export function getUserInfo(accessToken) {
+  //此处为了兼容mock.js使用data传递accessToken,如果使用mock可以走headers
+  return request({
+    url: '/getInfo',
+    method: 'get',
+    data: {
+      [tokenName]: accessToken,
+    },
+  })
+}
+
+export function logout() {
+  return request({
+    url: '/logout',
+    method: 'post',
+  })
+}
+
+export function register() {
+  return request({
+    url: '/register',
+    method: 'post',
+  })
+}

+ 122 - 0
src/assets/css/global.scss

@@ -0,0 +1,122 @@
+// @import './element-variables.scss';
+// @import './variables.scss';
+// @import './mixin.scss';
+#nprogress .bar {
+    // background: $--color-primary !important;
+}
+
+.flex-wrap-wrap {
+    flex-wrap: wrap;
+}
+
+a {
+    color: #1890ff;
+    text-decoration: none;
+    background-color: transparent;
+    outline: none;
+    cursor: pointer;
+    transition: color 0.3s;
+}
+
+a:active,
+a:hover {
+    text-decoration: none;
+    outline: 0;
+}
+
+a:active {
+    color: #096dd9;
+}
+
+a:hover {
+    color: #40a9ff;
+}
+
+.border-solid-transparent {
+    border: solid 1px transparent;
+}
+
+.text-align-right {
+    text-align: right;
+}
+
+.float-right {
+    float: right;
+}
+
+.padding-t10 {
+    padding-top: 10px;
+}
+
+.cursor-pointer {
+    cursor: pointer;
+}
+
+//公共tabs样式
+// .el-tabs__header .el-tabs__item.is-active {
+//     border-bottom: 2px solid #409eff;
+//     color: #409eff;
+// }
+.el-tabs__header .el-tabs__item.is-active:hover {
+    color: #409eff !important;
+}
+
+.el-tabs__header:hover,
+.el-tabs__item:hover {
+    color: #409eff !important;
+}
+
+//公共input样式
+.el-input__icon {
+    color: #409eff;
+}
+
+.el-input__inner:hover {
+    border-color: #409eff;
+}
+
+.el-input__inner:focus {
+    border-color: #409eff;
+}
+
+//公共单选样式
+.el-radio__input.is-checked .el-radio__inner {
+    border-color: #409eff;
+    background: #409eff;
+}
+
+.el-radio__input.is-checked+.el-radio__label {
+    color: #409eff;
+}
+
+//公共复选样式
+.el-checkbox__input.is-checked .el-checkbox__inner {
+    background-color: #409eff;
+    border-color: #409eff;
+}
+
+.el-checkbox__input.is-checked+.el-checkbox__label {
+    color: #409eff;
+}
+
+.el-pagination .btn-prev .el-icon,
+.el-pagination .btn-next .el-icon {
+    padding-left: 10px;
+}
+
+.el-table--border th:first-child .cell,
+.el-table--border td:first-child .cell {
+    // text-align: center;
+}
+
+.el-table .cell {
+    // text-align: center;
+}
+
+//公共字体无法选中
+.fontSizeSelect {
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+}

+ 1111 - 0
src/assets/css/index.scss

@@ -0,0 +1,1111 @@
+// @import './variables.scss';
+// @import './mixin.scss';
+// @import './transition.scss';
+// @import './element-variables.scss';
+// @import './sidebar.scss';
+body {
+    height: 100%;
+    -moz-osx-font-smoothing: grayscale;
+    -webkit-font-smoothing: antialiased;
+    text-rendering: optimizeLegibility;
+    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;
+}
+
+a:focus,
+a:active {
+    outline: none;
+}
+
+a,
+a:focus,
+a:hover {
+    cursor: pointer;
+    color: inherit;
+    text-decoration: none;
+}
+
+div:focus {
+    outline: none;
+}
+
+.clearfix {
+    &:after {
+        visibility: hidden;
+        display: block;
+        font-size: 0;
+        content: " ";
+        clear: both;
+        height: 0;
+    }
+}
+
+ul li {
+    padding: 0;
+    margin: 0;
+    list-style: none
+}
+
+.inOneLine {
+    display: inline-block;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
+
+// main-container global css
+.mb-5 {
+    margin-bottom: 5px
+}
+
+.mb-10 {
+    margin-bottom: 10px
+}
+
+.mb-20 {
+    margin-bottom: 20px
+}
+
+.mr-30 {
+    margin-right: 30px
+}
+
+.ml-30 {
+    margin-left: 30px
+}
+
+.mt-20 {
+    margin-top: 20px
+}
+
+.mt-40 {
+    margin-top: 40px
+}
+
+.mt-60 {
+    margin-top: 60px
+}
+
+.font-16 {
+    font-size: 16px
+}
+
+.padding-20 {
+    padding: 20px
+}
+
+.text-center {
+    text-align: center
+}
+
+.delete-text {
+    color: #F80000!important
+}
+
+.remarksTxt {
+    opacity: .45;
+    line-height: 1.5;
+}
+
+.app-container {
+    padding: 20px;
+    // width: 100%;
+    width: calc(100%);
+    height: 100%;
+    // margin: 20px;
+    // margin-top: 70px;
+    background: #fff;
+    min-height: calc(100vh - 130px)
+}
+
+.filter-container {
+    width: 100%;
+    height: 100%;
+    display: flex;
+    -webkit-box-pack: justify;
+    -webkit-justify-content: space-between;
+    -ms-flex-pack: justify;
+    justify-content: space-between;
+    vertical-align: middle;
+    .el-button+.el-button {
+        margin-left: 30px!important;
+    }
+    .filter-item {
+        margin-right: 30px;
+        display: inline-block;
+        margin-bottom: 10px
+    }
+}
+
+.el-input__inner {
+    height: 36px;
+    line-height: 36px
+}
+
+.el-button {
+    padding: 10px 12px;
+}
+
+.el-table--small {
+    font-size: 14px!important
+}
+
+.el-table td,
+.el-table th {
+    padding: 10px 0
+}
+
+// 弹框样式start
+.el-dialog__header {
+    background: #f8f8f8;
+    padding: 16px 20px 16px;
+}
+
+.el-form-item:not(.user-layout .el-form-item) {
+    width: 90%;
+    max-width: 400px;
+    margin: 0 auto 20px;
+}
+
+// 弹框样式end
+// 台区列表
+.siteTitle {
+    font-size: 16px;
+    padding: 10px 20px 30px 20px;
+    text-align: center;
+    position: relative;
+    .goBack {
+        position: absolute;
+        left: 0;
+        top: 0
+    }
+}
+
+.status.el-avatar {
+    width: 14px;
+    height: 14px;
+}
+
+.status.el-avatar.online {
+    background: #04F21C
+}
+
+.status.el-avatar.offline {
+    background: #aaa
+}
+
+// 基本信息
+.basicInfo {
+    width: 100%;
+    height: calc(100vh - 180px);
+    // border: 1px solid pink;
+    display: block;
+    overflow-y: auto;
+}
+
+.siteManage-main {
+    padding: 20px;
+}
+
+.groupInfo,
+.basic-info-page,
+.powerScore {
+    .el-form-item {
+        margin-left: 0px!important
+    }
+}
+
+.goArchive {
+    color: #056FFF;
+    // text-decoration: underline;
+    cursor: default;
+}
+
+.goArchive:hover {
+    cursor: text;
+}
+
+.blockTitle {
+    font-weight: bold;
+    position: relative;
+    padding-left: 10px;
+    color: #056FFF;
+}
+
+.blockTitle:before {
+    content: "";
+    width: 3px;
+    margin-right: 9px;
+    height: 16px;
+    position: relative;
+    top: 3px;
+    display: inline-block;
+    background: #4074e7;
+}
+
+// input长度
+.el-form-item__content {
+    width: 250px;
+}
+
+.planOutage {
+    .el-date-editor.el-input,
+    .el-date-editor.el-input__inner {
+        width: 100%;
+        max-width: 100%;
+    }
+}
+
+.el-select {
+    width: 100%
+}
+
+// 单选框样式
+.el-radio {
+    margin-right: 24px
+}
+
+//提交:
+.sublitArea {
+    text-align: right;
+    margin-top: 40px
+}
+
+// 图片上传样式 start
+.el-upload.el-upload--picture-card {
+    width: 90px;
+    height: 90px;
+    line-height: 100px;
+}
+
+.el-upload-list--picture-card .el-upload-list__item {
+    width: 92px!important;
+    height: 92px!important;
+    line-height: 92px!important;
+    text-align: center
+}
+
+.el-upload-list--picture-card .el-upload-list__item-thumbnail {
+    width: 90px!important;
+    height: 90px!important;
+    line-height: 90px!important;
+}
+
+.avatar {
+    width: 90px;
+    height: 90px;
+}
+
+// 电力监测
+.watchDog,
+.variableList {
+    .el-form-item__content {
+        width: 270px
+    }
+    .el-form-item__label {
+        width: 150px!important
+    }
+    .el-form-item__content {
+        // margin-left: 150px!important
+    }
+}
+
+.paginationBlock {
+    margin-top: 20px;
+    text-align: right
+}
+
+.filter-container {
+    .el-button+.el-button {
+        margin-left: 20px !important;
+    }
+    .el-input {
+        margin: 0 20px 0 0;
+    }
+}
+
+// 树形控件icon
+.el-tree-node__content {
+    position: relative;
+    font-size: 16px;
+}
+
+.siteTree .el-icon-delete {
+    color: #409EFF;
+    position: absolute;
+    right: 6px;
+    top: 5px;
+}
+
+.custom-tree-node span:first-child {
+    width: 100px
+}
+
+// 告警管理渐变背景色
+.alarmingTable {
+    a {
+        margin-right: 0!important;
+    }
+}
+
+.alarmingManage .el-table .cell {
+    text-align: left!important;
+}
+
+.gradualBg {
+    padding: 0 5px;
+    color: #444;
+    display: inline-block;
+    background: linear-gradient(to right, rgb(255, 154, 50), transparent);
+}
+
+.gradualBg.total {
+    background: linear-gradient(to right, rgb(138, 196, 243), transparent);
+}
+
+.gradualBg.transparent {
+    background: linear-gradient(to right, transparent, transparent)!important;
+}
+
+//告警详情弹框组件
+.alarmStatusDialog {
+    .el-form-item:not(.user-layout .el-form-item) {
+        margin-bottom: 0
+    }
+    .deviceTit {
+        font-size: 16px;
+        color: #409EFF;
+        padding: 20px 0
+    }
+    .basicTit {
+        color: #4074e7;
+        line-height: 49px;
+        height: 49px;
+        font-size: 16px
+    }
+    .basicTit:before {
+        content: "";
+        width: 3px;
+        margin-right: 9px;
+        height: 16px;
+        position: relative;
+        top: 3px;
+        display: inline-block;
+        background: #4074e7;
+    }
+    .topInfo {
+        position: relative;
+        overflow: hidden;
+        .lubo {
+            // position: absolute;
+            // right: 0px;
+            // bottom: 20px;
+            float: right;
+            margin-bottom: 20px;
+        }
+        .handleStatus {
+            position: absolute;
+            right: 0px;
+            top: 0px;
+            color: #F80000
+        }
+    }
+}
+
+.underline {
+    position: relative;
+}
+
+.underline:after {
+    position: absolute;
+    bottom: 0;
+    left: -20px;
+    right: -20px;
+    height: 1px;
+    content: '';
+    -webkit-transform: scaleY(.5);
+    transform: scaleY(.5);
+    background-color: #000; //这个是唯佳的线颜色
+    opacity: .2
+}
+
+.underline:last-child:after {
+    //可以这样用
+    height: 0;
+}
+
+// 谐波分析
+.harmonicReport {
+    .filter-container .filter-item {
+        // margin-right: 10px
+    }
+}
+
+.timeTab.el-button {
+    margin-bottom: 20px;
+    border-radius: 0
+}
+
+// 三项不平衡
+.blanceChartTit {
+    padding: 10px 14px;
+    margin-bottom: 10px;
+    border-bottom: 1px solid #f0f0f0;
+    background: #FAFAFA;
+    font-weight: bold
+}
+
+//评估报告
+.defaultCursor:hover {
+    cursor: default!important;
+}
+
+.assePage .blanceChartTit {
+    margin-bottom: 0;
+    width: 100%;
+    display: flex;
+    justify-content: space-between;
+    vertical-align: middle;
+    span {
+        display: inline-block
+    }
+}
+
+.assePage {
+    .subTits {
+        margin: 25px auto;
+        text-align: center;
+        font-weight: bold
+    }
+    .assNum {
+        font-size: 18px;
+        color: #2EAEFF;
+        margin-bottom: 10px;
+    }
+    .greenRate {
+        color: #04A522
+    }
+    .assTxt {
+        font-size: 14px
+    }
+    .assSmallbox {
+        padding: 10px 0;
+        text-align: center;
+        font-weight: bold;
+    }
+}
+
+// tab重置样式
+.asseTabs {
+    margin-bottom: 20px;
+    border-bottom: 1px solid #E5E5E5;
+    width: calc(100% + 40px);
+    margin-left: -20px;
+}
+
+.asseTabs span {
+    line-height: 50px;
+    height: 50px;
+    font-size: 16px;
+    display: inline-block;
+    padding: 0 20px;
+}
+
+.asseTabs span.active {
+    border-bottom: 2px solid #2EAEFF
+}
+
+.banlanceBtn {
+    max-width: 80%;
+    // margin: 0 auto 20px;
+    height: 40px;
+    // line-height: 40px;
+    width: 236px;
+    font-size: 16px!important;
+    // background: #6dc6ff;
+    // color: #fff
+}
+
+.assCard {
+    min-height: 356px!important;
+    .noDataImg {
+        width: 40%;
+        margin-top: 40px;
+    }
+}
+
+.assCard ul {
+    text-align: left;
+    margin: 0;
+    padding: 15px 20px 0;
+    li:not(:last-child) {
+        border-bottom: 1px solid #F0F0F0;
+    }
+    li {
+        line-height: 40px;
+        display: flex;
+        justify-content: space-between;
+        vertical-align: middle;
+        font-size: 14px;
+        div {
+            display: inline-block;
+            white-space: nowrap;
+            overflow: hidden;
+            text-overflow: ellipsis;
+        }
+        span {
+            color: #04A522;
+            background: #F4F4F4;
+            display: inline-block;
+            border-radius: 20px;
+            line-height: 20px;
+            height: 20px;
+            text-align: center;
+            width: 58px;
+            margin-top: 10px;
+        }
+        span.overLimit {
+            color: #F80000
+        }
+    }
+}
+
+.totalScore {
+    font-weight: bold;
+    text-align: center;
+    margin: 30px;
+    .el-button {
+        font-size: 16px;
+        margin-left: 10px;
+    }
+}
+
+// 实时评分 
+.descIcon {
+    cursor: pointer
+}
+
+.descIcon img {
+    position: relative;
+    top: 2px;
+}
+
+.smallSquare {
+    display: inline-block;
+    width: 7px;
+    position: relative;
+    top: -1px;
+    height: 7px;
+    background: #F80000;
+}
+
+.smallSquare.green {
+    background: #24BE00
+}
+
+.loopUnbanlancePanel,
+.loopHarmonicPanel {
+    height: 591px;
+    overflow: hidden;
+    .el-row {
+        margin-bottom: 0!important;
+    }
+}
+
+.loopUnbanlanceCard {
+    // height: calc(100% - 100px);
+    ul {
+        padding: 0;
+        margin-bottom: 0;
+        font-size: 14px;
+        margin-top: 20px
+    }
+    li {
+        display: flex;
+        >div {
+            margin: 2px 4px;
+            line-height: 14px;
+        }
+        >div:first-child {
+            // min-width: 64px;
+        }
+    }
+}
+
+@media(min-width:1500px) {
+    .loopUnbanlanceCard {
+        li {
+            >div {
+                margin: 7px 20px;
+                line-height: 14px;
+            }
+        }
+    }
+}
+
+@media(max-width:1200px) {
+    .bg-purple {
+        margin-bottom: 20px
+    }
+}
+
+.voltagePanel {
+    .el-table--small th,
+    .el-table--small td {
+        padding: 15px 0
+    }
+    .uList p {
+        margin-right: 10px;
+        padding: 8px 0
+    }
+    .shangXian {
+        padding: 20px 0 0;
+        display: flex;
+        width: 300px;
+        margin-left: 40px;
+        text-align: center;
+        div {
+            width: 50%;
+            text-align: center;
+            position: relative
+        }
+        div:first-child:after {
+            position: absolute;
+            top: 0;
+            z-index: 4;
+            /* left: -20px; */
+            right: 20px;
+            height: 211px;
+            width: 1px;
+            border: 1px dashed #000;
+            content: "";
+            /* transform: scaleY(0.5); */
+            background-color: rgba(0, 0, 0, 0);
+            opacity: .2;
+        }
+        div:last-child:before {
+            position: absolute;
+            top: 0;
+            z-index: 4;
+            left: 20px;
+            height: 211px;
+            width: 1px;
+            border: 1px dashed #000;
+            content: "";
+            /* transform: scaleY(.2); */
+            background-color: rgba(0, 0, 0, 0);
+            opacity: .2;
+        }
+    }
+}
+
+.frequencyPanel {
+    text-align: center;
+    .frequencyTit {
+        color: #F80000;
+        font-weight: bold
+    }
+    .frequencyTit2 {
+        font-weight: bold;
+        margin: 10px auto;
+        span {
+            color: #fff;
+            background: #21c393;
+            display: inline-block;
+            border-radius: 20px;
+            line-height: 24px;
+            height: 24px;
+            text-align: center;
+            font-size: 14px;
+            width: 58px;
+        }
+    }
+    .frequencyBox .grid-content {
+        min-height: 50px!important;
+        border-radius: 0;
+        background: #f0f0f0;
+        border: none;
+    }
+    .rightSplitRed {
+        position: relative;
+        i {
+            position: absolute;
+            position: absolute;
+            right: -14.5px;
+            bottom: -11px;
+            color: #f1673d
+        }
+        i:after {
+            display: none
+        }
+    }
+    .greenShadow {
+        position: absolute;
+        width: 118px;
+        height: 100%;
+        bottom: 0;
+        background: rgba(37, 215, 162, .3);
+        left: 41px;
+        background-image: -webkit-gradient(linear, 0 0, 100% 100%, color-stop(.25, hsla(0, 0%, 100%, .2)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, hsla(0, 0%, 100%, .2)), color-stop(.75, hsla(0, 0%, 100%, .2)), color-stop(.75, transparent), to(transparent));
+        background-image: -moz-gradient(linear, 0 0, 100% 100%, color-stop(.25, hsla(0, 0%, 100%, .2)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, hsla(0, 0%, 100%, .2)), color-stop(.75, hsla(0, 0%, 100%, .2)), color-stop(.75, transparent), to(transparent));
+        background-image: -ms-gradient(linear, 0 0, 100% 100%, color-stop(.25, hsla(0, 0%, 100%, .2)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, hsla(0, 0%, 100%, .2)), color-stop(.75, hsla(0, 0%, 100%, .2)), color-stop(.75, transparent), to(transparent));
+        background-image: -o-gradient(linear, 0 0, 100% 100%, color-stop(.25, hsla(0, 0%, 100%, .2)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, hsla(0, 0%, 100%, .2)), color-stop(.75, hsla(0, 0%, 100%, .2)), color-stop(.75, transparent), to(transparent));
+        background-image: gradient(linear, 0 0, 100% 100%, color-stop(.25, hsla(0, 0%, 100%, .2)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, hsla(0, 0%, 100%, .2)), color-stop(.75, hsla(0, 0%, 100%, .2)), color-stop(.75, transparent), to(transparent));
+        background-size: 8px 8px
+    }
+    .rightSplitRed .grid-content:after {
+        position: absolute;
+        bottom: -3px;
+        z-index: 4;
+        right: -8px;
+        height: 125%;
+        width: 2px;
+        border: 1px solid #f1673d;
+        content: "";
+        background-color: rgba(0, 0, 0, 0);
+    }
+    .frequencyBox .grid-content {
+        border-right: 1px dashed #aaa
+    }
+    .frequencyBox .el-col:last-child .grid-content {
+        border-right: none
+    }
+}
+
+.voltagePanel,
+.frequencyPanel,
+.powerPanel {
+    height: 285px
+}
+
+.powerPanel {
+    .el-table--small th,
+    .el-table--small td {
+        padding: 15px 0
+    }
+    .uList p {
+        margin-right: 10px;
+        padding: 8px 0
+    }
+}
+
+.harmonicCard {
+    height: calc(50% - 78px);
+    // border: 1px solid red;
+}
+
+// 工单管理
+.workManage {
+    .tab-section .el-button {
+        margin-left: 0!important;
+        padding: 10px 20px;
+    }
+    .el-checkbox {
+        margin-left: 20px
+    }
+    img.jianxiu {
+        width: 18px;
+        position: relative;
+        top: -2px
+    }
+}
+
+.workStatusBtn {
+    display: inline-block;
+    padding: 0px 12px;
+    background: #e54552;
+    color: #fff;
+    border-top-left-radius: 20px;
+    border-bottom-left-radius: 20px;
+    border-bottom-right-radius: 20px;
+    font-size: 12px;
+    transform: scale(.8);
+}
+
+.alarmStatusDialog {
+    .el-radio__input.is-checked+.el-radio__label {
+        color: #606266!important
+    }
+}
+
+.defetSubTit {
+    background: #F4F4F4;
+    width: calc(100% + 40px);
+    margin-left: -20px;
+    line-height: 38px;
+    padding: 0 20px;
+    margin-bottom: 20px;
+    color: #2DAEFF
+}
+
+// 工单详情
+.handleDetailPage {
+    padding: 20px 0;
+    .basicTit {
+        color: #4074e7;
+        line-height: 49px;
+        height: 49px;
+        font-size: 16px;
+        >span {
+            display: inline-block;
+            margin-right: 10px
+        }
+    }
+    .handleTestBlock {
+        padding: 0 20px 20px 20px;
+        border-bottom: 3px solid #1890ff;
+    }
+    .jianxiuSec {
+        >div {
+            display: table-cell;
+            vertical-align: top;
+        }
+        .left-img img {
+            width: 115px;
+            height: 115px;
+            margin-right: 20px
+        }
+        .right-des {
+            position: relative;
+            .tit {
+                font-weight: bold;
+                margin: 10px 0
+            }
+            .bottomStatus {
+                position: absolute;
+                bottom: 0;
+            }
+        }
+    }
+    .desSec {
+        span {
+            display: inline-block;
+            margin-right: 20px
+        }
+    }
+    .siteBlock,
+    .companyBlock {
+        display: inline-block;
+        width: 140px;
+        height: 140px;
+        border: 1px solid #aaa;
+        background: #f0f0f0;
+        margin-left: 10px;
+        text-align: center;
+        position: relative;
+        /*自己的50% */
+        >div {
+            width: 140px;
+            height: auto;
+            position: absolute;
+            left: 50%;
+            /* 定位父级的50% */
+            top: 50%;
+            transform: translate(-50%, -50%);
+            p:last-child {
+                font-size: 18px;
+                margin-top: 30px
+            }
+        }
+    }
+    .handlerBlock {
+        padding: 20px;
+        border-bottom: 1px solid #E5E5E5;
+        ;
+        div {
+            margin-bottom: 10px;
+        }
+        i {
+            font-size: 16px;
+        }
+        .record {
+            span {
+                color: cornflowerblue;
+                display: inline-block;
+                margin-left: 10px;
+                cursor: pointer
+            }
+        }
+        b {
+            margin: 0 5px;
+            display: inline-block;
+        }
+        .imgSquare {
+            border: 1px solid #ddd;
+            width: 100px;
+            height: 100px;
+            margin-left: 40px;
+            img {
+                width: 80%;
+                margin-left: 10%;
+                height: 80%;
+                margin-top: 10%;
+            }
+        }
+    }
+}
+
+.basicTit:before {
+    content: "";
+    width: 3px;
+    margin-right: 9px;
+    height: 16px;
+    position: relative;
+    top: 3px;
+    display: inline-block;
+    background: #4074e7;
+}
+
+// 运维统计
+.operStatisticsPage {
+    padding: 0;
+    .el-tabs__content {
+        overflow: hidden;
+        position: absolute;
+        top: -10px;
+        left: 614px;
+    }
+    .customBlock {
+        position: relative;
+        .customPicker {
+            position: absolute;
+            right: 0;
+            bottom: 0
+        }
+    }
+    .operStatisticsInner {
+        padding: 20px;
+        .bg-purple {
+            // background: #d3dce6;
+            border: 1px solid #e5e5e5;
+        }
+        .staitcDataSec {
+            .staitcDataItem {
+                // text-align: center;
+                padding: 20px 10px;
+                height: 110px;
+                .imgBlock {
+                    text-align: right;
+                    img {
+                        // max-width: 90%
+                    }
+                }
+                .staticBlock {
+                    // text-align: center
+                }
+                p {
+                    margin-bottom: 0
+                }
+                .num {
+                    font-size: 26px;
+                    color: #49B8F6;
+                    display: inline-block;
+                    margin-right: 5px;
+                }
+            }
+        }
+        .panelTit {
+            padding: 10px 14px;
+            margin-bottom: 10px;
+            border-bottom: 1px solid #f0f0f0;
+            background: #FAFAFA;
+            font-weight: bold;
+        }
+        .workPanel {
+            height: 311px;
+            .workPanelChart {
+                height: calc(100% - 60px)
+            }
+        }
+        .siteWorkPanel {
+            height: 311px;
+            .siteWorkChart {
+                height: calc(100% - 60px)
+            }
+        }
+        .staticPanel {
+            height: 365px;
+        }
+    }
+}
+
+// 角色权限
+.roleLeft {
+    .addBox {
+        text-align: center;
+        display: flex;
+        justify-content: space-around;
+        line-height: 36px
+    }
+    .el-radio-button {
+        width: 100%
+    }
+    .el-radio-button__inner {
+        width: 100%;
+        // line-height: 40px;
+        padding: 13px 15px
+    }
+    .el-radio-button__inner {
+        border-left: 1px solid #dcdfe6;
+        text-align: left;
+        position: relative; // border-bottom: none;
+        img {
+            margin-right: 5px
+        }
+        i {
+            position: absolute;
+            right: 10px;
+            font-size: 15px;
+            color: #F80000;
+            opacity: 0
+        }
+    }
+    .el-radio-button__inner:hover {
+        color: #444;
+        background: #f1f7fc;
+        // border-color: #f1f7fc;
+        i {
+            opacity: 1;
+        }
+    }
+    .el-radio-button:last-child .el-radio-button__inner {
+        // border-bottom: 1px solid #dcdfe6;
+    }
+    .el-radio-button__original-radio:checked+.el-radio-button__inner {
+        background: #BDE5FF;
+        border-color: #BDE5FF;
+        color: #444;
+        box-shadow: none
+    }
+}
+
+// 用户管理弹框
+.userManageDialog {
+    .el-date-editor.el-input,
+    .el-date-editor.el-input__inner {
+        width: 240px !important;
+    }
+}
+
+.downloadMb {
+    margin-left: 20px;
+    text-decoration: underline;
+}

BIN
src/assets/error_images/403.png


BIN
src/assets/error_images/404.png


BIN
src/assets/error_images/cloud.png


BIN
src/assets/images/archiveImg.png


BIN
src/assets/images/bg-smooth.jpg


BIN
src/assets/images/common-mainIcon.jpg


BIN
src/assets/images/default_head.jpg


BIN
src/assets/images/descIcon.png


BIN
src/assets/images/doneWorkIcon.png


BIN
src/assets/images/img.jpg


+ 1 - 0
src/assets/images/jianxiu.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1634540359791" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2325" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M218.175448 138.780446c106.922088-66.072058 248.977012-52.721882 341.704166 40.005274 75.650997 75.650997 98.459434 184.14192 68.410224 279.599449L911.43425 741.52958a42.666667 42.666667 0 0 1 0 60.339779l-120.679558 120.679557a42.666667 42.666667 0 0 1-60.339778 0L447.270502 639.404505c-95.442445 30.064295-203.948452 7.240773-279.599449-68.410224-92.74224-92.74224-106.062246-234.797164-40.005273-341.704167l190.85472 190.85472a21.333333 21.333333 0 0 0 28.299356 1.659344l62.210312-61.999122a21.333333 21.333333 0 0 0 1.644259-28.314441l-192.483894-192.725253z m55.090218 326.619222L152.510684 344.644686l-0.015085 0.256444a213.461333 213.461333 0 0 0 269.281347 235.340222l6.290422-1.885618 37.033539-11.660662L745.499858 847.124193a21.333333 21.333333 0 0 0 30.16989 0l60.339778-60.339779a21.333333 21.333333 0 0 0 0-30.169889L555.580405 476.185404l11.675747-37.018454a213.418667 213.418667 0 0 0-226.771973-276.401441l-6.923989 0.890011 120.724812 120.724812 2.519185 2.670036 1.659344 1.870533 2.383422 2.835969a85.333333 85.333333 0 0 1-3.575132 110.165351l-2.986819 3.137669-60.339779 60.339778-2.68512 2.534271-1.855448 1.644259-2.851055 2.398506a85.333333 85.333333 0 0 1-110.150266-3.590217L273.250581 465.384583z" fill="#89b7eb" p-id="2326"></path></svg>

BIN
src/assets/images/jianxiuImg.png


BIN
src/assets/images/logo.png


BIN
src/assets/images/logo1.png


BIN
src/assets/images/logo_admin.png


BIN
src/assets/images/noDataImg.png


BIN
src/assets/images/record-bg2.png


BIN
src/assets/images/record-dts.png


BIN
src/assets/images/record-exception.png


BIN
src/assets/images/record-item.png


BIN
src/assets/images/record-station.png


+ 7 - 0
src/assets/images/userIcon.svg

@@ -0,0 +1,7 @@
+<svg 
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ width="16px" height="14px">
+<path fill-rule="evenodd"  opacity="0.851" fill="rgb(0, 0, 0)"
+ d="M15.432,12.189 C15.119,12.189 14.865,11.926 14.865,11.602 C14.865,11.575 14.863,11.547 14.860,11.521 C14.646,9.314 13.046,8.013 10.529,7.808 C10.217,7.783 9.984,7.500 10.008,7.176 C10.032,6.867 10.285,6.640 10.580,6.642 C11.948,6.229 12.748,4.757 12.368,3.331 C12.168,2.583 11.667,1.960 10.993,1.620 C10.705,1.490 10.574,1.144 10.700,0.847 C10.825,0.549 11.160,0.414 11.447,0.544 C11.462,0.550 11.476,0.557 11.490,0.565 C13.351,1.501 14.127,3.820 13.223,5.746 C12.999,6.222 12.682,6.634 12.305,6.973 C14.388,7.622 15.770,9.140 15.990,11.403 C15.997,11.469 16.000,11.535 16.000,11.602 C16.000,11.926 15.746,12.189 15.432,12.189 ZM12.364,11.865 C12.370,11.929 12.373,11.994 12.373,12.059 C12.373,13.130 11.533,13.999 10.499,13.999 L1.809,13.999 C0.809,13.999 -0.001,13.160 -0.000,12.126 C-0.000,12.074 0.002,12.022 0.006,11.969 C0.194,9.657 1.583,8.092 3.680,7.422 C2.630,6.695 1.938,5.458 1.938,4.053 C1.938,1.815 3.692,0.000 5.855,0.000 C8.018,0.000 9.771,1.815 9.771,4.053 C9.771,5.381 9.145,6.549 8.191,7.288 C10.538,7.846 12.126,9.417 12.364,11.865 ZM1.024,12.059 C0.988,12.507 1.310,12.901 1.743,12.939 C1.765,12.941 1.787,12.942 1.809,12.942 L10.499,12.942 C10.970,12.941 11.352,12.545 11.351,12.057 C11.351,12.028 11.350,11.999 11.347,11.970 C11.106,9.487 9.147,8.106 6.190,8.106 C3.207,8.106 1.229,9.532 1.024,12.059 ZM8.750,4.053 C8.750,2.399 7.454,1.058 5.855,1.057 C5.855,1.057 5.855,1.057 5.855,1.057 C4.256,1.058 2.960,2.399 2.960,4.053 C2.960,5.707 4.256,7.048 5.855,7.048 C7.453,7.049 8.750,5.708 8.750,4.053 Z"/>
+</svg>

BIN
src/assets/images/workDailyIcon.png


BIN
src/assets/images/workIcon.png


BIN
src/assets/images/workTimeIcon.png


BIN
src/assets/login_images/login_background.png


BIN
src/assets/login_images/login_form.png


BIN
src/assets/logo.png


BIN
src/assets/logo1.png


BIN
src/assets/logo_admin.png


+ 43 - 0
src/components/SvgIcon.vue

@@ -0,0 +1,43 @@
+<template>
+  <svg :class="svgClass" aria-hidden="true">
+    <use :xlink:href="iconName"></use>
+  </svg>
+</template>
+
+<script>
+export default {
+  name: 'svg-icon',
+  props: {
+    iconClass: {
+      type: String,
+      required: true
+    },
+    className: {
+      type: String
+    }
+  },
+  computed: {
+    iconName() {
+      return `#icon-${this.iconClass}`
+    },
+    svgClass() {
+      if (this.className) {
+        return 'svg-icon ' + this.className
+      } else {
+        return 'svg-icon'
+      }
+    }
+  }
+}
+</script>
+
+<style scoped>
+.svg-icon {
+  width: 1em;
+  height: 1em;
+  /* vertical-align: -0.15em; */
+  fill: currentColor;
+  overflow: hidden;
+  margin-right: 8px;
+}
+</style>

+ 9 - 0
src/config/config.js

@@ -0,0 +1,9 @@
+/**
+ * @description 导出自定义配置
+ **/
+const config = {
+  layout: 'vertical',
+  donation: false,
+  templateFolder: 'project',
+}
+module.exports = config

+ 8 - 0
src/config/default/index.js

@@ -0,0 +1,8 @@
+/**
+ * @description 导出默认配置(通用配置|主题配置|网络配置)
+ **/
+const setting = require('./setting.config')
+const theme = require('./theme.config')
+const network = require('./net.config')
+
+module.exports = { setting, theme, network }

+ 14 - 0
src/config/default/net.config.js

@@ -0,0 +1,14 @@
+/**
+ * @description 导出默认网路配置
+ **/
+const network = {
+    //配后端数据的接收方式application/json;charset=UTF-8 或 application/x-www-form-urlencoded;charset=UTF-8
+    contentType: 'application/json;charset=UTF-8',
+    //消息框消失时间
+    messageDuration: 3000,
+    //最长请求时间
+    requestTimeout: 10000,
+    //操作正常code,支持String、Array、int多种类型
+    successCode: [200, 0],
+}
+module.exports = network

+ 80 - 0
src/config/default/setting.config.js

@@ -0,0 +1,80 @@
+/**
+ * @description 导出默认通用配置
+ */
+
+const setting = {
+    //开发以及部署时的URL,hash模式时在不确定二级目录名称的情况下建议使用""代表相对路径或者"/二级目录/",history模式默认使用"/"或者"/二级目录/"
+    publicPath: './',
+    //生产环境构建文件的目录名
+    outputDir: 'dist',
+    //放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录。
+    assetsDir: 'static',
+    //开发环境每次保存时是否输出为eslint编译警告
+    lintOnSave: true,
+    //进行编译的依赖
+    transpileDependencies: ['vue-echarts', 'resize-detector'],
+    //默认的接口地址 如果是开发环境和生产环境走vab-mock-server,当然你也可以选择自己配置成需要的接口地址
+    baseURL: process.env.NODE_ENV === 'development' ? 'mock-server' : 'mock-server',
+    //标题 (包括初次加载雪花屏的标题 页面的标题 浏览器的标题)
+    // title: 'vue-admin-beautiful-antdv',
+    // title: '永天电力后台管理系统',
+    //标题分隔符
+    titleSeparator: ' - ',
+    //标题是否反转 如果为false:"page - title",如果为ture:"title - page"
+    titleReverse: false,
+    //简写
+    abbreviation: 'vab-pro',
+    //开发环境端口号
+    devPort: '9999',
+    //版本号
+    version: process.env.VUE_APP_VERSION,
+    //pro版本copyright可随意修改
+    copyright: '1813914505@qq.com',
+    //缓存路由的最大数量
+    keepAliveMaxNum: 99,
+    //路由模式,可选值为 history 或 hash
+    routerMode: 'hash',
+    //不经过token校验的路由
+    routesWhiteList: ['/login', '/register', '/callback', '/404', '/403', '/401'],
+    //加载时显示文字
+    loadingText: '正在加载中...',
+    //token名称
+    tokenName: 'accessToken',
+    //token在localStorage、sessionStorage、cookie存储的key的名称
+    tokenTableName: 'accessToken',
+    //token存储位置localStorage sessionStorage cookie
+    storage: 'localStorage',
+    //token失效回退到登录页时是否记录本次的路由
+    recordRoute: true,
+    //是否显示logo,不显示时设置false,显示时请填写remixIcon图标名称,暂时只支持设置remixIcon
+    // logo: 'vuejs-fill',
+    //语言类型zh、en
+    i18n: 'zh',
+    //在哪些环境下显示高亮错误
+    errorLog: ['development', 'production'],
+    //是否开启登录拦截
+    loginInterception: true,
+    //是否开启登录RSA加密
+    loginRSA: false,
+    //intelligence(前端导出路由)和all(后端导出路由)两种方式
+    authentication: 'all',
+    //是否开启roles字段进行角色权限控制(如果是all模式后端完全处理角色并进行json组装,可设置false不处理路由中的roles字段)
+    rolesControl: true,
+    //vertical gallery comprehensive common布局时是否只保持一个子菜单的展开
+    uniqueOpened: false,
+    //vertical布局时默认展开的菜单path,使用逗号隔开建议只展开一个
+    defaultOpeneds: ['/vab'],
+    //需要加loading层的请求,防止重复提交
+    debounce: ['doEdit'],
+    //需要自动注入并加载的模块
+    providePlugin: {},
+    //npm run build时是否自动生成7z压缩包
+    build7z: false,
+    //代码生成机生成在view下的文件夹名称
+    templateFolder: 'project',
+    //是否显示终端donation打印
+    donation: false,
+    //画廊布局和综合布局时,是否点击一级菜单默认开启第一个二级菜单
+    openFirstMenu: true,
+}
+module.exports = setting

+ 28 - 0
src/config/default/theme.config.js

@@ -0,0 +1,28 @@
+/**
+ * @description 导出默认主题配置
+ */
+const theme = {
+  //布局种类 horizontal vertical gallery comprehensive common
+  layout: 'horizontal',
+  //主题名称 default ocean green glory white
+  themeName: 'default',
+  //是否固定头部
+  fixedHeader: true,
+  //是否显示顶部进度条
+  showProgressBar: true,
+  //是否显示多标签页
+  showTabsBar: true,
+  //是否显示语言选择组件
+  showLanguage: true,
+  //是否显示刷新组件
+  showRefresh: true,
+  //是否显示搜索组件
+  showSearch: true,
+  //是否显示主题组件
+  showTheme: true,
+  //是否显示通知组件
+  showNotice: true,
+  //是否显示全屏组件
+  showFullScreen: true,
+}
+module.exports = theme

+ 9 - 0
src/config/index.js

@@ -0,0 +1,9 @@
+/**
+ * @description 3个子配置,通用配置|主题配置|网络配置,建议在当前目录下修改config.js修改配置,会覆盖默认配置,也可以直接修改默认配置
+ */
+//默认配置
+const { setting, theme, network } = require('./default')
+//自定义配置
+const config = require('./config')
+//导出配置(以自定义配置为主)
+module.exports = Object.assign({}, setting, theme, network, config)

+ 4 - 0
src/icons/index.js

@@ -0,0 +1,4 @@
+//自动引入 @/src/icons
+const requireAll = requireContext => requireContext.keys().map(requireContext);
+const req = require.context('./svgIcon', false, /\.svg$/);
+requireAll(req);

+ 7 - 0
src/icons/svgIcon/alarmManage.svg

@@ -0,0 +1,7 @@
+<svg 
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ width="16px" height="16px">
+<path fill-rule="evenodd" 
+ d="M15.467,7.724 L13.867,7.724 C13.572,7.724 13.333,7.477 13.333,7.172 C13.333,6.868 13.572,6.621 13.867,6.621 L15.467,6.621 C15.761,6.621 16.000,6.868 16.000,7.172 C16.000,7.477 15.761,7.724 15.467,7.724 ZM13.067,3.862 C12.625,3.862 12.267,3.491 12.267,3.034 C12.267,2.577 12.625,2.207 13.067,2.207 C13.508,2.207 13.867,2.577 13.867,3.034 C13.867,3.491 13.508,3.862 13.067,3.862 ZM13.074,12.690 L13.333,12.690 C14.217,12.690 14.933,13.431 14.933,14.345 C14.933,15.259 14.217,16.000 13.333,16.000 L2.667,16.000 C1.783,16.000 1.067,15.259 1.067,14.345 C1.067,13.431 1.783,12.690 2.667,12.690 L2.941,12.690 L2.941,8.276 C2.941,5.381 5.209,3.034 8.007,3.034 C10.806,3.034 13.074,5.381 13.074,8.276 L13.074,12.690 ZM2.133,14.345 C2.133,14.650 2.372,14.896 2.667,14.896 L13.333,14.896 C13.628,14.896 13.867,14.650 13.867,14.345 C13.867,14.040 13.628,13.793 13.333,13.793 L2.667,13.793 C2.372,13.793 2.133,14.040 2.133,14.345 ZM8.007,4.138 C5.798,4.138 4.007,5.991 4.007,8.276 L4.007,12.690 L7.467,12.690 L7.467,10.393 C6.697,10.154 6.133,9.425 6.133,8.552 C6.133,7.485 6.969,6.621 8.000,6.621 C9.031,6.621 9.867,7.485 9.867,8.552 C9.867,9.425 9.303,10.154 8.533,10.393 L8.533,12.690 L12.007,12.690 L12.007,8.276 C12.007,5.991 10.217,4.138 8.007,4.138 ZM8.000,9.379 C8.442,9.379 8.800,9.009 8.800,8.552 C8.800,8.095 8.442,7.724 8.000,7.724 C7.558,7.724 7.200,8.095 7.200,8.552 C7.200,9.009 7.558,9.379 8.000,9.379 ZM8.000,2.759 C7.705,2.759 7.467,2.512 7.467,2.207 L7.467,0.552 C7.467,0.247 7.705,-0.000 8.000,-0.000 C8.294,-0.000 8.533,0.247 8.533,0.552 L8.533,2.207 C8.533,2.512 8.294,2.759 8.000,2.759 ZM2.933,3.862 C2.491,3.862 2.133,3.491 2.133,3.034 C2.133,2.577 2.491,2.207 2.933,2.207 C3.375,2.207 3.733,2.577 3.733,3.034 C3.733,3.491 3.375,3.862 2.933,3.862 ZM2.667,7.172 C2.667,7.477 2.428,7.724 2.133,7.724 L0.533,7.724 C0.239,7.724 -0.000,7.477 -0.000,7.172 C-0.000,6.868 0.239,6.621 0.533,6.621 L2.133,6.621 C2.428,6.621 2.667,6.868 2.667,7.172 Z"/>
+</svg>

+ 1 - 0
src/icons/svgIcon/anticon-dingwei.svg

@@ -0,0 +1 @@
+<svg t="1634867566232" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6343" width="48" height="48"><path d="M611.6 618.7l18.6-27.9c111-46.3 189.1-155.8 189.1-283.6C819.2 137.5 681.7 0 512 0S204.8 137.5 204.8 307.2c0 127.8 78.1 237.3 189.1 283.6l18.6 27.9C177.5 637.2 0 719.8 0 819.2 0 932.3 229.2 1024 512 1024s512-91.7 512-204.8c0-99.4-177.5-182-412.4-200.5zM358.4 307.2c0-84.8 68.8-153.6 153.6-153.6s153.6 68.8 153.6 153.6S596.8 460.8 512 460.8 358.4 392 358.4 307.2z m153.6 512c-197.9 0-358.4-45.8-358.4-102.4 0-46.6 109.6-85.7 258.9-98L512 768l99.5-149.2c149.3 12.4 258.9 51.4 258.9 98 0 56.6-160.5 102.4-358.4 102.4z" fill="#00a2ff" p-id="6344"></path></svg>

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است