dong преди 1 година
ревизия
d765e88c5b
променени са 100 файла, в които са добавени 31433 реда и са изтрити 0 реда
  1. 15
    0
      .editorconfig
  2. 12
    0
      .env
  3. 25
    0
      .env.development
  4. 26
    0
      .env.production
  5. 28
    0
      .env.test
  6. 15
    0
      .eslintignore
  7. 61
    0
      .eslintrc.cjs
  8. 26
    0
      .gitignore
  9. 4
    0
      .husky/commit-msg
  10. 4
    0
      .husky/pre-commit
  11. 9
    0
      .prettierignore
  12. 41
    0
      .prettierrc.cjs
  13. 4
    0
      .stylelintignore
  14. 40
    0
      .stylelintrc.cjs
  15. 14
    0
      .vscode/extensions.json
  16. 126
    0
      .vscode/settings.json
  17. 254
    0
      CHANGELOG.md
  18. 21
    0
      LICENSE
  19. 184
    0
      README.md
  20. 46
    0
      build/getEnv.ts
  21. 110
    0
      build/plugins.ts
  22. 30
    0
      build/proxy.ts
  23. 162
    0
      commitlint.config.cjs
  24. 105
    0
      index.html
  25. 8
    0
      lint-staged.config.cjs
  26. 16127
    0
      package-lock.json
  27. 130
    0
      package.json
  28. 11367
    0
      pnpm-lock.yaml
  29. 5
    0
      postcss.config.cjs
  30. Двоични данни
      public/favicon.ico
  31. Двоични данни
      public/logo.png
  32. 5
    0
      public/vue.svg
  33. 44
    0
      src/App.vue
  34. 3
    0
      src/api/config/servicePort.ts
  35. 46
    0
      src/api/helper/axiosCancel.ts
  36. 43
    0
      src/api/helper/checkStatus.ts
  37. 469
    0
      src/api/home/Multisite.ts
  38. 154
    0
      src/api/index.ts
  39. 420
    0
      src/api/interface/index.ts
  40. 47
    0
      src/api/modules/login.ts
  41. 16
    0
      src/api/modules/upload.ts
  42. 21
    0
      src/api/modules/user.ts
  43. Двоични данни
      src/assets/fonts/DIN.otf
  44. Двоични данни
      src/assets/fonts/MetroDF.ttf
  45. Двоични данни
      src/assets/fonts/YouSheBiaoTiHei.ttf
  46. 14
    0
      src/assets/fonts/font.scss
  47. 48
    0
      src/assets/iconfont/iconfont.scss
  48. Двоични данни
      src/assets/iconfont/iconfont.ttf
  49. 1
    0
      src/assets/icons/xianxingdaoyu.svg
  50. 1
    0
      src/assets/icons/xianxingdiqiu.svg
  51. 1
    0
      src/assets/icons/xianxingditu.svg
  52. 1
    0
      src/assets/icons/xianxingfanchuan.svg
  53. 1
    0
      src/assets/icons/xianxingfeiji.svg
  54. 1
    0
      src/assets/icons/xianxinglvhangriji.svg
  55. 1
    0
      src/assets/icons/xianxingtianqiyubao.svg
  56. 1
    0
      src/assets/icons/xianxingxiangjipaizhao.svg
  57. 1
    0
      src/assets/icons/xianxingxiarilengyin.svg
  58. 1
    0
      src/assets/icons/xianxingyoulun.svg
  59. 1
    0
      src/assets/icons/xianxingzijiayou.svg
  60. 1
    0
      src/assets/icons/yikaimen.svg
  61. 539
    0
      src/assets/iconsvg/demo.css
  62. 327
    0
      src/assets/iconsvg/demo_index.html
  63. 40
    0
      src/assets/iconsvg/iconfont.css
  64. 66
    0
      src/assets/iconsvg/iconfont.js
  65. 51
    0
      src/assets/iconsvg/iconfont.json
  66. 31
    0
      src/assets/iconsvg/iconfont.svg
  67. Двоични данни
      src/assets/iconsvg/iconfont.ttf
  68. Двоични данни
      src/assets/iconsvg/iconfont.woff
  69. Двоични данни
      src/assets/iconsvg/iconfont.woff2
  70. Двоични данни
      src/assets/images/403.png
  71. Двоични данни
      src/assets/images/404.png
  72. Двоични данни
      src/assets/images/500.png
  73. Двоични данни
      src/assets/images/Electricbox.png
  74. Двоични данни
      src/assets/images/avatar.gif
  75. Двоични данни
      src/assets/images/charging.png
  76. Двоични данни
      src/assets/images/chaxun.png
  77. Двоични данни
      src/assets/images/discharge.png
  78. Двоични данни
      src/assets/images/dw.36d3b54f.png
  79. Двоични данни
      src/assets/images/gu.png
  80. Двоични данни
      src/assets/images/gu1.png
  81. Двоични данни
      src/assets/images/household.png
  82. 33
    0
      src/assets/images/login_bg.svg
  83. Двоични данни
      src/assets/images/login_left.png
  84. Двоични данни
      src/assets/images/login_left1.png
  85. Двоични данни
      src/assets/images/login_left2.png
  86. Двоични данни
      src/assets/images/login_left3.png
  87. Двоични данни
      src/assets/images/login_left4.png
  88. Двоични данни
      src/assets/images/login_left5.png
  89. 5
    0
      src/assets/images/logo.svg
  90. Двоични данни
      src/assets/images/msg01.png
  91. Двоични данни
      src/assets/images/msg02.png
  92. Двоични данни
      src/assets/images/msg03.png
  93. Двоични данни
      src/assets/images/msg04.png
  94. Двоични данни
      src/assets/images/msg05.png
  95. Двоични данни
      src/assets/images/notData.png
  96. Двоични данни
      src/assets/images/qian.png
  97. Двоични данни
      src/assets/images/server.png
  98. Двоични данни
      src/assets/images/server1.png
  99. Двоични данни
      src/assets/images/server2.png
  100. 0
    0
      src/assets/images/welcome.png

+ 15
- 0
.editorconfig Целия файл

@@ -0,0 +1,15 @@
1
+# @see: http://editorconfig.org
2
+
3
+root = true
4
+
5
+[*] # 表示所有文件适用
6
+charset = utf-8 # 设置文件字符集为 utf-8
7
+end_of_line = lf # 控制换行类型(lf | cr | crlf)
8
+insert_final_newline = true # 始终在文件末尾插入一个新行
9
+indent_style = space # 缩进风格(tab | space)
10
+indent_size = 2 # 缩进大小
11
+max_line_length = 130 # 最大行长度
12
+
13
+[*.md] # 表示仅对 md 文件适用以下规则
14
+max_line_length = off # 关闭最大行长度限制
15
+trim_trailing_whitespace = false # 关闭末尾空格修剪

+ 12
- 0
.env Целия файл

@@ -0,0 +1,12 @@
1
+# title
2
+VITE_GLOB_APP_TITLE = 储能智慧云平台
3
+
4
+# 本地运行端口号
5
+VITE_PORT = 8848
6
+
7
+# 启动时自动打开浏览器
8
+VITE_OPEN = true
9
+
10
+# 打包后是否生成包分析文件
11
+VITE_REPORT = false
12
+VITE_API_URL = ""

+ 25
- 0
.env.development Целия файл

@@ -0,0 +1,25 @@
1
+# 本地环境
2
+VITE_USER_NODE_ENV = development
3
+
4
+# 公共基础路径
5
+VITE_PUBLIC_PATH = /user/
6
+
7
+# 路由模式
8
+# Optional: hash | history
9
+VITE_ROUTER_MODE = hash
10
+
11
+# 打包时是否删除 console
12
+VITE_DROP_CONSOLE = true
13
+
14
+# 是否开启 VitePWA
15
+# VITE_PWA = false
16
+VITE_API_URL = /api
17
+
18
+# 开发环境接口地址
19
+# 开发环境跨域代理,支持配置多个 http://192.168.8.198:8888
20
+# VITE_PROXY = [["/api","http://192.168.8.160:8888"]]
21
+# VITE_PROXY = [["/api","http://zlink.bjdexn.cn:8888"]]
22
+
23
+VITE_PROXY = [["/api","https://esos-iot.bjdexn.cn"]]
24
+# VITE_API_URL ="https://mock.mengxuegu.com/mock/6614b791d985433db203d8da/example"
25
+# VITE_PROXY = [["/api-easymock","https://mock.mengxuegu.com"],["/api-fastmock","https://www.fastmock.site"]]

+ 26
- 0
.env.production Целия файл

@@ -0,0 +1,26 @@
1
+# 线上环境
2
+VITE_USER_NODE_ENV = production
3
+
4
+# 公共基础路径
5
+VITE_PUBLIC_PATH = /user/
6
+
7
+# 路由模式
8
+# Optional: hash | history
9
+VITE_ROUTER_MODE = hash
10
+
11
+# 是否启用 gzip 或 brotli 压缩打包,如果需要多个压缩规则,可以使用 “,” 分隔
12
+# Optional: gzip | brotli | none
13
+VITE_BUILD_COMPRESS = none
14
+
15
+# 打包压缩后是否删除源文件
16
+VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE = false
17
+
18
+# 打包时是否删除 console
19
+VITE_DROP_CONSOLE = true
20
+
21
+# 是否开启 VitePWA
22
+VITE_PWA = true
23
+
24
+# 线上环境接口地址
25
+# VITE_API_URL = "https://mock.mengxuegu.com/mock/629d727e6163854a32e8307e"
26
+VITE_API_URL = "https://esos-iot.bjdexn.cn"

+ 28
- 0
.env.test Целия файл

@@ -0,0 +1,28 @@
1
+# 测试环境
2
+VITE_USER_NODE_ENV = test
3
+
4
+# 公共基础路径
5
+VITE_PUBLIC_PATH = /user/
6
+
7
+# 路由模式
8
+# Optional: hash | history
9
+VITE_ROUTER_MODE = hash
10
+
11
+# 是否启用 gzip 或 brotli 压缩打包,如果需要多个压缩规则,可以使用 “,” 分隔
12
+# Optional: gzip | brotli | none
13
+VITE_BUILD_COMPRESS = none
14
+
15
+# 打包压缩后是否删除源文件
16
+VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE = false
17
+
18
+# 打包时是否删除 console
19
+VITE_DROP_CONSOLE = true
20
+
21
+# 是否开启 VitePWA
22
+VITE_PWA = false
23
+
24
+# 测试环境接口地址
25
+# VITE_API_URL = "https://mock.mengxuegu.com/mock/629d727e6163854a32e8307e"
26
+# VITE_API_URL = "https://mock.mengxuegu.com/mock/6614b791d985433db203d8da/example"
27
+# VITE_API_URL = "https://esos-iot.bjdexn.cn"
28
+VITE_API_URL = "https://esos-iot.bjdexn.cn"

+ 15
- 0
.eslintignore Целия файл

@@ -0,0 +1,15 @@
1
+*.sh
2
+node_modules
3
+*.md
4
+*.woff
5
+*.ttf
6
+.vscode
7
+.idea
8
+dist
9
+/public
10
+/docs
11
+.husky
12
+.local
13
+/bin
14
+/src/mock/*
15
+stats.html

+ 61
- 0
.eslintrc.cjs Целия файл

@@ -0,0 +1,61 @@
1
+// @see: http://eslint.cn
2
+
3
+module.exports = {
4
+  root: true,
5
+  env: {
6
+    browser: true,
7
+    node: true,
8
+    es6: true
9
+  },
10
+  // 指定如何解析语法
11
+  parser: "vue-eslint-parser",
12
+  // 优先级低于 parse 的语法解析配置
13
+  parserOptions: {
14
+    parser: "@typescript-eslint/parser",
15
+    ecmaVersion: 2020,
16
+    sourceType: "module",
17
+    jsxPragma: "React",
18
+    ecmaFeatures: {
19
+      jsx: true
20
+    }
21
+  },
22
+  // 继承某些已有的规则
23
+  extends: ["plugin:vue/vue3-recommended", "plugin:@typescript-eslint/recommended", "plugin:prettier/recommended"],
24
+  /**
25
+   * "off" 或 0    ==>  关闭规则
26
+   * "warn" 或 1   ==>  打开的规则作为警告(不影响代码执行)
27
+   * "error" 或 2  ==>  规则作为一个错误(代码不能执行,界面报错)
28
+   */
29
+  rules: {
30
+    // eslint (http://eslint.cn/docs/rules)
31
+    "no-var": "error", // 要求使用 let 或 const 而不是 var
32
+    "no-multiple-empty-lines": ["error", { max: 1 }], // 不允许多个空行
33
+    "prefer-const": "off", // 使用 let 关键字声明但在初始分配后从未重新分配的变量,要求使用 const
34
+    "no-use-before-define": "off", // 禁止在 函数/类/变量 定义之前使用它们
35
+
36
+    // typeScript (https://typescript-eslint.io/rules)
37
+    "@typescript-eslint/no-unused-vars": "error", // 禁止定义未使用的变量
38
+    "@typescript-eslint/no-empty-function": "error", // 禁止空函数
39
+    "@typescript-eslint/prefer-ts-expect-error": "error", // 禁止使用 @ts-ignore
40
+    "@typescript-eslint/ban-ts-comment": "error", // 禁止 @ts-<directive> 使用注释或要求在指令后进行描述
41
+    "@typescript-eslint/no-inferrable-types": "off", // 可以轻松推断的显式类型可能会增加不必要的冗长
42
+    "@typescript-eslint/no-namespace": "off", // 禁止使用自定义 TypeScript 模块和命名空间
43
+    "@typescript-eslint/no-explicit-any": "off", // 禁止使用 any 类型
44
+    "@typescript-eslint/ban-types": "off", // 禁止使用特定类型
45
+    "@typescript-eslint/no-var-requires": "off", // 允许使用 require() 函数导入模块
46
+    "@typescript-eslint/no-non-null-assertion": "off", // 不允许使用后缀运算符的非空断言(!)
47
+
48
+    // vue (https://eslint.vuejs.org/rules)
49
+    "vue/script-setup-uses-vars": "error", // 防止<script setup>使用的变量<template>被标记为未使用,此规则仅在启用该 no-unused-vars 规则时有效
50
+    "vue/v-slot-style": "error", // 强制执行 v-slot 指令样式
51
+    "vue/no-mutating-props": "error", // 不允许改变组件 prop
52
+    "vue/custom-event-name-casing": "error", // 为自定义事件名称强制使用特定大小写
53
+    "vue/html-closing-bracket-newline": "error", // 在标签的右括号之前要求或禁止换行
54
+    "vue/attribute-hyphenation": "error", // 对模板中的自定义组件强制执行属性命名样式:my-prop="prop"
55
+    "vue/attributes-order": "off", // vue api使用顺序,强制执行属性顺序
56
+    "vue/no-v-html": "off", // 禁止使用 v-html
57
+    "vue/require-default-prop": "off", // 此规则要求为每个 prop 为必填时,必须提供默认值
58
+    "vue/multi-word-component-names": "off", // 要求组件名称始终为 “-” 链接的单词
59
+    "vue/no-setup-props-destructure": "off" // 禁止解构 props 传递给 setup
60
+  }
61
+};

+ 26
- 0
.gitignore Целия файл

@@ -0,0 +1,26 @@
1
+# Logs
2
+logs
3
+*.log
4
+npm-debug.log*
5
+yarn-debug.log*
6
+yarn-error.log*
7
+pnpm-debug.log*
8
+lerna-debug.log*
9
+
10
+node_modules
11
+dist
12
+dist-ssr
13
+stats.html
14
+*.local
15
+
16
+# Editor directories and files
17
+.vscode/*
18
+!.vscode/extensions.json
19
+!.vscode/settings.json
20
+.idea
21
+.DS_Store
22
+*.suo
23
+*.ntvs*
24
+*.njsproj
25
+*.sln
26
+*.sw?

+ 4
- 0
.husky/commit-msg Целия файл

@@ -0,0 +1,4 @@
1
+#!/usr/bin/env sh
2
+. "$(dirname -- "$0")/_/husky.sh"
3
+
4
+npx --no-install commitlint --edit $1

+ 4
- 0
.husky/pre-commit Целия файл

@@ -0,0 +1,4 @@
1
+#!/usr/bin/env sh
2
+. "$(dirname -- "$0")/_/husky.sh"
3
+
4
+npm run lint:lint-staged

+ 9
- 0
.prettierignore Целия файл

@@ -0,0 +1,9 @@
1
+/dist/*
2
+.local
3
+/node_modules/**
4
+
5
+**/*.svg
6
+**/*.sh
7
+
8
+/public/*
9
+stats.html

+ 41
- 0
.prettierrc.cjs Целия файл

@@ -0,0 +1,41 @@
1
+// @see: https://www.prettier.cn
2
+
3
+module.exports = {
4
+  // 指定最大换行长度
5
+  printWidth: 130,
6
+  // 缩进制表符宽度 | 空格数
7
+  tabWidth: 2,
8
+  // 使用制表符而不是空格缩进行 (true:制表符,false:空格)
9
+  useTabs: false,
10
+  // 结尾不用分号 (true:有,false:没有)
11
+  semi: true,
12
+  // 使用单引号 (true:单引号,false:双引号)
13
+  singleQuote: false,
14
+  // 在对象字面量中决定是否将属性名用引号括起来 可选值 "<as-needed|consistent|preserve>"
15
+  quoteProps: "as-needed",
16
+  // 在JSX中使用单引号而不是双引号 (true:单引号,false:双引号)
17
+  jsxSingleQuote: false,
18
+  // 多行时尽可能打印尾随逗号 可选值"<none|es5|all>"
19
+  trailingComma: "none",
20
+  // 在对象,数组括号与文字之间加空格 "{ foo: bar }" (true:有,false:没有)
21
+  bracketSpacing: true,
22
+  // 将 > 多行元素放在最后一行的末尾,而不是单独放在下一行 (true:放末尾,false:单独一行)
23
+  bracketSameLine: false,
24
+  // (x) => {} 箭头函数参数只有一个时是否要有小括号 (avoid:省略括号,always:不省略括号)
25
+  arrowParens: "avoid",
26
+  // 指定要使用的解析器,不需要写文件开头的 @prettier
27
+  requirePragma: false,
28
+  // 可以在文件顶部插入一个特殊标记,指定该文件已使用 Prettier 格式化
29
+  insertPragma: false,
30
+  // 用于控制文本是否应该被换行以及如何进行换行
31
+  proseWrap: "preserve",
32
+  // 在html中空格是否是敏感的 "css" - 遵守 CSS 显示属性的默认值, "strict" - 空格被认为是敏感的 ,"ignore" - 空格被认为是不敏感的
33
+  htmlWhitespaceSensitivity: "css",
34
+  // 控制在 Vue 单文件组件中 <script> 和 <style> 标签内的代码缩进方式
35
+  vueIndentScriptAndStyle: false,
36
+  // 换行符使用 lf 结尾是 可选值 "<auto|lf|crlf|cr>"
37
+  endOfLine: "auto",
38
+  // 这两个选项可用于格式化以给定字符偏移量(分别包括和不包括)开始和结束的代码 (rangeStart:开始,rangeEnd:结束)
39
+  rangeStart: 0,
40
+  rangeEnd: Infinity
41
+};

+ 4
- 0
.stylelintignore Целия файл

@@ -0,0 +1,4 @@
1
+/dist/*
2
+/public/*
3
+public/*
4
+stats.html

+ 40
- 0
.stylelintrc.cjs Целия файл

@@ -0,0 +1,40 @@
1
+// @see: https://stylelint.io
2
+
3
+module.exports = {
4
+  root: true,
5
+  // 继承某些已有的规则
6
+  extends: [
7
+    "stylelint-config-standard", // 配置 stylelint 拓展插件
8
+    "stylelint-config-html/vue", // 配置 vue 中 template 样式格式化
9
+    "stylelint-config-standard-scss", // 配置 stylelint scss 插件
10
+    "stylelint-config-recommended-vue/scss", // 配置 vue 中 scss 样式格式化
11
+    "stylelint-config-recess-order" // 配置 stylelint css 属性书写顺序插件,
12
+  ],
13
+  overrides: [
14
+    // 扫描 .vue/html 文件中的 <style> 标签内的样式
15
+    {
16
+      files: ["**/*.{vue,html}"],
17
+      customSyntax: "postcss-html"
18
+    }
19
+  ],
20
+  rules: {
21
+    "function-url-quotes": "always", // URL 的引号 "always(必须加上引号)"|"never(没有引号)"
22
+    "color-hex-length": "long", // 指定 16 进制颜色的简写或扩写 "short(16进制简写)"|"long(16进制扩写)"
23
+    "rule-empty-line-before": "never", // 要求或禁止在规则之前的空行 "always(规则之前必须始终有一个空行)"|"never(规则前绝不能有空行)"|"always-multi-line(多行规则之前必须始终有一个空行)"|"never-multi-line(多行规则之前绝不能有空行)"
24
+    "font-family-no-missing-generic-family-keyword": null, // 禁止在字体族名称列表中缺少通用字体族关键字
25
+    "scss/at-import-partial-extension": null, // 解决不能使用 @import 引入 scss 文件
26
+    "property-no-unknown": null, // 禁止未知的属性
27
+    "no-empty-source": null, // 禁止空源码
28
+    "selector-class-pattern": null, // 强制选择器类名的格式
29
+    "value-no-vendor-prefix": null, // 关闭 vendor-prefix (为了解决多行省略 -webkit-box)
30
+    "no-descending-specificity": null, // 不允许较低特异性的选择器出现在覆盖较高特异性的选择器
31
+    "value-keyword-case": null, // 解决在 scss 中使用 v-bind 大写单词报错
32
+    "selector-pseudo-class-no-unknown": [
33
+      true,
34
+      {
35
+        ignorePseudoClasses: ["global", "v-deep", "deep"]
36
+      }
37
+    ]
38
+  },
39
+  ignoreFiles: ["**/*.js", "**/*.jsx", "**/*.tsx", "**/*.ts"]
40
+};

+ 14
- 0
.vscode/extensions.json Целия файл

@@ -0,0 +1,14 @@
1
+{
2
+  "recommendations": [
3
+    "vue.volar",
4
+    "vue.vscode-typescript-vue-plugin",
5
+    "hollowtree.vue-snippets",
6
+    "dbaeumer.vscode-eslint",
7
+    "stylelint.vscode-stylelint",
8
+    "esbenp.prettier-vscode",
9
+    "editorconfig.editorconfig",
10
+    "streetsidesoftware.code-spell-checker",
11
+    "syler.sass-indented",
12
+    "mikestead.dotenv"
13
+  ]
14
+}

+ 126
- 0
.vscode/settings.json Целия файл

@@ -0,0 +1,126 @@
1
+{
2
+  "editor.formatOnSave": true,
3
+  "editor.codeActionsOnSave": {
4
+    "source.fixAll.stylelint": "explicit"
5
+  },
6
+  "stylelint.enable": true,
7
+  "stylelint.validate": ["css", "less", "postcss", "scss", "vue", "sass", "html"],
8
+  "files.eol": "\n",
9
+  "typescript.tsdk": "node_modules/typescript/lib",
10
+  "[vue]": {
11
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
12
+  },
13
+  "[typescript]": {
14
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
15
+  },
16
+  "[json]": {
17
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
18
+  },
19
+  "[jsonc]": {
20
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
21
+  },
22
+  "[javascript]": {
23
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
24
+  },
25
+  "[typescriptreact]": {
26
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
27
+  },
28
+  "[scss]": {
29
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
30
+  },
31
+  "[html]": {
32
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
33
+  },
34
+  "[markdown]": {
35
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
36
+  },
37
+  "[less]": {
38
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
39
+  },
40
+  "cSpell.words": [
41
+    "AMAP",
42
+    "apng",
43
+    "axios",
44
+    "baroptionchart",
45
+    "baroptionincome",
46
+    "Biao",
47
+    "brotli",
48
+    "cascader",
49
+    "commitlint",
50
+    "contentleft",
51
+    "contentright",
52
+    "CSDN",
53
+    "ctitle",
54
+    "daterange",
55
+    "datetimerange",
56
+    "dischargetimedayslist",
57
+    "echarts",
58
+    "electricitylist",
59
+    "fangda",
60
+    "geeker",
61
+    "getelectricitylist",
62
+    "gethomesite",
63
+    "Gitee",
64
+    "hexs",
65
+    "iconfont",
66
+    "incomeforms",
67
+    "informationtype",
68
+    "juejin",
69
+    "liquidfill",
70
+    "longpress",
71
+    "mockjs",
72
+    "monthrange",
73
+    "nprogress",
74
+    "officedocument",
75
+    "openxmlformats",
76
+    "operatingcurve",
77
+    "Pageable",
78
+    "persistedstate",
79
+    "phonenumber",
80
+    "pinia",
81
+    "pjpeg",
82
+    "Prefixs",
83
+    "reportforms",
84
+    "reportpowerday",
85
+    "screenfull",
86
+    "Singlevalue",
87
+    "sortablejs",
88
+    "sousuo",
89
+    "spreadsheetml",
90
+    "stationmanage",
91
+    "stationstation",
92
+    "styl",
93
+    "stylelint",
94
+    "stylelintignore",
95
+    "stylelintrc",
96
+    "suoxiao",
97
+    "systemdevice",
98
+    "timevalue",
99
+    "tmpl",
100
+    "tmpldata",
101
+    "tmplpagedata",
102
+    "tricitylist",
103
+    "truetype",
104
+    "tuichu",
105
+    "unplugin",
106
+    "unref",
107
+    "VITE",
108
+    "vuedraggable",
109
+    "vueuse",
110
+    "Vuex",
111
+    "wangeditor",
112
+    "xiala",
113
+    "xiaoxi",
114
+    "Yahei",
115
+    "yearrange",
116
+    "yiwen",
117
+    "zhongyingwen",
118
+    "zhuti"
119
+  ],
120
+  "i18n-ally.localesPaths": ["src/languages"],
121
+  "i18n-ally.extract.ignoredByFiles": {
122
+    "src\\views\\monitor\\index.vue": ["末次数据时间:{{ pcslist.ts }}"],
123
+    "src\\views\\department\\addition.vue": ["女"]
124
+  },
125
+  "i18n-ally.extract.ignored": ["设备状态"]
126
+}

+ 254
- 0
CHANGELOG.md Целия файл

@@ -0,0 +1,254 @@
1
+# Changelog
2
+
3
+All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
+
5
+## [1.2.0](https://github.com/HalseySpicy/Geeker-Admin/compare/v1.1.0...v1.2.0) (2023-09-15)
6
+
7
+
8
+### Features
9
+
10
+* 🚀 update and optimize project content ([17bc017](https://github.com/HalseySpicy/Geeker-Admin/commit/17bc017c5abbd2c87813d6c6f9d587ddf9d57da7))
11
+* 🚀 upgrade plugins and add tab functionality ([f21a41d](https://github.com/HalseySpicy/Geeker-Admin/commit/f21a41d8df44efe5216dec39bf4abf0ea86a7781))
12
+
13
+## [1.1.0](https://github.com/HalseySpicy/Geeker-Admin/compare/v1.0.0...v1.1.0) (2023-07-09)
14
+
15
+### Features
16
+
17
+- 🚀 add proTable instance type ([8262f04](https://github.com/HalseySpicy/Geeker-Admin/commit/8262f045734d055148720738a80fee0e0c779ceb))
18
+- 🚀 optimize code and add VitePWA ([523f676](https://github.com/HalseySpicy/Geeker-Admin/commit/523f676feee5105eae15d05b57063227be26d3df))
19
+- 🚀 optimize code and update plugins ([5cff3c7](https://github.com/HalseySpicy/Geeker-Admin/commit/5cff3c7e50331ede07d57613cc49658904e7cf1a))
20
+- 🚀 optimize irregular code ([d406ef2](https://github.com/HalseySpicy/Geeker-Admin/commit/d406ef2bb5e0d0522f5e0ce38c3b9d0aa47c7cd2))
21
+- 🚀 proTable radio selection example ([f58291f](https://github.com/HalseySpicy/Geeker-Admin/commit/f58291f96468b816607c31df87326ebd7d0a5c5a))
22
+- 🚀 proTable search component custom rendering ([#189](https://github.com/HalseySpicy/Geeker-Admin/issues/189)) ([89f03db](https://github.com/HalseySpicy/Geeker-Admin/commit/89f03db2db41160b9ac5398d64712fabff399c4c))
23
+- 🚀 proTable supports static table data ([9a3e85d](https://github.com/HalseySpicy/Geeker-Admin/commit/9a3e85d21d6c8872bbc915c42d48eb8658a1db63))
24
+- 🚀 update Gitee address ([0608be9](https://github.com/HalseySpicy/Geeker-Admin/commit/0608be9ba6a9f01f73ed67671d340cf0c1d99261))
25
+- 🚀 update stylelint configuration ([d62aae8](https://github.com/HalseySpicy/Geeker-Admin/commit/d62aae868e7d6aad87f0ba8706ab9744d5da04dd))
26
+- 🚀 update theme, modify bugs ([7a3a7a3](https://github.com/HalseySpicy/Geeker-Admin/commit/7a3a7a3d665c0356c0272947292de750dd0be8d8))
27
+
28
+### Bug Fixes
29
+
30
+- 🧩 fix eslint error ([a980a1a](https://github.com/HalseySpicy/Geeker-Admin/commit/a980a1aa7808895af46c85e0e26a53f66d1119fa))
31
+
32
+## [1.0.0](https://github.com/HalseySpicy/Geeker-Admin/compare/v0.0.7...v1.0.0) (2023-04-15)
33
+
34
+### Features
35
+
36
+- 🚀 升级依赖插件 && 新增树型 ProTbale 示例(更多查看详情) ([ed0ea75](https://github.com/HalseySpicy/Geeker-Admin/commit/ed0ea757555f047f6890632e598ee3293d3598cd))
37
+- 🚀 升级依赖插件 && 修复 bug(查看详情) ([4febadc](https://github.com/HalseySpicy/Geeker-Admin/commit/4febadc10dd794ec8ea1c7864a3771b1b477f743))
38
+- 🚀 新增路由白名单访问控制 ([97dc264](https://github.com/HalseySpicy/Geeker-Admin/commit/97dc26484c6eead2ae4c8c79d50b550f24f19a02))
39
+- 🚀 优化 ProTable && 面包屑导航 ([905d7f1](https://github.com/HalseySpicy/Geeker-Admin/commit/905d7f1fd2b18d9650e6ba7d439dfdcf50363d11))
40
+- 🚀 优化代码 ([cd333df](https://github.com/HalseySpicy/Geeker-Admin/commit/cd333dfe5de2aa7fa415326e6a06b83d3bd260d5))
41
+- 🚀 优化代码和样式细节 ([5b4b926](https://github.com/HalseySpicy/Geeker-Admin/commit/5b4b9266de4f420f32fca70dadb76242d129e604))
42
+- 🚀 优化代码和样式细节 ([756094c](https://github.com/HalseySpicy/Geeker-Admin/commit/756094c402e14841c07cd6062b701929f7f31737))
43
+- 🚀 优化代码逻辑 && 更新微信群二维码 ([629e824](https://github.com/HalseySpicy/Geeker-Admin/commit/629e8243466fda5da9f0ec781aa0b584e49f4501))
44
+- 🚀 优化代码细节问题 ([a6a6ced](https://github.com/HalseySpicy/Geeker-Admin/commit/a6a6cedeb40f2f7901f0dcd0ec7f1c283a491c61))
45
+- 🚀 优化样式、代码细节 ([1b02f45](https://github.com/HalseySpicy/Geeker-Admin/commit/1b02f457162267b090ad946e0bad91e5d0dd14b1))
46
+- 🚀 allow nested tree enum data ([c2fa2be](https://github.com/HalseySpicy/Geeker-Admin/commit/c2fa2be54a6af0309ba45bd4ca68170c66edc357))
47
+- 🚀 refactoring project configuration ([7ede988](https://github.com/HalseySpicy/Geeker-Admin/commit/7ede988bae3ad0b33d9e5ac1ea6145c4d7aa89e6))
48
+- **ProTable:** 🚀 插槽引入 ElTable 的 scope,可获取$index 等 ([4cb7dba](https://github.com/HalseySpicy/Geeker-Admin/commit/4cb7dba40c10e693e324b7c647aa65917aeb0b02))
49
+
50
+### Bug Fixes
51
+
52
+- 🧩 修复 ImportExcel 组件 bug ([ab7e9dd](https://github.com/HalseySpicy/Geeker-Admin/commit/ab7e9dde400aa80ec2e9fa58d9f2168fc3d14f18))
53
+- 🧩 修复 ImportExcel 组件 bug ([803ba58](https://github.com/HalseySpicy/Geeker-Admin/commit/803ba58a2c3fae7f6d8783ca534e2b41c987f027))
54
+- 🧩 修复 ProTable 组件打印功能 bug ([a88b7df](https://github.com/HalseySpicy/Geeker-Admin/commit/a88b7df4623e30459ef3c92196b720efcb200f2f))
55
+- 🧩 修复 TreeFilter 组件默认值 bug ([8e515f0](https://github.com/HalseySpicy/Geeker-Admin/commit/8e515f0d4058f573cbd53281ef68aec38b8dacb9))
56
+- 🧩 修复 TreeFilter 组件默认值 bug ([f23a94d](https://github.com/HalseySpicy/Geeker-Admin/commit/f23a94d6edf442babdc4cd5a52ea63ebbbcac44f))
57
+- 🧩 修复 useDebounceFn 错误使用 ([99d4278](https://github.com/HalseySpicy/Geeker-Admin/commit/99d4278a29b7fa970caba55f43134cebd1d3bec6))
58
+- 🧩 修复多图片上传预览初始化异常 ([d1a917f](https://github.com/HalseySpicy/Geeker-Admin/commit/d1a917f10326b7742b4445c495de12603df658c1))
59
+- 🧩 修复分栏布局路径匹配 bug ([b06bd12](https://github.com/HalseySpicy/Geeker-Admin/commit/b06bd123fa6af0dcb7d5cc9bc9215f13b91ace5f))
60
+- 🧩 修复横向布局下最大化失效 ([e416ddb](https://github.com/HalseySpicy/Geeker-Admin/commit/e416ddb732ae336ca4e7e43ebdeb89b24085d1b1))
61
+- 🧩 修复路由重置 bug ([52b7e66](https://github.com/HalseySpicy/Geeker-Admin/commit/52b7e66febf1db9cd3325eb0e1e45213ff1528c2))
62
+- 🧩 修复弱类型检查错误 ([b32310e](https://github.com/HalseySpicy/Geeker-Admin/commit/b32310ed2f546e3efa918d5f7eee2c3868a98cb7))
63
+
64
+### 0.0.7 (2022-12-28)
65
+
66
+### Features
67
+
68
+- 🚀 二次封装 wangEditor 富文本编辑器(50%) ([4f8e266](https://gitee.com/HalseySpicy/Geeker-Admin/commit/4f8e266b7dd25a7df18d302e88e14454bfa3816b))
69
+- 🚀 更新插件、优化代码(请查看详情) ([dac6dec](https://gitee.com/HalseySpicy/Geeker-Admin/commit/dac6dec75466c19731ad7cf083f8c39940342140))
70
+- 🚀 更新微信群二维码 ([7e890d0](https://gitee.com/HalseySpicy/Geeker-Admin/commit/7e890d0afe0a11170d73e3c2c4ef04d37a582e94))
71
+- 🚀 请求全局 loading 更改为可配置 ([a75d62f](https://gitee.com/HalseySpicy/Geeker-Admin/commit/a75d62f627195ac420cf24ad7f51245b2e5bf04e))
72
+- 🚀 升级 element-plus 到 2.25 ([e98c035](https://gitee.com/HalseySpicy/Geeker-Admin/commit/e98c035caa6d1ab04319673e0db65837c6887126))
73
+- 🚀 升级 vite、vue 版本 && 优化分栏布局样式 ([b2b1b59](https://gitee.com/HalseySpicy/Geeker-Admin/commit/b2b1b599bc1fa0f1c64c5c58fb31d3719f415301))
74
+- 🚀 使用属性透传重构 ProTable 组件 ([a428e89](https://gitee.com/HalseySpicy/Geeker-Admin/commit/a428e89a3784c826eceaaee548b97975afbe1d45))
75
+- 🚀 添加 wangEditor 组件 ([d6d2fa7](https://gitee.com/HalseySpicy/Geeker-Admin/commit/d6d2fa7d27887bb4a9e40e9d7037d4621812e16a))
76
+- 🚀 完成 wangEditor 富文本二次封装 ([7362bfb](https://gitee.com/HalseySpicy/Geeker-Admin/commit/7362bfbff19224045e3bb20fa939a78c556cc805))
77
+- 🚀 完善按钮、菜单权限示例 ([6793f0c](https://gitee.com/HalseySpicy/Geeker-Admin/commit/6793f0cd7372b8a080f6d2649b05cdd0c62bd853))
78
+- 🚀 新增 主题色、灰色模式、色弱模式 配置 ([7821157](https://gitee.com/HalseySpicy/Geeker-Admin/commit/7821157059ed9c21d2844f75049f8fa999b19944))
79
+- 🚀 新增 pro-form ([3ab5a5b](https://gitee.com/HalseySpicy/Geeker-Admin/commit/3ab5a5b4f63fca227944ab6cc7928f6bf1f88ed4))
80
+- 🚀 新增 protable 打印、列对齐方式功能 ([c22879e](https://gitee.com/HalseySpicy/Geeker-Admin/commit/c22879e7e80ff9ef662c39daa25b11f5f17d17ca))
81
+- 🚀 新增 protbale 功能, 请查看详情 ([17f2bcd](https://gitee.com/HalseySpicy/Geeker-Admin/commit/17f2bcd67362365579ed8a572a3a9d17368ac64e))
82
+- 🚀 新增 SVG Icons ([977602c](https://gitee.com/HalseySpicy/Geeker-Admin/commit/977602c30b8997cb51426fe9498392edc249561d))
83
+- 🚀 新增 treeFilter 组件标题属性 ([20c755f](https://gitee.com/HalseySpicy/Geeker-Admin/commit/20c755f59f3ae2b0380e6549bb56bb22317d750e))
84
+- 🚀 新增 treeFilter data 参数 ([4280766](https://gitee.com/HalseySpicy/Geeker-Admin/commit/428076635d7a0e9f80109274d9523cf91aa5a10c))
85
+- 🚀 新增暗黑模式 ([215e499](https://gitee.com/HalseySpicy/Geeker-Admin/commit/215e499634b516234e653eac27a611d5f51ea6da))
86
+- 🚀 新增菜单搜索功能 ([4aa0eef](https://gitee.com/HalseySpicy/Geeker-Admin/commit/4aa0eefaf427a2aa1aebd2b78dc049ffa776e838))
87
+- 🚀 新增动态路由 ([551fefc](https://gitee.com/HalseySpicy/Geeker-Admin/commit/551fefc2e66b067d9e64d3b0cfbf47dfa1057d98))
88
+- 🚀 新增分栏布局 ([de37143](https://gitee.com/HalseySpicy/Geeker-Admin/commit/de37143e93c0cc5be2ff52466dce344ab9270f0d))
89
+- 🚀 新增功能 && 修复 bug(查看详情) ([1ab183f](https://gitee.com/HalseySpicy/Geeker-Admin/commit/1ab183f1551cb8beb77243c2953b0119409dd6a5))
90
+- 🚀 新增功能 && 修复 bug(查看详情) ([4c0bc5f](https://gitee.com/HalseySpicy/Geeker-Admin/commit/4c0bc5fd3c111e1cac636cad104c83ffb1168679))
91
+- 🚀 新增功能(查看详情) ([cbd8dc2](https://gitee.com/HalseySpicy/Geeker-Admin/commit/cbd8dc2387576f525c0e49f81d540fbad3cb5e81))
92
+- 🚀 新增横向、纵向、经典布局切换 ([1046de4](https://gitee.com/HalseySpicy/Geeker-Admin/commit/1046de4c7d5f805b10c5cea5325b063e3d6dd84f))
93
+- 🚀 新增界面配置功能 ([39ffc5e](https://gitee.com/HalseySpicy/Geeker-Admin/commit/39ffc5e9a77da3294055f23f8c87a4a44f3622f7))
94
+- 🚀 新增路由相关功能 ([9679eed](https://gitee.com/HalseySpicy/Geeker-Admin/commit/9679eed1edd0c1f08c17465f590d4ca0365985ee)), closes [#71](https://gitee.com/HalseySpicy/Geeker-Admin/issues/71) [#72](https://gitee.com/HalseySpicy/Geeker-Admin/issues/72) [#49](https://gitee.com/HalseySpicy/Geeker-Admin/issues/49)
95
+- 🚀 新增请求示例,参见 loginApi ([d49b227](https://gitee.com/HalseySpicy/Geeker-Admin/commit/d49b227762ae48c3ca08f0dec02a3667daac8532))
96
+- 🚀 新增图标选择组件 ([ce5e165](https://gitee.com/HalseySpicy/Geeker-Admin/commit/ce5e165aed842074a9f7ac66ea97290710b541ee))
97
+- 🚀 新增图片上传组件 ([c50c421](https://gitee.com/HalseySpicy/Geeker-Admin/commit/c50c421bc3c5f7af68184cda88262c6fb1bd07e0))
98
+- 🚀 新增图片上传组件属性 ([d7670ed](https://gitee.com/HalseySpicy/Geeker-Admin/commit/d7670ed94608c5410f3102d7b9427d8d856204b1))
99
+- 🚀 新增系统管理模块 ([23748e1](https://gitee.com/HalseySpicy/Geeker-Admin/commit/23748e185e80e3b774b42114427934228a57d3aa))
100
+- 🚀 新增消息通知 ([66836b6](https://gitee.com/HalseySpicy/Geeker-Admin/commit/66836b69781ccc55402a3887d091149885864442))
101
+- 🚀 新增页面刷新功能 ([5223a41](https://gitee.com/HalseySpicy/Geeker-Admin/commit/5223a416d17568d5b2cae7b16b637e0f39134223))
102
+- 🚀 新增引导页 ([4fb6fb3](https://gitee.com/HalseySpicy/Geeker-Admin/commit/4fb6fb3a3eb34f82576e2378c311ff580f65226d))
103
+- 🚀 新增组件参数配置文档 ([0e11fc5](https://gitee.com/HalseySpicy/Geeker-Admin/commit/0e11fc59175d5d74730c3cb1fa2579effcca6e48))
104
+- 🚀 修改 keepAlive 逻辑 ([168ca13](https://gitee.com/HalseySpicy/Geeker-Admin/commit/168ca13e796c8cc366caa3d6e05090acdaefef75))
105
+- 🚀 修改 pinia 持久化插件 ([a7691ae](https://gitee.com/HalseySpicy/Geeker-Admin/commit/a7691aea614a035c4d381838149e08ad8477e49f))
106
+- 🚀 优化代码注释 && 升级 element 到 2.2.6 ([b84512b](https://gitee.com/HalseySpicy/Geeker-Admin/commit/b84512b3b102b00faa2f9241a32f5fbe27da4307))
107
+- 🚀 优化注释 && 代码细节问题 ([9d0ffa5](https://gitee.com/HalseySpicy/Geeker-Admin/commit/9d0ffa5ddecc4c73bec51208b05a6d44b1523b1f))
108
+- 🚀 预定义主题颜色 ([8219178](https://gitee.com/HalseySpicy/Geeker-Admin/commit/82191789bcf6d21c623aa61c5a64e502cea44c2c))
109
+- 🚀 增加 SearchForm 属性透传 ([eadb89b](https://gitee.com/HalseySpicy/Geeker-Admin/commit/eadb89b687596980a82401f44c53430081078d04))
110
+- 🚀 增加表格 treeFilter、更新整体布局样式 ([719b78f](https://gitee.com/HalseySpicy/Geeker-Admin/commit/719b78f317589b983bc4b852b3bfd63a60d42a46))
111
+- 🚀 增加布局方式切换,样式已完成 ([5745b93](https://gitee.com/HalseySpicy/Geeker-Admin/commit/5745b93a6cc00519c1a02977b8c0437502d867e6))
112
+- 🚀 增加分类筛选器 ([c95a1c0](https://gitee.com/HalseySpicy/Geeker-Admin/commit/c95a1c054ee9eacae470bcaae7574d5c989b86a2))
113
+- 🚀 增加全局错误拦截 && 修改细节问题 请查看详情 ([0496184](https://gitee.com/HalseySpicy/Geeker-Admin/commit/04961847eb7df004d1e9f562e78ea3d5f851ea49))
114
+
115
+### Bug Fixes
116
+
117
+- 🧩 菜单搜索过滤掉 isHide 为 true 的菜单 ([c6bab35](https://gitee.com/HalseySpicy/Geeker-Admin/commit/c6bab356f0cde7e3dc6f69dfac115239c2453776))
118
+- 🧩 解决 useTable 查询参数 bug ([a86e408](https://gitee.com/HalseySpicy/Geeker-Admin/commit/a86e4089b6da8ab6a55bc84e069d665c06471676))
119
+- 🧩 去除登陆页默认账号 ([3dda3fe](https://gitee.com/HalseySpicy/Geeker-Admin/commit/3dda3fee3fef38fdafcfdf3b1bf16e73033c6fe0))
120
+- 🧩 删除 protable 组件 image 配置属性 ([d699fe7](https://gitee.com/HalseySpicy/Geeker-Admin/commit/d699fe7bd55eaaccfad9b94105c1b43ae64d1c34))
121
+- 🧩 修复 国际化 产生的 bug ([ec4f74a](https://gitee.com/HalseySpicy/Geeker-Admin/commit/ec4f74ae654e7287fc08bb31fa3ee3d2c76164eb))
122
+- 🧩 修复 axios 请求超时未拦截错误 ([856468e](https://gitee.com/HalseySpicy/Geeker-Admin/commit/856468e84f8356d35c25097f3115dfe3d496914c))
123
+- 🧩 修复 bug ([3714abd](https://gitee.com/HalseySpicy/Geeker-Admin/commit/3714abdc4826034791ccb3fc8249d946ec3a4e16))
124
+- 🧩 修复 Pro-Tabel 列设置 bug ([a3b86a0](https://gitee.com/HalseySpicy/Geeker-Admin/commit/a3b86a06a6d9cd4b6f7ac6e108727a0b4852e9a0))
125
+- 🧩 修复 pro-table 格式报错问题 ([2ef11fd](https://gitee.com/HalseySpicy/Geeker-Admin/commit/2ef11fda6d373c3214df801ae789cafc1a033dcb))
126
+- 🧩 修复布局样式 bug ([2f1cd64](https://gitee.com/HalseySpicy/Geeker-Admin/commit/2f1cd6442f359909301e3d95b0ed4dc9d2dbe7c6))
127
+- 🧩 修复打包错误 ([243ebfc](https://gitee.com/HalseySpicy/Geeker-Admin/commit/243ebfc5280ddc013056c6708b44df35fe18f613))
128
+- 🧩 修复打包失败 ([31698fe](https://gitee.com/HalseySpicy/Geeker-Admin/commit/31698fea6478d60343a9ad49ae0fc6db7a42c184))
129
+- 🧩 修复打包失败问题 ([1778651](https://gitee.com/HalseySpicy/Geeker-Admin/commit/1778651781a1bb8bfe4ea61dafb9b48773fef5d7))
130
+- 🧩 修复分栏布局 bug ([113274a](https://gitee.com/HalseySpicy/Geeker-Admin/commit/113274a87e2dacf694648f3a304c7ac37e2262d0))
131
+- 🧩 修复经典布局展示 bug ([b95e237](https://gitee.com/HalseySpicy/Geeker-Admin/commit/b95e2376d06c6a6a35f72743e3fe8c1569fda008))
132
+- 🧩 修复路由跳转两次不能携带参数问题 ([8b583f3](https://gitee.com/HalseySpicy/Geeker-Admin/commit/8b583f3d5f05b77ec2a35082557bae431441a586))
133
+- 🧩 修复请求 header 参数丢失 bug ([3598dbc](https://gitee.com/HalseySpicy/Geeker-Admin/commit/3598dbc2a83aaacf9dada4e2c38a3ca27cbe4cfd))
134
+- 🧩 修复上传组件细节问题 ([8528358](https://gitee.com/HalseySpicy/Geeker-Admin/commit/8528358925ea809cf52f55015355345e87607351))
135
+- 🧩 修复 BUG ([4bf2988](https://gitee.com/HalseySpicy/Geeker-Admin/commit/4bf29881dd41fad256f1beb5affcd5ba6599e17d))
136
+- 🧩 修复 BUG ([c93aaf7](https://gitee.com/HalseySpicy/Geeker-Admin/commit/c93aaf700112decd158e9a5a9c1f83eff1773e91))
137
+- 🧩 修复 loading 请求 bug ([a3270ec](https://gitee.com/HalseySpicy/Geeker-Admin/commit/a3270ecfa2e7c2484729ae6fd599febcc4f7be6b))
138
+- 🧩 修复 vercel 打包失败 ([e63dee1](https://gitee.com/HalseySpicy/Geeker-Admin/commit/e63dee1f9653f4f95d0330275c5f5e8b530564c9))
139
+- 🧩 修改 Pro-Table 表头渲染方式 ([aa57294](https://gitee.com/HalseySpicy/Geeker-Admin/commit/aa5729489942eaa6dca9928b70153af2de753a9c))
140
+- 🧩 修改 useTable 存在的 bug ([5bb55b3](https://gitee.com/HalseySpicy/Geeker-Admin/commit/5bb55b32c0b46bbf55fa0d49efe3a15d0b1673a4))
141
+- 🧩 修改 useTable 钩子中的 bug ([675aed8](https://gitee.com/HalseySpicy/Geeker-Admin/commit/675aed806e62c236b40bc933402c86085289df4e))
142
+- 🧩 修改 useTable 携带默认查询参数 bug ([ee585b2](https://gitee.com/HalseySpicy/Geeker-Admin/commit/ee585b29f3129b7143a10947fdd3184b197ad883))
143
+- 🧩 修改代码细节 && 优化注释 ([d86cb1f](https://gitee.com/HalseySpicy/Geeker-Admin/commit/d86cb1feb32e11a29e1c2bee54ea788c6c828d75))
144
+- 🧩 修改当菜单设置 isHide=true 时面包屑报错 ([66885c5](https://gitee.com/HalseySpicy/Geeker-Admin/commit/66885c5cc15c10ccadcd49a7bee27a821663e8a7))
145
+- 🧩 修改文件导出失败 bug ([208e720](https://gitee.com/HalseySpicy/Geeker-Admin/commit/208e720688969d2bc0fa0a6cc2bae3e3b991c806))
146
+- 🧩 修改 BUG ([540048a](https://gitee.com/HalseySpicy/Geeker-Admin/commit/540048a09be9b0df5443e275f38f43c80dcde51f))
147
+- 🧩 fix use pinia bug ([609aa69](https://gitee.com/HalseySpicy/Geeker-Admin/commit/609aa69aa9b3e0bb4e667ee7f76ab44051c2d2e8))
148
+- 修复登录后白屏 ([f986c5c](https://gitee.com/HalseySpicy/Geeker-Admin/commit/f986c5c44fc1df8d5c6a90e90239c06928e2f4a1))
149
+- **el-table:** 🧩 修复 el-table 在 safari 浏览器错乱 ([b776a48](https://gitee.com/HalseySpicy/Geeker-Admin/commit/b776a483636547c7cee723846ec33b2842550d13))
150
+
151
+### 0.0.6 (2022-08-22)
152
+
153
+### Features
154
+
155
+- 🚀 二次封装 wangEditor 富文本编辑器(50%) ([4f8e266](https://gitee.com/HalseySpicy/Geeker-Admin/commit/4f8e266b7dd25a7df18d302e88e14454bfa3816b))
156
+- 🚀 请求全局 loading 更改为可配置 ([a75d62f](https://gitee.com/HalseySpicy/Geeker-Admin/commit/a75d62f627195ac420cf24ad7f51245b2e5bf04e))
157
+- 🚀 升级 element-plus 到 2.25 ([e98c035](https://gitee.com/HalseySpicy/Geeker-Admin/commit/e98c035caa6d1ab04319673e0db65837c6887126))
158
+- 🚀 添加 wangEditor 组件 ([d6d2fa7](https://gitee.com/HalseySpicy/Geeker-Admin/commit/d6d2fa7d27887bb4a9e40e9d7037d4621812e16a))
159
+- 🚀 完成 wangEditor 富文本二次封装 ([7362bfb](https://gitee.com/HalseySpicy/Geeker-Admin/commit/7362bfbff19224045e3bb20fa939a78c556cc805))
160
+- 🚀 新增 主题色、灰色模式、色弱模式 配置 ([7821157](https://gitee.com/HalseySpicy/Geeker-Admin/commit/7821157059ed9c21d2844f75049f8fa999b19944))
161
+- 🚀 新增 pro-form ([3ab5a5b](https://gitee.com/HalseySpicy/Geeker-Admin/commit/3ab5a5b4f63fca227944ab6cc7928f6bf1f88ed4))
162
+- 🚀 新增 protbale 功能, 请查看详情 ([17f2bcd](https://gitee.com/HalseySpicy/Geeker-Admin/commit/17f2bcd67362365579ed8a572a3a9d17368ac64e))
163
+- 🚀 新增 SVG Icons ([977602c](https://gitee.com/HalseySpicy/Geeker-Admin/commit/977602c30b8997cb51426fe9498392edc249561d))
164
+- 🚀 新增 treeFilter data 参数 ([4280766](https://gitee.com/HalseySpicy/Geeker-Admin/commit/428076635d7a0e9f80109274d9523cf91aa5a10c))
165
+- 🚀 新增暗黑模式 ([215e499](https://gitee.com/HalseySpicy/Geeker-Admin/commit/215e499634b516234e653eac27a611d5f51ea6da))
166
+- 🚀 新增菜单搜索功能 ([4aa0eef](https://gitee.com/HalseySpicy/Geeker-Admin/commit/4aa0eefaf427a2aa1aebd2b78dc049ffa776e838))
167
+- 🚀 新增界面配置功能 ([39ffc5e](https://gitee.com/HalseySpicy/Geeker-Admin/commit/39ffc5e9a77da3294055f23f8c87a4a44f3622f7))
168
+- 🚀 新增请求示例,参见 loginApi ([d49b227](https://gitee.com/HalseySpicy/Geeker-Admin/commit/d49b227762ae48c3ca08f0dec02a3667daac8532))
169
+- 🚀 新增图标选择组件 ([ce5e165](https://gitee.com/HalseySpicy/Geeker-Admin/commit/ce5e165aed842074a9f7ac66ea97290710b541ee))
170
+- 🚀 新增图片上传组件 ([c50c421](https://gitee.com/HalseySpicy/Geeker-Admin/commit/c50c421bc3c5f7af68184cda88262c6fb1bd07e0))
171
+- 🚀 新增图片上传组件属性 ([d7670ed](https://gitee.com/HalseySpicy/Geeker-Admin/commit/d7670ed94608c5410f3102d7b9427d8d856204b1))
172
+- 🚀 新增引导页 ([4fb6fb3](https://gitee.com/HalseySpicy/Geeker-Admin/commit/4fb6fb3a3eb34f82576e2378c311ff580f65226d))
173
+- 🚀 新增组件参数配置文档 ([0e11fc5](https://gitee.com/HalseySpicy/Geeker-Admin/commit/0e11fc59175d5d74730c3cb1fa2579effcca6e48))
174
+- 🚀 修改 pinia 持久化插件 ([a7691ae](https://gitee.com/HalseySpicy/Geeker-Admin/commit/a7691aea614a035c4d381838149e08ad8477e49f))
175
+- 🚀 优化代码注释 && 升级 element 到 2.2.6 ([b84512b](https://gitee.com/HalseySpicy/Geeker-Admin/commit/b84512b3b102b00faa2f9241a32f5fbe27da4307))
176
+- 🚀 优化注释 && 代码细节问题 ([9d0ffa5](https://gitee.com/HalseySpicy/Geeker-Admin/commit/9d0ffa5ddecc4c73bec51208b05a6d44b1523b1f))
177
+- 🚀 预定义主题颜色 ([8219178](https://gitee.com/HalseySpicy/Geeker-Admin/commit/82191789bcf6d21c623aa61c5a64e502cea44c2c))
178
+- 🚀 增加 SearchForm 属性透传 ([eadb89b](https://gitee.com/HalseySpicy/Geeker-Admin/commit/eadb89b687596980a82401f44c53430081078d04))
179
+- 🚀 增加表格 treeFilter、更新整体布局样式 ([719b78f](https://gitee.com/HalseySpicy/Geeker-Admin/commit/719b78f317589b983bc4b852b3bfd63a60d42a46))
180
+
181
+### Bug Fixes
182
+
183
+- 🧩 解决 useTable 查询参数 bug ([a86e408](https://gitee.com/HalseySpicy/Geeker-Admin/commit/a86e4089b6da8ab6a55bc84e069d665c06471676))
184
+- 🧩 去除登陆页默认账号 ([3dda3fe](https://gitee.com/HalseySpicy/Geeker-Admin/commit/3dda3fee3fef38fdafcfdf3b1bf16e73033c6fe0))
185
+- 🧩 删除 protable 组件 image 配置属性 ([d699fe7](https://gitee.com/HalseySpicy/Geeker-Admin/commit/d699fe7bd55eaaccfad9b94105c1b43ae64d1c34))
186
+- 🧩 修复 国际化 产生的 bug ([ec4f74a](https://gitee.com/HalseySpicy/Geeker-Admin/commit/ec4f74ae654e7287fc08bb31fa3ee3d2c76164eb))
187
+- 🧩 修复 axios 请求超时未拦截错误 ([856468e](https://gitee.com/HalseySpicy/Geeker-Admin/commit/856468e84f8356d35c25097f3115dfe3d496914c))
188
+- 🧩 修复 Pro-Tabel 列设置 bug ([a3b86a0](https://gitee.com/HalseySpicy/Geeker-Admin/commit/a3b86a06a6d9cd4b6f7ac6e108727a0b4852e9a0))
189
+- 🧩 修复 pro-table 格式报错问题 ([2ef11fd](https://gitee.com/HalseySpicy/Geeker-Admin/commit/2ef11fda6d373c3214df801ae789cafc1a033dcb))
190
+- 🧩 修复打包失败问题 ([1778651](https://gitee.com/HalseySpicy/Geeker-Admin/commit/1778651781a1bb8bfe4ea61dafb9b48773fef5d7))
191
+- 🧩 修复路由跳转两次不能携带参数问题 ([8b583f3](https://gitee.com/HalseySpicy/Geeker-Admin/commit/8b583f3d5f05b77ec2a35082557bae431441a586))
192
+- 🧩 修复请求 header 参数丢失 bug ([3598dbc](https://gitee.com/HalseySpicy/Geeker-Admin/commit/3598dbc2a83aaacf9dada4e2c38a3ca27cbe4cfd))
193
+- 🧩 修复上传组件细节问题 ([8528358](https://gitee.com/HalseySpicy/Geeker-Admin/commit/8528358925ea809cf52f55015355345e87607351))
194
+- 🧩 修复 loading 请求 bug ([a3270ec](https://gitee.com/HalseySpicy/Geeker-Admin/commit/a3270ecfa2e7c2484729ae6fd599febcc4f7be6b))
195
+- 🧩 修改 Pro-Table 表头渲染方式 ([aa57294](https://gitee.com/HalseySpicy/Geeker-Admin/commit/aa5729489942eaa6dca9928b70153af2de753a9c))
196
+- 🧩 修改 useTable 存在的 bug ([5bb55b3](https://gitee.com/HalseySpicy/Geeker-Admin/commit/5bb55b32c0b46bbf55fa0d49efe3a15d0b1673a4))
197
+- 🧩 修改 useTable 钩子中的 bug ([675aed8](https://gitee.com/HalseySpicy/Geeker-Admin/commit/675aed806e62c236b40bc933402c86085289df4e))
198
+- 🧩 修改 useTable 携带默认查询参数 bug ([ee585b2](https://gitee.com/HalseySpicy/Geeker-Admin/commit/ee585b29f3129b7143a10947fdd3184b197ad883))
199
+- 🧩 修改代码细节 && 优化注释 ([d86cb1f](https://gitee.com/HalseySpicy/Geeker-Admin/commit/d86cb1feb32e11a29e1c2bee54ea788c6c828d75))
200
+- 🧩 修改文件导出失败 bug ([208e720](https://gitee.com/HalseySpicy/Geeker-Admin/commit/208e720688969d2bc0fa0a6cc2bae3e3b991c806))
201
+- 🧩 fix use pinia bug ([609aa69](https://gitee.com/HalseySpicy/Geeker-Admin/commit/609aa69aa9b3e0bb4e667ee7f76ab44051c2d2e8))
202
+- 修复登录后白屏 ([f986c5c](https://gitee.com/HalseySpicy/Geeker-Admin/commit/f986c5c44fc1df8d5c6a90e90239c06928e2f4a1))
203
+
204
+### [0.0.5](https://github.com/HalseySpicy/Geeker-Admin/compare/v0.0.4...v0.0.5) (2022-07-21)
205
+
206
+### Features
207
+
208
+- 🚀 新增请求示例,参见 loginApi ([d49b227](https://github.com/HalseySpicy/Geeker-Admin/commit/d49b227762ae48c3ca08f0dec02a3667daac8532))
209
+
210
+### Bug Fixes
211
+
212
+- 🧩 解决 useTable 查询参数 bug ([a86e408](https://github.com/HalseySpicy/Geeker-Admin/commit/a86e4089b6da8ab6a55bc84e069d665c06471676))
213
+- 🧩 修复 axios 请求超时未拦截错误 ([856468e](https://github.com/HalseySpicy/Geeker-Admin/commit/856468e84f8356d35c25097f3115dfe3d496914c))
214
+- 🧩 修复请求 header 参数丢失 bug ([3598dbc](https://github.com/HalseySpicy/Geeker-Admin/commit/3598dbc2a83aaacf9dada4e2c38a3ca27cbe4cfd))
215
+
216
+### [0.0.4](https://github.com/HalseySpicy/Geeker-Admin/compare/v0.0.3...v0.0.4) (2022-07-12)
217
+
218
+### Features
219
+
220
+- 🚀 新增 主题色、灰色模式、色弱模式 配置 ([7821157](https://github.com/HalseySpicy/Geeker-Admin/commit/7821157059ed9c21d2844f75049f8fa999b19944))
221
+- 🚀 新增 pro-form ([3ab5a5b](https://github.com/HalseySpicy/Geeker-Admin/commit/3ab5a5b4f63fca227944ab6cc7928f6bf1f88ed4))
222
+- 🚀 新增菜单搜索功能 ([4aa0eef](https://github.com/HalseySpicy/Geeker-Admin/commit/4aa0eefaf427a2aa1aebd2b78dc049ffa776e838))
223
+- 🚀 新增界面配置功能 ([39ffc5e](https://github.com/HalseySpicy/Geeker-Admin/commit/39ffc5e9a77da3294055f23f8c87a4a44f3622f7))
224
+- 🚀 预定义主题颜色 ([8219178](https://github.com/HalseySpicy/Geeker-Admin/commit/82191789bcf6d21c623aa61c5a64e502cea44c2c))
225
+- 🚀 增加 SearchForm 属性透传 ([eadb89b](https://github.com/HalseySpicy/Geeker-Admin/commit/eadb89b687596980a82401f44c53430081078d04))
226
+
227
+### Bug Fixes
228
+
229
+- 🧩 修复 pro-table 格式报错问题 ([2ef11fd](https://github.com/HalseySpicy/Geeker-Admin/commit/2ef11fda6d373c3214df801ae789cafc1a033dcb))
230
+- 🧩 修改文件导出失败 bug ([208e720](https://github.com/HalseySpicy/Geeker-Admin/commit/208e720688969d2bc0fa0a6cc2bae3e3b991c806))
231
+- 🧩 fix use pinia bug ([609aa69](https://github.com/HalseySpicy/Geeker-Admin/commit/609aa69aa9b3e0bb4e667ee7f76ab44051c2d2e8))
232
+
233
+### [0.0.2](https://github.com/HalseySpicy/Geeker-Admin/compare/v0.0.3...v0.0.2) (2022-06-29)
234
+
235
+### 0.0.2 (2022-06-20)
236
+
237
+### Features
238
+
239
+- 🚀 请求全局 loading 更改为可配置 ([a75d62f](https://github.com/HalseySpicy/Geeker-Admin/commit/a75d62f627195ac420cf24ad7f51245b2e5bf04e))
240
+- 🚀 升级 element-plus 到 2.2.5 ([e98c035](https://github.com/HalseySpicy/Geeker-Admin/commit/e98c035caa6d1ab04319673e0db65837c6887126))
241
+- 🚀 新增暗黑模式 ([215e499](https://github.com/HalseySpicy/Geeker-Admin/commit/215e499634b516234e653eac27a611d5f51ea6da))
242
+- 🚀 新增图标选择组件 ([ce5e165](https://github.com/HalseySpicy/Geeker-Admin/commit/ce5e165aed842074a9f7ac66ea97290710b541ee))
243
+- 🚀 修改 pinia 持久化插件 ([a7691ae](https://github.com/HalseySpicy/Geeker-Admin/commit/a7691aea614a035c4d381838149e08ad8477e49f))
244
+- 🚀 优化代码注释 && 升级 element 到 2.2.6 ([b84512b](https://github.com/HalseySpicy/Geeker-Admin/commit/b84512b3b102b00faa2f9241a32f5fbe27da4307))
245
+
246
+### Bug Fixes
247
+
248
+- 🧩 去除登陆页默认账号 ([3dda3fe](https://github.com/HalseySpicy/Geeker-Admin/commit/3dda3fee3fef38fdafcfdf3b1bf16e73033c6fe0))
249
+- 🧩 修复 Pro-Table 列设置 bug ([a3b86a0](https://github.com/HalseySpicy/Geeker-Admin/commit/a3b86a06a6d9cd4b6f7ac6e108727a0b4852e9a0))
250
+- 🧩 修复 loading 请求 bug ([a3270ec](https://github.com/HalseySpicy/Geeker-Admin/commit/a3270ecfa2e7c2484729ae6fd599febcc4f7be6b))
251
+- 🧩 修改 Pro-Table 表头渲染方式 ([aa57294](https://github.com/HalseySpicy/Geeker-Admin/commit/aa5729489942eaa6dca9928b70153af2de753a9c))
252
+- 🧩 修改 useTable 存在的 bug ([5bb55b3](https://github.com/HalseySpicy/Geeker-Admin/commit/5bb55b32c0b46bbf55fa0d49efe3a15d0b1673a4))
253
+- 🧩 修改 useTable 钩子中的 bug ([675aed8](https://github.com/HalseySpicy/Geeker-Admin/commit/675aed806e62c236b40bc933402c86085289df4e))
254
+- 🧩 修改 useTable 携带默认查询参数 bug ([ee585b2](https://github.com/HalseySpicy/Geeker-Admin/commit/ee585b29f3129b7143a10947fdd3184b197ad883))

+ 21
- 0
LICENSE Целия файл

@@ -0,0 +1,21 @@
1
+MIT License
2
+
3
+Copyright (c) 2022 Halsey
4
+
5
+Permission is hereby granted, free of charge, to any person obtaining a copy
6
+of this software and associated documentation files (the "Software"), to deal
7
+in the Software without restriction, including without limitation the rights
8
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+copies of the Software, and to permit persons to whom the Software is
10
+furnished to do so, subject to the following conditions:
11
+
12
+The above copyright notice and this permission notice shall be included in all
13
+copies or substantial portions of the Software.
14
+
15
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+SOFTWARE.

+ 184
- 0
README.md Целия файл

@@ -0,0 +1,184 @@
1
+# Geeker-Admin
2
+
3
+### 介绍 📖
4
+
5
+Geeker-Admin 一款基于 Vue3.3、TypeScript、Vite5、Pinia、Element-Plus 开源的后台管理框架,使用目前最新技术栈开发。项目提供强大的 [ProTable](https://juejin.cn/post/7166068828202336263) 组件,在一定程度上提高您的开发效率。另外本项目还封装了一些常用组件、Hooks、指令、动态路由、按钮级别权限控制等功能。
6
+
7
+### React 版本 🔥
8
+
9
+- 有需要请加底部微信了解、购买
10
+
11
+- Link:https://pro.spicyboy.cn
12
+
13
+### 在线预览 👀
14
+
15
+- Link:https://admin.spicyboy.cn
16
+
17
+### 代码仓库 ⭐
18
+
19
+- Gitee:https://gitee.com/HalseySpicy/Geeker-Admin
20
+- GitHub:https://github.com/HalseySpicy/Geeker-Admin
21
+
22
+### 项目文档 📚
23
+
24
+- 项目更新日志:[CHANGELOG.md](./CHANGELOG.md)
25
+
26
+- 项目文档地址:https://docs.spicyboy.cn
27
+
28
+### 项目功能 🔨
29
+
30
+- 使用 Vue3.3 + TypeScript 开发,单文件组件**<script setup>**
31
+- 采用 Vite5 作为项目开发、打包工具(配置 gzip/brotli 打包、tsx 语法、跨域代理…)
32
+- 使用 Pinia 替代 Vuex,轻量、简单、易用,集成 Pinia 持久化插件
33
+- 使用 TypeScript 对 Axios 整个二次封装(请求拦截、取消、常用请求封装…)
34
+- 基于 Element 二次封装 [ProTable](https://juejin.cn/post/7166068828202336263) 组件,表格页面全部为配置项 Columns
35
+- 支持 Element 组件大小切换、多主题布局、暗黑模式、i18n 国际化
36
+- 使用 VueRouter 配置动态路由权限拦截、路由懒加载,支持页面按钮权限控制
37
+- 使用 KeepAlive 对页面进行缓存,支持多级嵌套路由缓存
38
+- 常用自定义指令开发(权限、复制、水印、拖拽、节流、防抖、长按…)
39
+- 使用 Prettier 统一格式化代码,集成 ESLint、Stylelint 代码校验规范
40
+- 使用 husky、lint-staged、commitlint、czg、cz-git 规范提交信息
41
+
42
+### 安装使用步骤 📔
43
+
44
+- **Clone:**
45
+
46
+```text
47
+# Gitee
48
+git clone https://gitee.com/HalseySpicy/Geeker-Admin.git
49
+# GitHub
50
+git clone https://github.com/HalseySpicy/Geeker-Admin.git
51
+```
52
+
53
+- **Install:**
54
+
55
+```text
56
+pnpm install
57
+```
58
+
59
+- **Run:**
60
+
61
+```text
62
+pnpm dev
63
+pnpm serve
64
+```
65
+
66
+- **Build:**
67
+
68
+```text
69
+# 开发环境
70
+pnpm build:dev
71
+
72
+# 测试环境
73
+pnpm build:test
74
+
75
+# 生产环境
76
+pnpm build:pro
77
+```
78
+
79
+- **Lint:**
80
+
81
+```text
82
+# eslint 检测代码
83
+pnpm lint:eslint
84
+
85
+# prettier 格式化代码
86
+pnpm lint:prettier
87
+
88
+# stylelint 格式化样式
89
+pnpm lint:stylelint
90
+```
91
+
92
+- **commit:**
93
+
94
+```text
95
+# 提交代码(提交前会自动执行 lint:lint-staged 命令)
96
+pnpm commit
97
+```
98
+
99
+### 项目截图 📷
100
+
101
+- 登录页:
102
+
103
+![login_light](https://i.imgtg.com/2023/04/13/8tknp.png)
104
+
105
+![login_dark](https://i.imgtg.com/2023/04/13/8tmpP.png)
106
+
107
+- 首页:
108
+
109
+![home_light](https://i.imgtg.com/2023/04/13/8tl1j.png)
110
+
111
+![home_dark](https://i.imgtg.com/2023/04/13/8tpfb.png)
112
+
113
+- 表格页:
114
+
115
+![table_light](https://i.imgtg.com/2023/04/13/8tfMx.png)
116
+
117
+![table_dark](https://i.imgtg.com/2023/04/13/8tv8F.png)
118
+
119
+- 数据可视化
120
+
121
+![dashboard](https://i.imgtg.com/2023/04/14/82Grx.png)
122
+
123
+- 数据大屏:
124
+
125
+![dataScreen](https://i.imgtg.com/2023/01/16/QP8HF.png)
126
+
127
+### 文件资源目录 📚
128
+
129
+```text
130
+Geeker-Admin
131
+├─ .husky                  # husky 配置文件
132
+├─ .vscode                 # VSCode 推荐配置
133
+├─ build                   # Vite 配置项
134
+├─ public                  # 静态资源文件(该文件夹不会被打包)
135
+├─ src
136
+│  ├─ api                  # API 接口管理
137
+│  ├─ assets               # 静态资源文件
138
+│  ├─ components           # 全局组件
139
+│  ├─ config               # 全局配置项
140
+│  ├─ directives           # 全局指令文件
141
+│  ├─ enums                # 项目常用枚举
142
+│  ├─ hooks                # 常用 Hooks 封装
143
+│  ├─ languages            # 语言国际化 i18n
144
+│  ├─ layouts              # 框架布局模块
145
+│  ├─ routers              # 路由管理
146
+│  ├─ stores               # pinia store
147
+│  ├─ styles               # 全局样式文件
148
+│  ├─ typings              # 全局 ts 声明
149
+│  ├─ utils                # 常用工具库
150
+│  ├─ views                # 项目所有页面
151
+│  ├─ App.vue              # 项目主组件
152
+│  ├─ main.ts              # 项目入口文件
153
+│  └─ vite-env.d.ts        # 指定 ts 识别 vue
154
+├─ .editorconfig           # 统一不同编辑器的编码风格
155
+├─ .env                    # vite 常用配置
156
+├─ .env.development        # 开发环境配置
157
+├─ .env.production         # 生产环境配置
158
+├─ .env.test               # 测试环境配置
159
+├─ .eslintignore           # 忽略 Eslint 校验
160
+├─ .eslintrc.cjs           # Eslint 校验配置文件
161
+├─ .gitignore              # 忽略 git 提交
162
+├─ .prettierignore         # 忽略 Prettier 格式化
163
+├─ .prettierrc.cjs         # Prettier 格式化配置
164
+├─ .stylelintignore        # 忽略 stylelint 格式化
165
+├─ .stylelintrc.cjs        # stylelint 样式格式化配置
166
+├─ CHANGELOG.md            # 项目更新日志
167
+├─ commitlint.config.cjs   # git 提交规范配置
168
+├─ index.html              # 入口 html
169
+├─ LICENSE                 # 开源协议文件
170
+├─ lint-staged.config.cjs  # lint-staged 配置文件
171
+├─ package-lock.json       # 依赖包包版本锁
172
+├─ package.json            # 依赖包管理
173
+├─ postcss.config.cjs      # postcss 配置
174
+├─ README.md               # README 介绍
175
+├─ tsconfig.json           # typescript 全局配置
176
+└─ vite.config.ts          # vite 全局配置文件
177
+```
178
+
179
+### 项目后台接口 🧩
180
+
181
+项目后台接口完全采用 Mock 数据,感谢以下 Mock 平台支持:
182
+
183
+- FastMock: https://www.fastmock.site
184
+- EasyMock:https://mock.mengxuegu.com

+ 46
- 0
build/getEnv.ts Целия файл

@@ -0,0 +1,46 @@
1
+import path from "path";
2
+
3
+export function isDevFn(mode: string): boolean {
4
+  return mode === "development";
5
+}
6
+
7
+export function isProdFn(mode: string): boolean {
8
+  return mode === "production";
9
+}
10
+
11
+export function isTestFn(mode: string): boolean {
12
+  return mode === "test";
13
+}
14
+
15
+/**
16
+ * Whether to generate package preview
17
+ */
18
+export function isReportMode(): boolean {
19
+  return process.env.VITE_REPORT === "true";
20
+}
21
+
22
+// Read all environment variable configuration files to process.env
23
+export function wrapperEnv(envConf: Recordable): ViteEnv {
24
+  const ret: any = {};
25
+
26
+  for (const envName of Object.keys(envConf)) {
27
+    let realName = envConf[envName].replace(/\\n/g, "\n");
28
+    realName = realName === "true" ? true : realName === "false" ? false : realName;
29
+    if (envName === "VITE_PORT") realName = Number(realName);
30
+    if (envName === "VITE_PROXY") {
31
+      try {
32
+        realName = JSON.parse(realName);
33
+      } catch (error) {}
34
+    }
35
+    ret[envName] = realName;
36
+  }
37
+  return ret;
38
+}
39
+
40
+/**
41
+ * Get user root directory
42
+ * @param dir file path
43
+ */
44
+export function getRootPath(...dir: string[]) {
45
+  return path.resolve(process.cwd(), ...dir);
46
+}

+ 110
- 0
build/plugins.ts Целия файл

@@ -0,0 +1,110 @@
1
+import { resolve } from "path";
2
+import { PluginOption } from "vite";
3
+import { VitePWA } from "vite-plugin-pwa";
4
+import { visualizer } from "rollup-plugin-visualizer";
5
+import simpleHtmlPlugin from "vite-plugin-simple-html";
6
+import { createSvgIconsPlugin } from "vite-plugin-svg-icons";
7
+import vue from "@vitejs/plugin-vue";
8
+import vueJsx from "@vitejs/plugin-vue-jsx";
9
+import eslintPlugin from "vite-plugin-eslint";
10
+import viteCompression from "vite-plugin-compression";
11
+import vueSetupExtend from "unplugin-vue-setup-extend-plus/vite";
12
+
13
+/**
14
+ * 创建 vite 插件
15
+ * @param viteEnv
16
+ */
17
+export const createVitePlugins = (viteEnv: ViteEnv): (PluginOption | PluginOption[])[] => {
18
+  const { VITE_GLOB_APP_TITLE, VITE_REPORT, VITE_PWA } = viteEnv;
19
+  return [
20
+    vue(),
21
+    // vue 可以使用 jsx/tsx 语法
22
+
23
+    vueJsx(),
24
+    // esLint 报错信息显示在浏览器界面上
25
+    eslintPlugin(),
26
+    // name 可以写在 script 标签上
27
+    vueSetupExtend({}),
28
+    // 创建打包压缩配置
29
+    createCompression(viteEnv),
30
+    // 注入变量到 html 文件
31
+    simpleHtmlPlugin({
32
+      minify: true,
33
+      inject: {
34
+        data: { title: VITE_GLOB_APP_TITLE }
35
+      }
36
+    }),
37
+    // 使用 svg 图标
38
+    createSvgIconsPlugin({
39
+      iconDirs: [resolve(process.cwd(), "src/assets/icons")],
40
+      symbolId: "icon-[dir]-[name]"
41
+    }),
42
+    // vitePWA
43
+    VITE_PWA && createVitePwa(viteEnv),
44
+    // 是否生成包预览,分析依赖包大小做优化处理
45
+    VITE_REPORT && (visualizer({ filename: "stats.html", gzipSize: true, brotliSize: true }) as PluginOption)
46
+  ];
47
+};
48
+
49
+/**
50
+ * @description 根据 compress 配置,生成不同的压缩规则
51
+ * @param viteEnv
52
+ */
53
+const createCompression = (viteEnv: ViteEnv): PluginOption | PluginOption[] => {
54
+  const { VITE_BUILD_COMPRESS = "none", VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE } = viteEnv;
55
+  const compressList = VITE_BUILD_COMPRESS.split(",");
56
+  const plugins: PluginOption[] = [];
57
+  if (compressList.includes("gzip")) {
58
+    plugins.push(
59
+      viteCompression({
60
+        ext: ".gz",
61
+        algorithm: "gzip",
62
+        deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE
63
+      })
64
+    );
65
+  }
66
+  if (compressList.includes("brotli")) {
67
+    plugins.push(
68
+      viteCompression({
69
+        ext: ".br",
70
+        algorithm: "brotliCompress",
71
+        deleteOriginFile: VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE
72
+      })
73
+    );
74
+  }
75
+  return plugins;
76
+};
77
+
78
+/**
79
+ * @description VitePwa
80
+ * @param viteEnv
81
+ */
82
+const createVitePwa = (viteEnv: ViteEnv): PluginOption | PluginOption[] => {
83
+  const { VITE_GLOB_APP_TITLE } = viteEnv;
84
+  return VitePWA({
85
+    registerType: "autoUpdate",
86
+    manifest: {
87
+      name: VITE_GLOB_APP_TITLE,
88
+      short_name: VITE_GLOB_APP_TITLE,
89
+      theme_color: "#ffffff",
90
+      icons: [
91
+        {
92
+          src: "/logo.png",
93
+          sizes: "192x192",
94
+          type: "image/png"
95
+        },
96
+        {
97
+          src: "/logo.png",
98
+          sizes: "512x512",
99
+          type: "image/png"
100
+        },
101
+        {
102
+          src: "/logo.png",
103
+          sizes: "512x512",
104
+          type: "image/png",
105
+          purpose: "any maskable"
106
+        }
107
+      ]
108
+    }
109
+  });
110
+};

+ 30
- 0
build/proxy.ts Целия файл

@@ -0,0 +1,30 @@
1
+import type { ProxyOptions } from "vite";
2
+
3
+type ProxyItem = [string, string];
4
+
5
+type ProxyList = ProxyItem[];
6
+
7
+type ProxyTargetList = Record<string, ProxyOptions>;
8
+
9
+/**
10
+ * 创建代理,用于解析 .env.development 代理配置
11
+ * @param list
12
+ */
13
+export function createProxy(list: ProxyList = []) {
14
+  const ret: ProxyTargetList = {};
15
+  for (const [prefix, target] of list) {
16
+    const httpsRE = /^http:\/\//;
17
+    const isHttps = httpsRE.test(target);
18
+
19
+    // https://github.com/http-party/node-http-proxy#options
20
+    ret[prefix] = {
21
+      target: target,
22
+      changeOrigin: true,
23
+      ws: true,
24
+      rewrite: path => path.replace(new RegExp(`^${prefix}`), ""),
25
+      // https is require secure=false
26
+      ...(isHttps ? { secure: false } : {})
27
+    };
28
+  }
29
+  return ret;
30
+}

+ 162
- 0
commitlint.config.cjs Целия файл

@@ -0,0 +1,162 @@
1
+// @see: https://cz-git.qbenben.com/zh/guide
2
+const fs = require("fs");
3
+const path = require("path");
4
+
5
+const scopes = fs
6
+  .readdirSync(path.resolve(__dirname, "src"), { withFileTypes: true })
7
+  .filter(dirent => dirent.isDirectory())
8
+  .map(dirent => dirent.name.replace(/s$/, ""));
9
+
10
+/** @type {import('cz-git').UserConfig} */
11
+module.exports = {
12
+  ignores: [commit => commit.includes("init")],
13
+  extends: ["@commitlint/config-conventional"],
14
+  rules: {
15
+    // @see: https://commitlint.js.org/#/reference-rules
16
+    "body-leading-blank": [2, "always"],
17
+    "footer-leading-blank": [1, "always"],
18
+    "header-max-length": [2, "always", 108],
19
+    "subject-empty": [2, "never"],
20
+    "type-empty": [2, "never"],
21
+    "subject-case": [0],
22
+    "type-enum": [
23
+      2,
24
+      "always",
25
+      [
26
+        "feat",
27
+        "fix",
28
+        "docs",
29
+        "style",
30
+        "refactor",
31
+        "perf",
32
+        "test",
33
+        "build",
34
+        "ci",
35
+        "chore",
36
+        "revert",
37
+        "wip",
38
+        "workflow",
39
+        "types",
40
+        "release"
41
+      ]
42
+    ]
43
+  },
44
+  prompt: {
45
+    messages: {
46
+      type: "Select the type of change that you're committing:",
47
+      scope: "Denote the SCOPE of this change (optional):",
48
+      customScope: "Denote the SCOPE of this change:",
49
+      subject: "Write a SHORT, IMPERATIVE tense description of the change:\n",
50
+      body: 'Provide a LONGER description of the change (optional). Use "|" to break new line:\n',
51
+      breaking: 'List any BREAKING CHANGES (optional). Use "|" to break new line:\n',
52
+      footerPrefixsSelect: "Select the ISSUES type of changeList by this change (optional):",
53
+      customFooterPrefixs: "Input ISSUES prefix:",
54
+      footer: "List any ISSUES by this change. E.g.: #31, #34:\n",
55
+      confirmCommit: "Are you sure you want to proceed with the commit above?"
56
+      // 中文版
57
+      // type: "选择你要提交的类型 :",
58
+      // scope: "选择一个提交范围(可选):",
59
+      // customScope: "请输入自定义的提交范围 :",
60
+      // subject: "填写简短精炼的变更描述 :\n",
61
+      // body: '填写更加详细的变更描述(可选)。使用 "|" 换行 :\n',
62
+      // breaking: '列举非兼容性重大的变更(可选)。使用 "|" 换行 :\n',
63
+      // footerPrefixsSelect: "选择关联issue前缀(可选):",
64
+      // customFooterPrefixs: "输入自定义issue前缀 :",
65
+      // footer: "列举关联issue (可选) 例如: #31, #I3244 :\n",
66
+      // confirmCommit: "是否提交或修改commit ?"
67
+    },
68
+    types: [
69
+      {
70
+        value: "feat",
71
+        name: "feat:     🚀  A new feature",
72
+        emoji: "🚀"
73
+      },
74
+      {
75
+        value: "fix",
76
+        name: "fix:      🧩  A bug fix",
77
+        emoji: "🧩"
78
+      },
79
+      {
80
+        value: "docs",
81
+        name: "docs:     📚  Documentation only changes",
82
+        emoji: "📚"
83
+      },
84
+      {
85
+        value: "style",
86
+        name: "style:    🎨  Changes that do not affect the meaning of the code",
87
+        emoji: "🎨"
88
+      },
89
+      {
90
+        value: "refactor",
91
+        name: "refactor: ♻️   A code change that neither fixes a bug nor adds a feature",
92
+        emoji: "♻️"
93
+      },
94
+      {
95
+        value: "perf",
96
+        name: "perf:     ⚡️  A code change that improves performance",
97
+        emoji: "⚡️"
98
+      },
99
+      {
100
+        value: "test",
101
+        name: "test:     ✅  Adding missing tests or correcting existing tests",
102
+        emoji: "✅"
103
+      },
104
+      {
105
+        value: "build",
106
+        name: "build:    📦️   Changes that affect the build system or external dependencies",
107
+        emoji: "📦️"
108
+      },
109
+      {
110
+        value: "ci",
111
+        name: "ci:       🎡  Changes to our CI configuration files and scripts",
112
+        emoji: "🎡"
113
+      },
114
+      {
115
+        value: "chore",
116
+        name: "chore:    🔨  Other changes that don't modify src or test files",
117
+        emoji: "🔨"
118
+      },
119
+      {
120
+        value: "revert",
121
+        name: "revert:   ⏪️  Reverts a previous commit",
122
+        emoji: "⏪️"
123
+      },
124
+      {
125
+        value: "wip",
126
+        name: "wip:      🕔  work in process",
127
+        emoji: "🕔"
128
+      },
129
+      {
130
+        value: "workflow",
131
+        name: "workflow: 📋  workflow improvements",
132
+        emoji: "📋"
133
+      },
134
+      {
135
+        value: "type",
136
+        name: "type:     🔰  type definition file changes",
137
+        emoji: "🔰"
138
+      }
139
+      // 中文版
140
+      // { value: "feat", name: "特性:   🚀  新增功能", emoji: "🚀" },
141
+      // { value: "fix", name: "修复:   🧩  修复缺陷", emoji: "🧩" },
142
+      // { value: "docs", name: "文档:   📚  文档变更", emoji: "📚" },
143
+      // { value: "style", name: "格式:   🎨  代码格式(不影响功能,例如空格、分号等格式修正)", emoji: "🎨" },
144
+      // { value: "refactor", name: "重构:   ♻️  代码重构(不包括 bug 修复、功能新增)", emoji: "♻️" },
145
+      // { value: "perf", name: "性能:    ⚡️  性能优化", emoji: "⚡️" },
146
+      // { value: "test", name: "测试:   ✅  添加疏漏测试或已有测试改动", emoji: "✅" },
147
+      // { value: "build", name: "构建:   📦️  构建流程、外部依赖变更(如升级 npm 包、修改 webpack 配置等)", emoji: "📦️" },
148
+      // { value: "ci", name: "集成:   🎡  修改 CI 配置、脚本", emoji: "🎡" },
149
+      // { value: "revert", name: "回退:   ⏪️  回滚 commit", emoji: "⏪️" },
150
+      // { value: "chore", name: "其他:   🔨  对构建过程或辅助工具和库的更改(不影响源文件、测试用例)", emoji: "🔨" },
151
+      // { value: "wip", name: "开发:   🕔  正在开发中", emoji: "🕔" },
152
+      // { value: "workflow", name: "工作流:   📋  工作流程改进", emoji: "📋" },
153
+      // { value: "types", name: "类型:   🔰  类型定义文件修改", emoji: "🔰" }
154
+    ],
155
+    useEmoji: true,
156
+    scopes: [...scopes],
157
+    customScopesAlign: "bottom",
158
+    emptyScopesAlias: "empty",
159
+    customScopesAlias: "custom",
160
+    allowBreakingChanges: ["feat", "fix"]
161
+  }
162
+};

+ 105
- 0
index.html Целия файл

@@ -0,0 +1,105 @@
1
+<!doctype html>
2
+<html lang="en">
3
+  <head>
4
+    <meta charset="UTF-8" />
5
+    <link rel="icon" type="image/svg+xml" href="/favicon.ico" />
6
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+    <title>储能智慧云平台</title>
8
+  </head>
9
+  <body>
10
+    <div id="app">
11
+      <style>
12
+        html,
13
+        body,
14
+        #app {
15
+          width: 100%;
16
+          height: 100%;
17
+          padding: 0;
18
+          margin: 0;
19
+        }
20
+        .loading-box {
21
+          display: flex;
22
+          flex-direction: column;
23
+          align-items: center;
24
+          justify-content: center;
25
+          width: 100%;
26
+          height: 100%;
27
+        }
28
+        .loading-box .loading-wrap {
29
+          display: flex;
30
+          align-items: center;
31
+          justify-content: center;
32
+          padding: 98px;
33
+        }
34
+        .dot {
35
+          position: relative;
36
+          box-sizing: border-box;
37
+          display: inline-block;
38
+          width: 32px;
39
+          height: 32px;
40
+          font-size: 32px;
41
+          transform: rotate(45deg);
42
+          animation: ant-rotate 1.2s infinite linear;
43
+        }
44
+        .dot i {
45
+          position: absolute;
46
+          display: block;
47
+          width: 14px;
48
+          height: 14px;
49
+          background-color: #409eff;
50
+          border-radius: 100%;
51
+          opacity: 0.3;
52
+          transform: scale(0.75);
53
+          transform-origin: 50% 50%;
54
+          animation: ant-spin-move 1s infinite linear alternate;
55
+        }
56
+        .dot i:nth-child(1) {
57
+          top: 0;
58
+          left: 0;
59
+        }
60
+        .dot i:nth-child(2) {
61
+          top: 0;
62
+          right: 0;
63
+          animation-delay: 0.4s;
64
+        }
65
+        .dot i:nth-child(3) {
66
+          right: 0;
67
+          bottom: 0;
68
+          animation-delay: 0.8s;
69
+        }
70
+        .dot i:nth-child(4) {
71
+          bottom: 0;
72
+          left: 0;
73
+          animation-delay: 1.2s;
74
+        }
75
+
76
+        @keyframes ant-rotate {
77
+          to {
78
+            transform: rotate(405deg);
79
+          }
80
+        }
81
+
82
+        @keyframes ant-spin-move {
83
+          to {
84
+            opacity: 1;
85
+          }
86
+        }
87
+      </style>
88
+      <div class="loading-box">
89
+        <div class="loading-wrap">
90
+          <span class="dot dot-spin"><i></i><i></i><i></i><i></i></span>
91
+        </div>
92
+      </div>
93
+    </div>
94
+    <script>
95
+      const globalState = JSON.parse(window.localStorage.getItem("geeker-global"));
96
+      if (globalState) {
97
+        const dot = document.querySelectorAll(".dot i");
98
+        const html = document.querySelector("html");
99
+        dot.forEach(item => (item.style.background = globalState.primary));
100
+        if (globalState.isDark) html.style.background = "#141414";
101
+      }
102
+    </script>
103
+    <script type="module" src="/src/main.ts"></script>
104
+  </body>
105
+</html>

+ 8
- 0
lint-staged.config.cjs Целия файл

@@ -0,0 +1,8 @@
1
+module.exports = {
2
+  "*.{js,jsx,ts,tsx}": ["eslint --fix", "prettier --write"],
3
+  "{!(package)*.json,*.code-snippets,.!(browserslist)*rc}": ["prettier --write--parser json"],
4
+  "package.json": ["prettier --write"],
5
+  "*.vue": ["eslint --fix", "prettier --write", "stylelint --fix"],
6
+  "*.{scss,less,styl,html}": ["stylelint --fix", "prettier --write"],
7
+  "*.md": ["prettier --write"]
8
+};

+ 16127
- 0
package-lock.json
Файловите разлики са ограничени, защото са твърде много
Целия файл


+ 130
- 0
package.json Целия файл

@@ -0,0 +1,130 @@
1
+{
2
+  "name": "geeker-admin",
3
+  "private": true,
4
+  "version": "1.2.0",
5
+  "type": "module",
6
+  "description": "geeker-admin open source management system",
7
+  "author": {
8
+    "name": "Geeker",
9
+    "email": "848130454@qq.com",
10
+    "url": "https://github.com/HalseySpicy"
11
+  },
12
+  "license": "MIT",
13
+  "homepage": "https://github.com/HalseySpicy/Geeker-Admin",
14
+  "repository": {
15
+    "type": "git",
16
+    "url": "git@github.com:HalseySpicy/Geeker-Admin.git"
17
+  },
18
+  "bugs": {
19
+    "url": "https://github.com/HalseySpicy/Geeker-Admin/issues"
20
+  },
21
+  "scripts": {
22
+    "dev": "vite",
23
+    "serve": "vite",
24
+    "build:dev": "vue-tsc && vite build --mode development",
25
+    "build:test": "vue-tsc && vite build --mode test",
26
+    "build:pro": "vue-tsc && vite build --mode production",
27
+    "type:check": "vue-tsc --noEmit --skipLibCheck",
28
+    "preview": "npm run build:dev && vite preview",
29
+    "lint:eslint": "eslint --fix --ext .js,.ts,.vue ./src",
30
+    "lint:prettier": "prettier --write \"src/**/*.{js,ts,json,tsx,css,less,scss,vue,html,md}\"",
31
+    "lint:stylelint": "stylelint --cache --fix \"**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/",
32
+    "lint:lint-staged": "lint-staged",
33
+    "prepare": "husky install",
34
+    "release": "standard-version",
35
+    "commit": "git add -A && czg && git push"
36
+  },
37
+  "dependencies": {
38
+    "@element-plus/icons-vue": "^2.3.1",
39
+    "@vueuse/core": "^10.6.1",
40
+    "@vueuse/integrations": "^10.9.0",
41
+    "@wangeditor/editor": "^5.1.23",
42
+    "@wangeditor/editor-for-vue": "^5.1.12",
43
+    "axios": "^1.6.2",
44
+    "dayjs": "^1.11.10",
45
+    "driver.js": "^1.3.1",
46
+    "echarts": "^5.4.3",
47
+    "echarts-liquidfill": "^3.1.0",
48
+    "element-plus": "^2.4.3",
49
+    "js-cookie": "^3.0.5",
50
+    "md5": "^2.3.0",
51
+    "mitt": "^3.0.1",
52
+    "nprogress": "^0.2.0",
53
+    "pinia": "^2.1.7",
54
+    "pinia-plugin-persistedstate": "^3.2.0",
55
+    "qs": "^6.11.2",
56
+    "screenfull": "^6.0.2",
57
+    "sortablejs": "^1.15.1",
58
+    "universal-cookie": "^7.1.4",
59
+    "vue": "^3.3.9",
60
+    "vue-cookies": "^1.8.4",
61
+    "vue-i18n": "^9.8.0",
62
+    "vue-router": "^4.2.5",
63
+    "vue3-cookies": "^1.0.6",
64
+    "vuedraggable": "^4.1.0"
65
+  },
66
+  "devDependencies": {
67
+    "@commitlint/cli": "^18.4.3",
68
+    "@commitlint/config-conventional": "^18.4.3",
69
+    "@types/js-cookie": "^3.0.6",
70
+    "@types/md5": "^2.3.5",
71
+    "@types/nprogress": "^0.2.3",
72
+    "@types/qs": "^6.9.10",
73
+    "@types/sortablejs": "^1.15.7",
74
+    "@typescript-eslint/eslint-plugin": "^6.13.1",
75
+    "@typescript-eslint/parser": "^6.13.1",
76
+    "@vitejs/plugin-vue": "^4.5.1",
77
+    "@vitejs/plugin-vue-jsx": "^3.1.0",
78
+    "autoprefixer": "^10.4.16",
79
+    "cz-git": "^1.7.1",
80
+    "czg": "^1.7.1",
81
+    "eslint": "^8.55.0",
82
+    "eslint-config-prettier": "^9.1.0",
83
+    "eslint-plugin-prettier": "^5.0.1",
84
+    "eslint-plugin-vue": "^9.19.2",
85
+    "husky": "^8.0.3",
86
+    "lint-staged": "^15.1.0",
87
+    "postcss": "^8.4.32",
88
+    "postcss-html": "^1.5.0",
89
+    "prettier": "^3.1.0",
90
+    "rollup-plugin-visualizer": "^5.9.3",
91
+    "sass": "^1.69.5",
92
+    "standard-version": "^9.5.0",
93
+    "stylelint": "^15.11.0",
94
+    "stylelint-config-html": "^1.1.0",
95
+    "stylelint-config-recess-order": "^4.4.0",
96
+    "stylelint-config-recommended-scss": "^13.1.0",
97
+    "stylelint-config-recommended-vue": "^1.5.0",
98
+    "stylelint-config-standard": "^34.0.0",
99
+    "stylelint-config-standard-scss": "^11.1.0",
100
+    "typescript": "^5.3.2",
101
+    "unplugin-vue-setup-extend-plus": "^1.0.0",
102
+    "vite": "^5.0.4",
103
+    "vite-plugin-compression": "^0.5.1",
104
+    "vite-plugin-eslint": "^1.8.1",
105
+    "vite-plugin-pwa": "^0.17.2",
106
+    "vite-plugin-simple-html": "^0.1.0",
107
+    "vite-plugin-svg-icons": "^2.0.1",
108
+    "vue-tsc": "^1.8.24"
109
+  },
110
+  "engines": {
111
+    "node": ">=16.0.0"
112
+  },
113
+  "browserslist": {
114
+    "production": [
115
+      "> 1%",
116
+      "not dead",
117
+      "not op_mini all"
118
+    ],
119
+    "development": [
120
+      "last 1 chrome version",
121
+      "last 1 firefox version",
122
+      "last 1 safari version"
123
+    ]
124
+  },
125
+  "config": {
126
+    "commitizen": {
127
+      "path": "node_modules/cz-git"
128
+    }
129
+  }
130
+}

+ 11367
- 0
pnpm-lock.yaml
Файловите разлики са ограничени, защото са твърде много
Целия файл


+ 5
- 0
postcss.config.cjs Целия файл

@@ -0,0 +1,5 @@
1
+module.exports = {
2
+  plugins: {
3
+    autoprefixer: {}
4
+  }
5
+};

Двоични данни
public/favicon.ico Целия файл


Двоични данни
public/logo.png Целия файл


+ 5
- 0
public/vue.svg
Файловите разлики са ограничени, защото са твърде много
Целия файл


+ 44
- 0
src/App.vue Целия файл

@@ -0,0 +1,44 @@
1
+<template>
2
+  <el-config-provider :locale="locale" :size="assemblySize" :button="buttonConfig">
3
+    <router-view></router-view>
4
+  </el-config-provider>
5
+</template>
6
+
7
+<script setup lang="ts">
8
+import { onMounted, reactive, computed } from "vue";
9
+import { useI18n } from "vue-i18n";
10
+import { getBrowserLang } from "@/utils";
11
+import { useTheme } from "@/hooks/useTheme";
12
+import { ElConfigProvider } from "element-plus";
13
+import { LanguageType } from "./stores/interface";
14
+import { useGlobalStore } from "@/stores/modules/global";
15
+import en from "element-plus/es/locale/lang/en";
16
+import zhCn from "element-plus/es/locale/lang/zh-cn";
17
+
18
+const globalStore = useGlobalStore();
19
+
20
+// init theme
21
+const { initTheme } = useTheme();
22
+initTheme();
23
+
24
+// init language
25
+const i18n = useI18n();
26
+onMounted(() => {
27
+  const language = globalStore.language ?? getBrowserLang();
28
+  i18n.locale.value = language;
29
+  globalStore.setGlobalState("language", language as LanguageType);
30
+});
31
+
32
+// element language
33
+const locale = computed(() => {
34
+  if (globalStore.language == "zh") return zhCn;
35
+  if (globalStore.language == "en") return en;
36
+  return getBrowserLang() == "zh" ? zhCn : en;
37
+});
38
+
39
+// element assemblySize
40
+const assemblySize = computed(() => globalStore.assemblySize);
41
+
42
+// element button config
43
+const buttonConfig = reactive({ autoInsertSpace: false });
44
+</script>

+ 3
- 0
src/api/config/servicePort.ts Целия файл

@@ -0,0 +1,3 @@
1
+// 后端微服务模块前缀
2
+export const PORT1 = "/geeker";
3
+export const PORT2 = "/hooks";

+ 46
- 0
src/api/helper/axiosCancel.ts Целия файл

@@ -0,0 +1,46 @@
1
+import { CustomAxiosRequestConfig } from "../index";
2
+import qs from "qs";
3
+
4
+// 声明一个 Map 用于存储每个请求的标识 和 取消函数
5
+let pendingMap = new Map<string, AbortController>();
6
+
7
+// 序列化参数
8
+export const getPendingUrl = (config: CustomAxiosRequestConfig) =>
9
+  [config.method, config.url, qs.stringify(config.data), qs.stringify(config.params)].join("&");
10
+
11
+export class AxiosCanceler {
12
+  /**
13
+   * @description: 添加请求
14
+   * @param {Object} config
15
+   * @return void
16
+   */
17
+  addPending(config: CustomAxiosRequestConfig) {
18
+    // 在请求开始前,对之前的请求做检查取消操作
19
+    this.removePending(config);
20
+    const url = getPendingUrl(config);
21
+    const controller = new AbortController();
22
+    config.signal = controller.signal;
23
+    pendingMap.set(url, controller);
24
+  }
25
+
26
+  /**
27
+   * @description: 移除请求
28
+   * @param {Object} config
29
+   */
30
+  removePending(config: CustomAxiosRequestConfig) {
31
+    const url = getPendingUrl(config);
32
+    // 如果在 pending 中存在当前请求标识,需要取消当前请求
33
+    const controller = pendingMap.get(url);
34
+    controller && controller.abort();
35
+  }
36
+
37
+  /**
38
+   * @description: 清空所有pending
39
+   */
40
+  removeAllPending() {
41
+    pendingMap.forEach(controller => {
42
+      controller && controller.abort();
43
+    });
44
+    pendingMap.clear();
45
+  }
46
+}

+ 43
- 0
src/api/helper/checkStatus.ts Целия файл

@@ -0,0 +1,43 @@
1
+import { ElMessage } from "element-plus";
2
+
3
+/**
4
+ * @description: 校验网络请求状态码
5
+ * @param {Number} status
6
+ * @return void
7
+ */
8
+export const checkStatus = (status: number) => {
9
+  switch (status) {
10
+    case 400:
11
+      ElMessage.error("请求失败!请您稍后重试");
12
+      break;
13
+    case 401:
14
+      ElMessage.error("登录失效!请您重新登录");
15
+      break;
16
+    case 403:
17
+      ElMessage.error("当前账号无权限访问!");
18
+      break;
19
+    case 404:
20
+      ElMessage.error("你所访问的资源不存在!");
21
+      break;
22
+    case 405:
23
+      ElMessage.error("请求方式错误!请您稍后重试");
24
+      break;
25
+    case 408:
26
+      ElMessage.error("请求超时!请您稍后重试");
27
+      break;
28
+    case 500:
29
+      ElMessage.error("服务异常!");
30
+      break;
31
+    case 502:
32
+      ElMessage.error("网关错误!");
33
+      break;
34
+    case 503:
35
+      ElMessage.error("服务不可用!");
36
+      break;
37
+    case 504:
38
+      ElMessage.error("网关超时!");
39
+      break;
40
+    default:
41
+      ElMessage.error("请求失败!");
42
+  }
43
+};

+ 469
- 0
src/api/home/Multisite.ts Целия файл

@@ -0,0 +1,469 @@
1
+import http from "@/api";
2
+import { Alarm, Station, other } from "../interface";
3
+import qs from "qs";
4
+// export const changeUserStatus = (params: { id: string; status: number }) => {
5
+//   return http.post(`/upload`,qs.stringify(params));
6
+// };
7
+// 用户信息
8
+export const getuser = () => {
9
+  return http.get(`/platform/user/profile/resetPwd`);
10
+};
11
+// 多站预览站点数据--------
12
+export const gethomesite = () => {
13
+  return http.post(`/muitiStation/overview`);
14
+};
15
+// 收益统计------------日份
16
+export const multiStationday = (params: {}) => {
17
+  return http.post<Station.between[]>(`/stats/multStation/profit/between/day`, qs.stringify(params));
18
+};
19
+// 收益统计------------月份
20
+export const multiStationdayMonth = (params: {}) => {
21
+  return http.post<Station.between[]>(`/stats/multStation/profit/between/yearMonth`, qs.stringify(params));
22
+};
23
+// 充放电统计-----------日份
24
+export const multiStatiopower = (params: {}) => {
25
+  return http.post<Station.power[]>(`/stats/multStation/power/between/day`, qs.stringify(params));
26
+};
27
+// 充放电统计-----------月份
28
+export const multiStatyearMonth = (params: {}) => {
29
+  return http.post<Station.power[]>(`/stats/multStation/power/between/yearMonth`, qs.stringify(params));
30
+};
31
+// 收益排名--------------日份
32
+export const multiStationtopday = (params: {}) => {
33
+  return http.post<Station.profitday[]>(`/stats/multStation/profit/top/between/day`, qs.stringify(params));
34
+};
35
+// 收益排名--------------月份
36
+export const multiStationtopyearMonth = (params: {}) => {
37
+  return http.post<Station.profitday[]>(`/stats/multStation/profit/top/between/yearMonth`, qs.stringify(params));
38
+};
39
+
40
+// 故障告警-------------
41
+export const alarmMultiStation = (params: {}) => {
42
+  return http.post<Station.multiStation[]>(`/alarm/multiStation`, qs.stringify(params));
43
+};
44
+// 电站列表----------
45
+export const multiStationpagebaseInfo = (params: {}) => {
46
+  return http.post(`/muitiStation/page/baseInfo`, qs.stringify(params));
47
+};
48
+// 电站卡片查询
49
+export const multiStationpageinfo = (params: {}) => {
50
+  return http.post(`/muitiStation/page/info`, qs.stringify(params));
51
+};
52
+// 国家
53
+export const getlistcountry = (params: {}) => {
54
+  return http.post(`/list/country`, qs.stringify(params));
55
+};
56
+// 省市县
57
+export const getliststate = (params: {}) => {
58
+  return http.post(`/list/state`, qs.stringify(params));
59
+};
60
+// 市
61
+export const getlistcity = (params: {}) => {
62
+  return http.post(`/list/city`, qs.stringify(params));
63
+};
64
+// 县
65
+export const getlistcounty = (params: {}) => {
66
+  return http.post(`/list/county`, qs.stringify(params));
67
+};
68
+//
69
+export const Stationinfo = (params: {}, id: any) => {
70
+  return http.post(`/station/${id}/info`, qs.stringify(params));
71
+};
72
+// 单站橄榄筛选
73
+export const stationstationName = (params: {}) => {
74
+  return http.post<Station.todo[]>(`/station/list/stationName`, qs.stringify(params));
75
+};
76
+// 单站橄榄筛选列表----------
77
+export const emsSystempage = (params: {}, id: any) => {
78
+  return http.post(`/emsSystem/singleStation/${id}/page`, qs.stringify(params));
79
+};
80
+// 单站橄榄收益统计------------日份
81
+export const singlestationday = (params: {}, id: any) => {
82
+  return http.post<Station.profitbetween>(`/stats/singleStation/${id}/profit/between/day`, qs.stringify(params));
83
+};
84
+// 单站橄榄收益统计------------月份
85
+export const singlestationyearMonth = (params: {}, id: any) => {
86
+  return http.post<Station.profitbetween>(`/stats/singleStation/${id}/profit/between/yearMonth`, qs.stringify(params));
87
+};
88
+
89
+// 单站橄榄放电统计---------日
90
+export const postsexportKwh = (params: {}, id: any) => {
91
+  return http.post<Station.power[]>(`/stats/singleStation/${id}/singleStation/between/day`, qs.stringify(params));
92
+};
93
+// 单站橄榄放电统计----------月份
94
+export const singlestationchargingMonth = (params: {}, id: any) => {
95
+  return http.post<Station.power[]>(`/stats/singleStation/${id}/between/yuerMonth`, qs.stringify(params));
96
+};
97
+// 单站橄榄放电达成率---------日
98
+export const postexportKwh = (params: {}, id: any) => {
99
+  return http.post<Station.exportKwh>(`/stats/singleStation/${id}/exportKwh/between/day`, qs.stringify(params));
100
+};
101
+// 单站橄榄综合效率------------日份
102
+export const overallEfficiencyday = (params: {}, id: any) => {
103
+  return http.post<Station.efficiency>(`/stats/singleStation/${id}/overallEfficiency/between/day`, qs.stringify(params));
104
+};
105
+// 单站橄榄综合效率------------月份
106
+export const overallEfficiencyyearMonth = (params: {}, id: any) => {
107
+  return http.post<Station.efficiency>(`/stats/singleStation/${id}/overallEfficiency/between/yearMonth`, qs.stringify(params));
108
+};
109
+// 站点系统 查询单个电站二级接口------
110
+export const postemsSystemsingleStation = (params: {}, id: any) => {
111
+  return http.post<Station.emsSystem[]>(`/emsSystem/singleStation/${id}`, qs.stringify(params));
112
+};
113
+// 站点系统 单站实时数据-----
114
+export const poststationrealtime = (params: {}, id: string, ids: string) => {
115
+  return http.post<Station.realtimeinfo>(`/station/${id}/system/${ids}/realtime/info`, qs.stringify(params));
116
+};
117
+// 站点系统 功率趋势图-----
118
+export const poststationsystem = (params: {}, id: string, ids: string) => {
119
+  return http.post<Station.powertrend>(`/station/${id}/system/${ids}/power/trend`, qs.stringify(params), {
120
+    loading: false
121
+  });
122
+};
123
+// 站点系统 实时运行尖峰平谷背景-----
124
+export const stationcolor = (params: {}, id: string, ids: string) => {
125
+  return http.post<Station.operation[]>(`/station/${id}/system/${ids}/realtime/record/period`, qs.stringify(params), {
126
+    loading: false
127
+  });
128
+};
129
+// 站点系统 实时运行-----
130
+export const stationrecord = (params: {}, id: string, ids: string) => {
131
+  return http.post<Station.powertrend>(`station/${id}/system/${ids}/realtime/device/export`, qs.stringify(params), {
132
+    loading: false
133
+  });
134
+};
135
+// 站点系统 告警状态-----
136
+export const poststationdevice = (params: {}, id: string, ids: string) => {
137
+  return http.post<Station.systemdevice[]>(`/station/${id}/system/${ids}/device/status`, qs.stringify(params), {
138
+    loading: false
139
+  });
140
+};
141
+// 站点系统 实时电量收益------
142
+export const postelectricityrevenue = (params: {}, id: string, ids: string) => {
143
+  return http.post<Station.realtimepower>(`/station/${id}/system/${ids}/realtime/powerProfit/report`, qs.stringify(params), {
144
+    loading: false
145
+  });
146
+};
147
+// 站点系统 实时运行数据模型------
148
+export const poststationlist = (params: {}, id: string, ids: string) => {
149
+  return http.post<Station.datatype>(`/station/${id}/system/${ids}/realtime/device/list`, qs.stringify(params), {
150
+    loading: false
151
+  });
152
+};
153
+// 设备监控 tap标签
154
+export const poststationdeviceList = (params: {}, id: any) => {
155
+  return http.post<Station.deviceList[]>(`/device/station/${id}/deviceList`, qs.stringify(params), { loading: false });
156
+};
157
+// 设备监控 pcs标签数据
158
+export const postpcsInfo = (params: {}, id: string, ids: string) => {
159
+  return http.post(`/device/station/${id}/${ids}/pcsInfo`, qs.stringify(params), { loading: false });
160
+};
161
+// 设备监控 电表标签数据
162
+export const electricMeterInfo = (params: {}, id: string, ids: string) => {
163
+  return http.post(`/device/station/${id}/${ids}/electricMeterInfo`, qs.stringify(params), { loading: false });
164
+};
165
+// 设备监控 BMS标签数据
166
+export const BMSfieldCode = (params: {}, id: string) => {
167
+  return http.post(`device/station/${id}/fieldCode`, qs.stringify(params), { loading: false });
168
+};
169
+// 设备监控 BMS标签数据
170
+export const BMSbatteryStackInfo = (params: {}, id: string, ids: string) => {
171
+  return http.post(`device/station/${id}/${ids}/batteryStackInfo`, qs.stringify(params), { loading: false });
172
+};
173
+// 设备监控 空调标签数据
174
+export const getairConditionerInfo = (params: {}, id: string, ids: string) => {
175
+  return http.post(`device/station/${id}/${ids}/airConditionerInfo`, qs.stringify(params));
176
+};
177
+// 电价管理
178
+export const electricitylist = (params: {}, id: string) => {
179
+  return http.post<Station.electricity[]>(`/electricity/${id}/tariff/2024/list`, qs.stringify(params));
180
+};
181
+
182
+// 模板管理
183
+export const electricitytmplpage = (params: {}, id: string) => {
184
+  return http.post<Station.Tmpl>(`/electricity/${id}/tmpl/page`, qs.stringify(params));
185
+};
186
+// 模板管理详情
187
+export const electricitytmplpagedetails = (params: {}, id: any, ids: string) => {
188
+  return http.post<Station.Tmpl>(`/electricity/${id}/tmpl/${ids}/detail`, qs.stringify(params));
189
+};
190
+// 电量报表按日
191
+export const reportpowerday = (params: {}) => {
192
+  return http.post<Station.summary>(`/report/power/summary/between/day`, qs.stringify(params));
193
+};
194
+// 电量报表按月份
195
+export const reportpoweryearMonth = (params: {}) => {
196
+  return http.post<Station.summary>(`/report/power/summary/between/yearMonth`, qs.stringify(params));
197
+};
198
+// 电量报表按年
199
+export const reportpoweryear = (params: {}) => {
200
+  return http.post<Station.summary>(`/report/power/summary/between/year`, qs.stringify(params));
201
+};
202
+// 电量报表-单站报表折线图
203
+export const reportsingleStationline = (params: {}, id: any) => {
204
+  return http.post(`/report/power/singleStation/${id}/period/line`, qs.stringify(params));
205
+};
206
+// 电量报表-单站报表原始数据
207
+export const reportsingleStationoriginal = (params: {}, id: any, ids: any) => {
208
+  return http.post(`report/power/singleStation/${id}/period/systemId/${ids}/original`, qs.stringify(params));
209
+};
210
+// 电量报表-单站报表——表格
211
+export const singleStationtable = (params: {}, id: any) => {
212
+  return http.post<Station.realtimepower>(`/report/power/singleStation/${id}/period/table`, qs.stringify(params));
213
+};
214
+// 电量报表-单站_日报表
215
+export const electricitylevelday = (params: {}, id: any) => {
216
+  return http.post<Station.singleStation>(`/report/power/singleStation/${id}/between/day`, qs.stringify(params));
217
+};
218
+// 电量报表-单站_月报表
219
+export const electricitylevelyearMonth = (params: {}, id: any) => {
220
+  return http.post<Station.singleStation>(`/report/power/singleStation/${id}/between/yearMonth`, qs.stringify(params));
221
+};
222
+// 电量报表-单站_年报表
223
+export const electricitylevelyear = (params: {}, id: any) => {
224
+  return http.post<Station.singleStation>(`/report/power/singleStation/${id}/between/year`, qs.stringify(params));
225
+};
226
+// 电量管理
227
+export const stationmanage = (params: {}) => {
228
+  return http.post(`/station/manage/list`, qs.stringify(params));
229
+};
230
+// 故障告警-今日告警
231
+export const todayAlarm = (params: {}) => {
232
+  return http.post<Alarm.today[]>(`/alarm/todayAlarm`, qs.stringify(params));
233
+};
234
+// 故障告警-告警等级
235
+export const postalarmLevel = (params: {}) => {
236
+  return http.post<Alarm.today[]>(`/alarm/alarmLevel`, qs.stringify(params));
237
+};
238
+// 故障告警-设备类型
239
+export const postdeviceClass = (params: {}) => {
240
+  return http.post<Alarm.today[]>(`alarm/deviceClass`, qs.stringify(params));
241
+};
242
+// 故障告警-处理建议
243
+export const posthandlingSugg = (params: {}) => {
244
+  return http.post<Alarm.today[]>(`alarm/handlingSugg`, qs.stringify(params));
245
+};
246
+// 故障告警-数据列表
247
+//
248
+export const postpageInfo = (params: {}) => {
249
+  return http.post<Alarm.today[]>(`alarm/pageInfo`, qs.stringify(params));
250
+};
251
+// 收益报表-汇总_日表
252
+export const incomeday = (params: {}) => {
253
+  return http.post<Station.summary>(`/profit/report/summary/between/day`, qs.stringify(params));
254
+};
255
+// 收益报表-汇总_月表
256
+export const incomeyearMonth = (params: {}) => {
257
+  return http.post<Station.summary>(`/profit/report/summary/between/yearMonth`, qs.stringify(params));
258
+};
259
+// 收益报表-汇总_年表
260
+export const incomeyear = (params: {}) => {
261
+  return http.post<Station.summary>(`/profit/report/summary/between/year`, qs.stringify(params));
262
+};
263
+// 收益报表-汇总_日表
264
+export const singleincomeday = (params: {}, id: any) => {
265
+  return http.post<Station.summary>(`/profit/report/singleStation/${id}/between/day`, qs.stringify(params));
266
+};
267
+// 收益报表-汇总_月表
268
+export const singleincomeyearMonth = (params: {}, id: any) => {
269
+  return http.post<Station.summary>(`/profit/report/singleStation/${id}/between/yearMonth`, qs.stringify(params));
270
+};
271
+// 收益报表-汇总_年表
272
+export const singleincomeyear = (params: {}, id: any) => {
273
+  return http.post<Station.summary>(`/profit/report/singleStation/${id}/between/year`, qs.stringify(params));
274
+};
275
+
276
+// 导出电量报表汇总-按日
277
+export const Summaryexportday = (params: {}) => {
278
+  return http.post<other.Data>(`/report/power/exportday`, qs.stringify(params));
279
+};
280
+// 导出电量报表报表汇总-按月
281
+export const Summaryexportmonth = (params: {}) => {
282
+  return http.post<other.Data>(`/report/power/summaryearmonthEXcel`, qs.stringify(params));
283
+};
284
+// 导出电量报表报表汇总-按年
285
+export const Summaryexportyear = (params: {}) => {
286
+  return http.post<other.Data>(`/report/power/summaryearEXcel`, qs.stringify(params));
287
+};
288
+// 导出电量报表单站-按日
289
+export const betweenbiaoExcel = (params: {}, id: any) => {
290
+  return http.post<other.Data>(`/report/power/singleStation/${id}/betweenbiaoExcel`, qs.stringify(params));
291
+};
292
+// 导出电量报表单站-按日
293
+export const betweenyearMonthExcel = (params: {}, id: any) => {
294
+  return http.post<other.Data>(`/report/power/singleStation/${id}/betweenyearMonthExcel`, qs.stringify(params));
295
+};
296
+// 导出电量报表单站-按日
297
+export const betweenyearExcel = (params: {}, id: any) => {
298
+  return http.post<other.Data>(`/report/power/singleStation/${id}/betweenyearExcel`, qs.stringify(params));
299
+};
300
+// 导出收益报表汇总-按日
301
+export const reportsummarymonthEXcel = (params: {}) => {
302
+  return http.post<other.Data>(`/profit/report/reportsummarymonthEXcel`, qs.stringify(params));
303
+};
304
+// 导出收益报表报表汇总-按月
305
+export const summaryearmonthEXcel = (params: {}) => {
306
+  return http.post<other.Data>(`/report/power/summaryearmonthEXcel`, qs.stringify(params));
307
+};
308
+// 导出收益报表报表汇总-按年
309
+export const reportsummaryyearEXcel = (params: {}) => {
310
+  return http.post<other.Data>(`/profit/report/reportsummaryyearEXcel`, qs.stringify(params));
311
+};
312
+// 导出收益报表单站-按日
313
+export const reportsingleExcel = (params: {}, id: any) => {
314
+  return http.post<other.Data>(`/profit/report/${id}/reportsingleExcel`, qs.stringify(params));
315
+};
316
+// 导出收益报表单站-按月
317
+export const singlemonthExcel = (params: {}, id: any) => {
318
+  return http.post<other.Data>(`/profit/report/${id}/singlemonthExcel`, qs.stringify(params));
319
+};
320
+// 导出收益报表单站-按年
321
+export const singleyeaeExcel = (params: {}, id: any) => {
322
+  return http.post<other.Data>(`/profit/report/${id}/singleyeaeExcel`, qs.stringify(params));
323
+};
324
+// 查询用户列表
325
+export const platformuserlist = (params: {}) => {
326
+  return http.post(`/platform/user/list`, qs.stringify(params));
327
+};
328
+// 加载部门列表树
329
+export const gettreeData = () => {
330
+  return http.get<other.tableData1[]>(`/platform/dept/treeData`);
331
+};
332
+//  查询岗位列表
333
+export const platformlist = (params: {}) => {
334
+  return http.post(`/platform/shu/getUserInfoWithRolesAndPosts`, qs.stringify(params));
335
+};
336
+// 用户管理新增保存接口
337
+export const platformadd = (params: {}) => {
338
+  return http.post(`/platform/user/add`, qs.stringify(params));
339
+};
340
+// 用户管理编辑保存接口
341
+export const platformedit = (params: {}) => {
342
+  return http.post(`/platform/user/edit`, qs.stringify(params));
343
+};
344
+// 用户管理修改回显接口
345
+export const yonghuedit = (id: any) => {
346
+  return http.get(`/platform/shu/yonghuedit/${id}`);
347
+};
348
+// 用户管理修改回显密码接口
349
+export const getresetPwd = (id: any) => {
350
+  return http.post(`/platform/shu/resetPwda/${id}`);
351
+};
352
+// 用户管理重置密码保存
353
+export const resetPwd = (params: {}) => {
354
+  return http.post(`/platform/user/resetPwd`, qs.stringify(params));
355
+};
356
+// 删除用户信息
357
+export const userremove = (params: {}) => {
358
+  return http.post(`/platform/user/remove`, qs.stringify(params));
359
+};
360
+// 角色查询列表
361
+export const platformrolelist = (params: {}) => {
362
+  return http.post(`/platform/role/list`, qs.stringify(params));
363
+};
364
+// 角色管理新增保存接口
365
+export const platformroleadd = (params: {}) => {
366
+  return http.post(`/platform/role/add`, qs.stringify(params));
367
+};
368
+// 角色管理编辑保存接口
369
+export const platformroleedit = (params: {}) => {
370
+  return http.post(`/platform/role/edit`, qs.stringify(params));
371
+};
372
+// 删除用户信息
373
+export const platformroleremove = (params: {}) => {
374
+  return http.post(`/platform/role/remove`, qs.stringify(params));
375
+};
376
+// 角色管理修改回显密码接口
377
+export const platformshuRoleedit = (id: any) => {
378
+  return http.get(`/platform/shu/Roleedit/${id}`);
379
+};
380
+// 菜单查询列表
381
+export const platformmenulist = (params: {}) => {
382
+  return http.post<other.tableData1[]>(`/platform/menu/list`, qs.stringify(params));
383
+};
384
+// 部门管理列表
385
+export const platformdeptlist = (params: {}) => {
386
+  return http.post<other.tableData1[]>(`/platform/dept/list`, qs.stringify(params));
387
+};
388
+
389
+// 部门管理新增保存接口
390
+export const platformdeptadd = (params: {}) => {
391
+  return http.post(`/platform/dept/add`, qs.stringify(params));
392
+};
393
+// 用户管理修改回显接口
394
+export const platformdeptendit = (id: any) => {
395
+  return http.get(`/platform/shu/Deptedit/${id}`);
396
+};
397
+// 部门管理编辑保存接口
398
+export const platformdeptedit = (params: {}) => {
399
+  return http.post(`/platform/dept/edit`, qs.stringify(params));
400
+}; // 删除部门信息
401
+export const platformdeptremove = (params: { ids: any }) => {
402
+  return http.get(`/platform/dept/remove/${params.ids}`);
403
+};
404
+// 部门管理列表
405
+export const platformpostlist = (params: {}) => {
406
+  return http.post(`/platform/post/list`, qs.stringify(params));
407
+};
408
+// 删除部门信息
409
+export const platformpostremove = (params: {}) => {
410
+  return http.post(`/platform/post/remove`, qs.stringify(params));
411
+};
412
+// 岗位管理新增保存接口
413
+export const platformpostadd = (params: {}) => {
414
+  return http.post(`/platform/post/add`, qs.stringify(params));
415
+};
416
+// 岗位管理编辑保存接口
417
+export const platformpostedit = (params: {}) => {
418
+  return http.post(`/platform/post/edit`, qs.stringify(params));
419
+};
420
+// 修改岗位-信息回显
421
+export const platformshupostedit = (id: any) => {
422
+  return http.get(`/platform/shu/postedit/${id}`);
423
+};
424
+// 权限
425
+// 加载角色菜单列表树编辑
426
+export const roleMenuTreeDataadd = () => {
427
+  return http.get<other.tableData1[]>(`/platform/menu/roleMenuTreeData`);
428
+};
429
+// 加载角色菜单列表树
430
+export const roleMenuTreeData = (id: any) => {
431
+  return http.get<other.tableData1[]>(`/platform/menu/roleMenuTreeData?id=${id}`);
432
+};
433
+// 授权电站给用户
434
+export const savetenantpower = (id: any, params: {}) => {
435
+  return http.post(`/system/tenantpower/savetenantpower/${id}`, qs.stringify(params));
436
+};
437
+// 电站分配回显
438
+export const selectPowerstation = (id: any) => {
439
+  return http.post(`/system/tenantpower/selectPowerstation/${id}`);
440
+};
441
+// 查询用户被分配到的电站
442
+export const selectTenantPower = (params: {}) => {
443
+  return http.post(`/system/tenantpower/selectTenantPowerId`, qs.stringify(params));
444
+};
445
+// 取消用户下所有电站关联
446
+export const deletetenatId = (params: {}) => {
447
+  return http.post(`/system/tenantpower/deletetenatId`, qs.stringify(params));
448
+};
449
+// 密码回显
450
+export const selectaccountNumber = (params: {}) => {
451
+  return http.post(`/platform/user/selectaccountNumber`, qs.stringify(params));
452
+};
453
+
454
+// 通信配置查询出所有的配置数据
455
+export const selectAllURL = (params: {}) => {
456
+  return http.post(`/platform/shu/selectAll`, qs.stringify(params));
457
+};
458
+// 修改TDengine与Mysql的连接
459
+export const updateMysqlTDengineURL = (params: {}) => {
460
+  return http.post(`/platform/shu/updateMysqlTDengine`, qs.stringify(params));
461
+};
462
+// 查询全部ems
463
+export const selectemssytemALLURL = (params: {}) => {
464
+  return http.post(`/station/manage/selectemssytemALL`, qs.stringify(params));
465
+};
466
+// 新增保存-电站信息-设备信息
467
+export const insertpowerURL = (params: {}) => {
468
+  return http.post(`/station/manage/insertpower`, qs.stringify(params));
469
+};

+ 154
- 0
src/api/index.ts Целия файл

@@ -0,0 +1,154 @@
1
+import axios, { AxiosInstance, AxiosError, AxiosRequestConfig, InternalAxiosRequestConfig, AxiosResponse } from "axios";
2
+import { showFullScreenLoading, tryHideFullScreenLoading } from "@/components/Loading/fullScreen";
3
+import { LOGIN_URL } from "@/config";
4
+import { ElMessage } from "element-plus";
5
+import { ResultData } from "@/api/interface";
6
+import { ResultEnum } from "@/enums/httpEnum";
7
+import { checkStatus } from "./helper/checkStatus";
8
+import { AxiosCanceler } from "./helper/axiosCancel";
9
+// import { useUserStore } from "@/stores/modules/user";
10
+import router from "@/routers";
11
+
12
+export interface CustomAxiosRequestConfig extends InternalAxiosRequestConfig {
13
+  loading?: boolean;
14
+  cancel?: boolean;
15
+}
16
+// console.log(window.location.href.match(/(^[^/]*:\/\/[^/]+)/));
17
+// console.log(import.meta.env.VITE_USER_NODE_ENV);
18
+let vue_URL = "";
19
+if (import.meta.env.VITE_USER_NODE_ENV == "development") {
20
+  vue_URL = import.meta.env.VITE_API_URL;
21
+} else {
22
+  const match = window.location.href.match(/(^[^/]*:\/\/[^/]+)/);
23
+  if (match) {
24
+    vue_URL = match[1];
25
+    // console.log(match[1]); // 输出:http://localhost:8848
26
+  } else {
27
+    // console.log("未找到匹配的字符串");
28
+    vue_URL = import.meta.env.VITE_API_URL;
29
+  }
30
+}
31
+const config = {
32
+  // 默认地址请求地址,可在 .env.** 文件中修改
33
+  // baseURL: import.meta.env.VITE_API_URL,
34
+  baseURL: vue_URL,
35
+
36
+  // 设置超时时间
37
+  timeout: ResultEnum.TIMEOUT as number,
38
+  // 跨域时候允许携带凭证
39
+  withCredentials: true
40
+};
41
+
42
+const axiosCanceler = new AxiosCanceler();
43
+
44
+class RequestHttp {
45
+  service: AxiosInstance;
46
+  public constructor(config: AxiosRequestConfig) {
47
+    // instantiation
48
+    this.service = axios.create(config);
49
+
50
+    /**
51
+     * @description 请求拦截器
52
+     * 客户端发送请求 -> [请求拦截器] -> 服务器
53
+     * token校验(JWT) : 接受服务器返回的 token,存储到 vuex/pinia/本地储存当中
54
+     */
55
+    this.service.interceptors.request.use(
56
+      (config: CustomAxiosRequestConfig) => {
57
+        // const userStore = useUserStore();
58
+        // 重复请求不需要取消,在 api 服务中通过指定的第三个参数: { cancel: false } 来控制
59
+        config.cancel ?? (config.cancel = true);
60
+        config.cancel && axiosCanceler.addPending(config);
61
+        // 当前请求不需要显示 loading,在 api 服务中通过指定的第三个参数: { loading: false } 来控制
62
+        config.loading ?? (config.loading = true);
63
+        config.loading && showFullScreenLoading();
64
+        // config.headers.set({
65
+        //   "Content-Type": "multipart/form-data"
66
+        // });
67
+        if (config.headers && typeof config.headers.set === "function") {
68
+          // config.headers.set("x-access-token", userStore.token);
69
+          // config.headers.set(
70
+          //   "Cookie",
71
+          //   "SECKEY_ABVK=yzv+fRRRekBvVNrnVlQZv0los5i9tWT7/GYgPAgu884%3D; BMAP_SECKEY=yzv-fRRRekBvVNrnVlQZv2Guui2pW9C79nYaUUFkI6HcEGOO1i70kkCS7E4MlMHKL_cRl3cFeNBvx5NWIX7dDXYkhI77iZtdc5SYW-OwC5dUHv-nMCrN1CjB_61m-b-ZQhKFDokV8rhJZR9Pxhea7EahAHKq5bXPwLaKaPVAkkSluICvD9iloe2h7po2dYwnzuDCbfgG42YScxs_6kx_Jg"
72
+          // );
73
+        }
74
+        return config;
75
+      },
76
+      (error: AxiosError) => {
77
+        return Promise.reject(error);
78
+      }
79
+    );
80
+
81
+    /**
82
+     * @description 响应拦截器
83
+     *  服务器换返回信息 -> [拦截统一处理] -> 客户端JS获取到信息
84
+     */
85
+    this.service.interceptors.response.use(
86
+      (response: AxiosResponse) => {
87
+        const { data, config } = response;
88
+        // const userStore = useUserStore();
89
+        axiosCanceler.removePending(config);
90
+        tryHideFullScreenLoading();
91
+        // 登录失效
92
+        if (data.code == ResultEnum.NOTLOGGEDIN) {
93
+          // userStore.setToken("");
94
+          document.cookie = "rememberMe=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/user/;";
95
+          router.replace(LOGIN_URL);
96
+          ElMessage.error(data.msg);
97
+          return Promise.reject(data);
98
+        }
99
+        if (data.code == ResultEnum.OVERDUE) {
100
+          // userStore.setToken("");
101
+          document.cookie = "rememberMe=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/user/;";
102
+          router.replace(LOGIN_URL);
103
+          ElMessage.error(data.msg);
104
+          return Promise.reject(data);
105
+        }
106
+        // 全局错误信息拦截(防止下载文件的时候返回数据流,没有 code 直接报错)
107
+        if (data.code && data.code !== ResultEnum.SUCCESS) {
108
+          ElMessage.error(data.msg);
109
+
110
+          return Promise.reject(data);
111
+        }
112
+        // 成功请求(在页面上除非特殊情况,否则不用处理失败逻辑)
113
+        return data;
114
+      },
115
+      async (error: AxiosError) => {
116
+        // console.log(error);
117
+
118
+        const { response } = error;
119
+        tryHideFullScreenLoading();
120
+        document.cookie = "rememberMe=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/user/;";
121
+        router.replace(LOGIN_URL);
122
+        // 请求超时 && 网络错误单独判断,没有 response
123
+        if (error.message.indexOf("timeout") !== -1) ElMessage.error("请求超时!请您稍后重试");
124
+        if (error.message.indexOf("Network Error") !== -1) ElMessage.error("网络错误!请您稍后重试");
125
+        // 根据服务器响应的错误状态码,做不同的处理
126
+        if (response) checkStatus(response.status);
127
+        // 服务器结果都没有返回(可能服务器错误可能客户端断网),断网处理:可以跳转到断网页面
128
+        if (!window.navigator.onLine) router.replace("/500");
129
+
130
+        return Promise.reject(error);
131
+      }
132
+    );
133
+  }
134
+  /**
135
+   * @description 常用请求方法封装
136
+   */
137
+  get<T>(url: string, params?: object, _object = {}): Promise<ResultData<T>> {
138
+    return this.service.get(url, { params, ..._object });
139
+  }
140
+  post<T>(url: string, params?: object | string, _object = {}): Promise<ResultData<T>> {
141
+    return this.service.post(url, params, _object);
142
+  }
143
+  put<T>(url: string, params?: object, _object = {}): Promise<ResultData<T>> {
144
+    return this.service.put(url, params, _object);
145
+  }
146
+  delete<T>(url: string, params?: any, _object = {}): Promise<ResultData<T>> {
147
+    return this.service.delete(url, { params, ..._object });
148
+  }
149
+  download(url: string, params?: object, _object = {}): Promise<BlobPart> {
150
+    return this.service.post(url, params, { ..._object, responseType: "blob" });
151
+  }
152
+}
153
+
154
+export default new RequestHttp(config);

+ 420
- 0
src/api/interface/index.ts Целия файл

@@ -0,0 +1,420 @@
1
+// 请求响应参数(不包含data)
2
+export interface Result {
3
+  code: string;
4
+  msg: string;
5
+}
6
+
7
+// 请求响应参数(包含data)
8
+export interface ResultData<T = any> extends Result {
9
+  data: T;
10
+}
11
+
12
+// 分页响应参数
13
+export interface ResPage<T> {
14
+  list: T[];
15
+  pageNum: number;
16
+  pageSize: number;
17
+  total: number;
18
+}
19
+
20
+// 分页请求参数
21
+export interface ReqPage {
22
+  pageNum: number;
23
+  pageSize: number;
24
+}
25
+
26
+// 文件上传模块
27
+export namespace Upload {
28
+  export interface ResFileUrl {
29
+    fileUrl: string;
30
+  }
31
+}
32
+
33
+// 登录模块
34
+export namespace Login {
35
+  export interface ReqLoginForm {
36
+    username: string;
37
+    password: string;
38
+    tenantNo: string;
39
+    rememberMe: boolean;
40
+  }
41
+  export interface ResLogin {
42
+    access_token: string;
43
+  }
44
+  export interface ResAuthButtons {
45
+    [key: string]: string[];
46
+  }
47
+}
48
+
49
+// 用户管理模块
50
+export namespace User {
51
+  export interface ReqUserParams extends ReqPage {
52
+    username: string;
53
+    gender: number;
54
+    idCard: string;
55
+    email: string;
56
+    address: string;
57
+    createTime: string[];
58
+    status: number;
59
+  }
60
+  export interface ResUserList {
61
+    id: string;
62
+    username: string;
63
+    gender: number;
64
+    user: { detail: { age: number } };
65
+    idCard: string;
66
+    email: string;
67
+    address: string;
68
+    createTime: string;
69
+    status: number;
70
+    avatar: string;
71
+    photo: any[];
72
+    children?: ResUserList[];
73
+  }
74
+  export interface ResStatus {
75
+    userLabel: string;
76
+    userValue: number;
77
+  }
78
+  export interface ResGender {
79
+    genderLabel: string;
80
+    genderValue: number;
81
+  }
82
+  export interface ResDepartment {
83
+    id: string;
84
+    name: string;
85
+    children?: ResDepartment[];
86
+  }
87
+  export interface ResRole {
88
+    id: string;
89
+    name: string;
90
+    children?: ResDepartment[];
91
+  }
92
+}
93
+// 获取站点列表
94
+export namespace Station {
95
+  export interface todo {
96
+    energyMgrMode: number;
97
+    id: string;
98
+    priceCfgMode: number;
99
+    sortNo: number;
100
+    stationName: string;
101
+    timezone: string;
102
+  }
103
+  // 电价配置
104
+  export interface electricity {
105
+    currencyUnit: null;
106
+    dataSource: number;
107
+    imonth: number;
108
+    isBinding: number;
109
+    iyear: number;
110
+    priceCfgMode: number;
111
+    priceMeasureUnit: null;
112
+    staEleTariffScheduleList: any[];
113
+    stationTmplId: string;
114
+    tmplId: null;
115
+    tmplName: string;
116
+  }
117
+  // 模板管理表格数据
118
+  export interface Tmpl {
119
+    data: TmplData[];
120
+    empty: boolean;
121
+    pn: number;
122
+    size: number;
123
+    startNo: number;
124
+    total: number;
125
+    totalPage: number;
126
+  }
127
+
128
+  export interface TmplData {
129
+    createTime: string;
130
+    createUserName: string;
131
+    id: string;
132
+    isUsing: number;
133
+    name: string;
134
+    refCount: number;
135
+    tags: string;
136
+    tagsArray: any[];
137
+  }
138
+  // 单站查询二级接口
139
+  export interface emsSystem {
140
+    emsDeviceId: string;
141
+    emsSystemId: string;
142
+    id: string;
143
+    name: string;
144
+    nominalEnergyCap: null;
145
+    ratedPower: null;
146
+    sysBindStatus: null;
147
+  }
148
+  // 设备监控 tap标签
149
+  export interface deviceList {
150
+    deviceClass: number;
151
+    deviceClassName: string;
152
+    devices: deviceLists[];
153
+  }
154
+  // 设备监控 tap标签
155
+  export interface deviceLists {
156
+    child: [];
157
+    deviceName: string;
158
+    id: string;
159
+  }
160
+  // 收益统计图
161
+  export interface profitday {
162
+    profit: number;
163
+    stationName: string;
164
+  }
165
+  // 收益统计图
166
+  export interface between {
167
+    profit: string;
168
+    ymd: string;
169
+  }
170
+  // 充放电统计图
171
+  export interface power {
172
+    chargeTotal: number;
173
+    dischargeTotal: number;
174
+    ymd: string;
175
+  }
176
+  // 故障告警
177
+  export interface multiStation {
178
+    cnt: string;
179
+    code: null;
180
+    name: string;
181
+  }
182
+  // 电量报表
183
+  export interface summary {
184
+    list: summarylist[];
185
+    total: summarytotal;
186
+  }
187
+  export interface summarylist {
188
+    chargePeak: number;
189
+    chargeSharp: number;
190
+    chargeShoulder: number;
191
+    chargeTotal: number;
192
+    chargeValley: number;
193
+    dischargePeak: number;
194
+    dischargeSharp: number;
195
+    dischargeShoulder: number;
196
+    dischargeTotal: number;
197
+    dischargeValley: number;
198
+    overallEfficiency: number;
199
+    selfUse: null;
200
+    stationName: string;
201
+  }
202
+  export interface summarytotal {
203
+    year: string;
204
+    ym: string;
205
+    ymd: string;
206
+    chargePeak: number;
207
+    chargeSharp: number;
208
+    chargeShoulder: number;
209
+    chargeTotal: number;
210
+    chargeValley: number;
211
+    dischargePeak: number;
212
+    dischargeSharp: number;
213
+    dischargeShoulder: number;
214
+    dischargeTotal: number;
215
+    dischargeValley: number;
216
+    overallEfficiency: number;
217
+    selfUse: null;
218
+    stationName: string;
219
+  }
220
+  // 电量报表-单站_日报表月报表
221
+  export interface singleStation {
222
+    list: singleStationlist[];
223
+    total: singleStationtotal;
224
+  }
225
+  export interface singleStationlist {
226
+    chargePeak: number;
227
+    chargeSharp: number;
228
+    chargeShoulder: number;
229
+    chargeTotal: number;
230
+    chargeValley: number;
231
+    dischargePeak: number;
232
+    dischargeSharp: number;
233
+    dischargeShoulder: number;
234
+    dischargeTotal: number;
235
+    dischargeValley: number;
236
+    overallEfficiency: number;
237
+    selfUse: number;
238
+    year: null;
239
+  }
240
+  export interface singleStationtotal {
241
+    ym: string;
242
+    ymd: string;
243
+    chargePeak: number;
244
+    chargeSharp: number;
245
+    chargeShoulder: number;
246
+    chargeTotal: number;
247
+    chargeValley: number;
248
+    dischargePeak: number;
249
+    dischargeSharp: number;
250
+    dischargeShoulder: number;
251
+    dischargeTotal: number;
252
+    dischargeValley: number;
253
+    overallEfficiency: number;
254
+    selfUse: number;
255
+    year: string;
256
+  }
257
+  // 收益统计
258
+  export interface profitbetween {
259
+    avgEfficiency: number;
260
+    list: [
261
+      {
262
+        profit: number;
263
+        ymd: string;
264
+      }
265
+    ];
266
+  }
267
+  // 综合效率
268
+  export interface efficiency {
269
+    avgEfficiency: number;
270
+    list: [
271
+      {
272
+        overallEfficiency: number;
273
+        ymd: string;
274
+      }
275
+    ];
276
+  }
277
+  // 放电达成率
278
+  export interface exportKwh {
279
+    avgDischargeCompleteRate: number;
280
+    list: [
281
+      {
282
+        dischargeCompletionRate: number;
283
+        ymd: string;
284
+      }
285
+    ];
286
+  }
287
+  // 站点系统 单站实时数据
288
+  export interface realtimeinfo {
289
+    accumulativeExportKwh: number;
290
+    accumulativeImportKwh: number;
291
+    dayExportKwh: number;
292
+    dayImportKwh: number;
293
+    lastDataTime: string;
294
+    onlineStatus: number;
295
+    soc: number;
296
+  }
297
+  // 站点系统 实时运行背景图
298
+  export interface operation {
299
+    endTime: string;
300
+    periodType: number;
301
+    startTime: string;
302
+  }
303
+  // 站点系统 功率趋势图
304
+  export interface powertrend {
305
+    gridPower: [];
306
+    storedPower: [];
307
+    totalActivePower: string;
308
+    ts: string;
309
+  }
310
+  // 站点系统 告警状态
311
+  export interface systemdevice {
312
+    alarmStatus: number;
313
+    deviceName: string;
314
+    emsCommStatus: number;
315
+  }
316
+  // 站点系统 实时电量收益
317
+  export interface realtimepower {
318
+    list: realtimepowerlist[];
319
+    total: realtimepowertotal;
320
+  }
321
+  // 使时运行-数据类型
322
+  export interface datatype {
323
+    batteryCluster: [
324
+      {
325
+        deviceId: string;
326
+        deviceName: string;
327
+        deviceType: number;
328
+      }
329
+    ];
330
+    batteryStack: [
331
+      {
332
+        deviceId: string;
333
+        deviceName: string;
334
+        deviceType: number;
335
+      }
336
+    ];
337
+    electricMeter: [
338
+      {
339
+        deviceId: string;
340
+        deviceName: string;
341
+        deviceType: number;
342
+      }
343
+    ];
344
+    pcs: [
345
+      {
346
+        deviceId: string;
347
+        deviceName: string;
348
+        deviceType: number;
349
+      }
350
+    ];
351
+  }
352
+  export interface realtimepowerlist {
353
+    chargeKwh: number;
354
+    chargePeakKwh: number;
355
+    chargeSharpKwh: number;
356
+    chargeShoulderKwh: number;
357
+    chargeValleyKwh: number;
358
+    dischargeKwh: number;
359
+    dischargePeakKwh: number;
360
+    dischargeSharpKwh: number;
361
+    dischargeShoulderKwh: number;
362
+    dischargeValleyKwh: number;
363
+    profit: number;
364
+    ymdHour: string;
365
+  }
366
+  export interface realtimepowertotal {
367
+    chargeKwh: number;
368
+    chargePeakKwh: number;
369
+    chargeSharpKwh: number;
370
+    chargeShoulderKwh: number;
371
+    chargeValleyKwh: number;
372
+    dischargeKwh: number;
373
+    dischargePeakKwh: number;
374
+    dischargeSharpKwh: number;
375
+    dischargeShoulderKwh: number;
376
+    dischargeValleyKwh: number;
377
+    profit: number;
378
+    ymdHour: string;
379
+  }
380
+  // 电量报表-单站报表柱状图
381
+}
382
+// 故障告警
383
+export namespace Alarm {
384
+  export interface today {
385
+    code: any;
386
+    todayId: any;
387
+    daviceClass: any;
388
+    cnt: string;
389
+    name: string;
390
+  }
391
+}
392
+export namespace other {
393
+  // 上传
394
+  export interface Data {
395
+    msg: string;
396
+  }
397
+  // 菜单树形
398
+  export interface tableData1 {
399
+    checked: boolean;
400
+    children: tableData1[];
401
+    createBy: string;
402
+    createTime: string;
403
+    icon: string;
404
+    id: string;
405
+    pId: string;
406
+    isRefresh: string;
407
+    menuName: string;
408
+    menuType: string;
409
+    orderNum: string;
410
+    parentId: string;
411
+    parentName: string | null;
412
+    perms: string;
413
+    remark: string | number | null;
414
+    target: string;
415
+    updateBy: string | number | null;
416
+    updateTime: string | number | null;
417
+    url: string;
418
+    visible: string;
419
+  }
420
+}

+ 47
- 0
src/api/modules/login.ts Целия файл

@@ -0,0 +1,47 @@
1
+import { Login } from "@/api/interface/index";
2
+// import { PORT1 } from "@/api/config/servicePort";
3
+// import authMenuList from "@/assets/json/authMenuList.json";
4
+import authButtonList from "@/assets/json/authButtonList.json";
5
+import http from "@/api";
6
+import qs from "qs";
7
+
8
+/**
9
+ * @name 登录模块
10
+ */
11
+// 用户登录
12
+// export const loginApi = (params: Login.ReqLoginForm) => {
13
+//   return http.post<Login.ResLogin>(`/login`, params, { loading: false }); // 正常 post json 请求  ==>  application/json
14
+//   // return http.post<Login.ResLogin>(PORT1 + `/login`, params, { loading: false }); // 控制当前请求不显示 loading
15
+//   // return http.post<Login.ResLogin>(PORT1 + `/login`, {}, { params }); // post 请求携带 query 参数  ==>  ?username=admin&password=123456
16
+//   // return http.post<Login.ResLogin>(PORT1 + `/login`, qs.stringify(params)); // post 请求携带表单参数  ==>  application/x-www-form-urlencoded
17
+//   // return http.get<Login.ResLogin>(PORT1 + `/login?${qs.stringify(params, { arrayFormat: "repeat" })}`); // get 请求可以携带数组等复杂参数
18
+// };
19
+export const loginApi = (params: Login.ReqLoginForm) => {
20
+  return http.post<Login.ResLogin>(`/platform/login`, qs.stringify(params), { loading: false }); // 正常 post json 请求  ==>  application/json
21
+};
22
+// 登录
23
+export const userloginApi = (params: Login.ReqLoginForm) => {
24
+  return http.post<Login.ResLogin>(`/saas/login`, qs.stringify(params), { loading: false }); // 正常 post json 请求  ==>  application/json
25
+};
26
+// 重置密码
27
+export const newloginApi = (params: {}) => {
28
+  return http.post(`/platform/user/resetPwd`, qs.stringify(params), { loading: false }); // 正常 post json 请求  ==>  application/json
29
+};
30
+// 获取菜单列表
31
+export const getAuthMenuListApi = () => {
32
+  return http.get<Menu.MenuOptions[]>(`/platform/menu/linke/Menu`, {}, { loading: false });
33
+  // 如果想让菜单变为本地数据,注释上一行代码,并引入本地 authMenuList.json 数据
34
+  // return authMenuList;
35
+};
36
+
37
+// 获取按钮权限
38
+export const getAuthButtonListApi = () => {
39
+  // return http.get<Login.ResAuthButtons>(PORT1 + `/auth/buttons`, {}, { loading: false });
40
+  // 如果想让按钮权限变为本地数据,注释上一行代码,并引入本地 authButtonList.json 数据
41
+  return authButtonList;
42
+};
43
+
44
+// 用户退出登录
45
+export const logoutApi = () => {
46
+  return http.post(`/logout`);
47
+};

+ 16
- 0
src/api/modules/upload.ts Целия файл

@@ -0,0 +1,16 @@
1
+import { Upload } from "@/api/interface/index";
2
+import { PORT1 } from "@/api/config/servicePort";
3
+import http from "@/api";
4
+
5
+/**
6
+ * @name 文件上传模块
7
+ */
8
+// 图片上传
9
+export const uploadImg = (params: FormData) => {
10
+  return http.post<Upload.ResFileUrl>(PORT1 + `/file/upload/img`, params, { cancel: false });
11
+};
12
+
13
+// 视频上传
14
+export const uploadVideo = (params: FormData) => {
15
+  return http.post<Upload.ResFileUrl>(PORT1 + `/file/upload/video`, params, { cancel: false });
16
+};

+ 21
- 0
src/api/modules/user.ts Целия файл

@@ -0,0 +1,21 @@
1
+// import { ResPage, User } from "@/api/interface/index";
2
+// import { PORT1 } from "@/api/config/servicePort";
3
+import http from "@/api";
4
+
5
+/**
6
+ * @name 用户管理模块
7
+ */
8
+// 获取用户列表
9
+// export const getUserList = (params: User.ReqUserParams) => {
10
+//   return http.post<ResPage<User.ResUserList>>(PORT1 + `/user/list`, params);
11
+// };
12
+
13
+// // 切换用户状态
14
+export const changeUserStatus = (params: { id: string; status: number }) => {
15
+  return http.post(`/upload`, params);
16
+};
17
+
18
+// 获取用户性别字典
19
+// export const getUserGender = () => {
20
+//   return http.get<User.ResGender[]>(PORT1 + `/api/site`);
21
+// };

Двоични данни
src/assets/fonts/DIN.otf Целия файл


Двоични данни
src/assets/fonts/MetroDF.ttf Целия файл


Двоични данни
src/assets/fonts/YouSheBiaoTiHei.ttf Целия файл


+ 14
- 0
src/assets/fonts/font.scss Целия файл

@@ -0,0 +1,14 @@
1
+@font-face {
2
+  font-family: YouSheBiaoTiHei;
3
+  src: url("./YouSheBiaoTiHei.ttf");
4
+}
5
+
6
+@font-face {
7
+  font-family: MetroDF;
8
+  src: url("./MetroDF.ttf");
9
+}
10
+
11
+@font-face {
12
+  font-family: DIN;
13
+  src: url("./DIN.Otf");
14
+}

+ 48
- 0
src/assets/iconfont/iconfont.scss Целия файл

@@ -0,0 +1,48 @@
1
+@font-face {
2
+  font-family: iconfont; /* Project id 2667653 */
3
+  src: url("iconfont.ttf?t=1694681005434") format("truetype");
4
+}
5
+.iconfont {
6
+  font-family: iconfont !important;
7
+  font-size: 20px;
8
+  font-style: normal;
9
+  -webkit-font-smoothing: antialiased;
10
+  -moz-osx-font-smoothing: grayscale;
11
+  cursor: pointer;
12
+}
13
+.icon-yiwen::before {
14
+  font-size: 15px;
15
+  content: "\e693";
16
+}
17
+.icon-xiala::before {
18
+  content: "\e62b";
19
+}
20
+.icon-tuichu::before {
21
+  content: "\e645";
22
+}
23
+.icon-xiaoxi::before {
24
+  font-size: 21.2px;
25
+  content: "\e61f";
26
+}
27
+.icon-zhuti::before {
28
+  font-size: 22.4px;
29
+  content: "\e638";
30
+}
31
+.icon-sousuo::before {
32
+  content: "\e611";
33
+}
34
+.icon-contentright::before {
35
+  content: "\e8c9";
36
+}
37
+.icon-contentleft::before {
38
+  content: "\e8ca";
39
+}
40
+.icon-fangda::before {
41
+  content: "\e826";
42
+}
43
+.icon-suoxiao::before {
44
+  content: "\e641";
45
+}
46
+.icon-zhongyingwen::before {
47
+  content: "\e8cb";
48
+}

Двоични данни
src/assets/iconfont/iconfont.ttf Целия файл


+ 1
- 0
src/assets/icons/xianxingdaoyu.svg Целия файл

@@ -0,0 +1 @@
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 class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M574 342.8m-38.3 0a38.3 38.3 0 1 0 76.6 0 38.3 38.3 0 1 0-76.6 0Z" fill="#F2B843" /><path d="M627 697c15.2-20.7 45.3-294-45-383.3-3-6.1-0.4-13.5 5.7-16.5 6.2-3 13.5-0.5 16.5 5.7C689.8 370.2 719.9 573 705.1 697H627z" fill="#EA800C" /><path d="M617.8 307.4m-38.3 0a38.3 38.3 0 1 0 76.6 0 38.3 38.3 0 1 0-76.6 0Z" fill="#F2B843" /><path d="M608 272.5L461 502.8c-33.6-47.5-37.2-112.5-3.9-164.6 33.2-52.1 93.7-76.2 150.9-65.7z" fill="#3DC38A" /><path d="M742.5 132.3L569.9 299.8c-19.2-47.5-9.1-103.9 29.9-141.8 39.1-37.9 95.8-46.3 142.7-25.7z" fill="#2F9B77" /><path d="M608.7 289.2l-239.6 21.1c15.1-49 58.5-86.4 112.7-91.1 54.2-4.8 103.5 24.4 126.9 70z" fill="#2F9B77" /><path d="M594.7 269.9L408.5 168.4c35-28.6 85.2-34.8 127.3-11.9 42.1 23 64 68.6 58.9 113.4z" fill="#3DC38A" /><path d="M825.5 331.8l-271.4-31.4c28-51 84.9-82.7 146.3-75.6 61.3 7 109.5 51 125.1 107z" fill="#3DC38A" /><path d="M75.3 868.9c0-86.5 104.3-173 233-173s233 86.5 233 173h-466z" fill="#2F9B77" /><path d="M938.2 868.9c0-116.2-130.9-232.3-292.3-232.3S353.5 752.7 353.5 868.9h584.7z" fill="#3DC38A" /><path d="M858.9 701.5c-28.1-23.1-60.4-41.4-95.9-54.3-14.5-5.3-29.3-9.5-44.3-12.8 0.2-51.3-5.5-106.3-16.2-155.9-11.9-54.8-29.5-101.6-51.2-136.3 5.6-5.3 9.7-11.8 12.2-19.1l160.8 18.6c0.4 0 0.8 0.1 1.2 0.1 2.9 0 5.7-1.3 7.6-3.5 2.2-2.5 2.9-6 2-9.2-8.3-29.8-25.1-56.3-48.5-76.7-24-20.9-53.5-33.9-85.1-37.5-9.7-1.1-19.3-1.3-28.9-0.7l76.8-74.6c2.4-2.3 3.5-5.7 2.9-8.9-0.6-3.3-2.8-6-5.8-7.4-52.3-23-112.6-12.1-153.7 27.7-7.2 7-13.6 14.7-19.1 23.1-9.4-10.5-20.6-19.4-33.1-26.2-44.7-24.3-99-19.2-138.4 12.9-2.6 2.1-3.9 5.4-3.6 8.7s2.2 6.3 5.2 7.9l62.5 34c-50.2 9.8-91.2 46.2-106.6 96-1 3.2-0.3 6.6 1.8 9.2 1.9 2.4 4.8 3.7 7.8 3.7h0.9l94.5-8.3c-5.8 6.4-11 13.3-15.8 20.8-17.2 26.9-25.7 57.9-24.7 89.7 1 31 11 60.8 28.9 86 1.9 2.7 4.9 4.2 8.2 4.2h0.2c3.3-0.1 6.4-1.8 8.2-4.6L549 383.9c7.5 4.6 16.1 7.1 25.2 7.1 13.4 0 25.9-5.5 34.8-14.7 27.2 70.9 29.2 175.3 21.8 250.6-34.9 1.5-69.1 8.3-101.8 20.2-35.5 12.9-67.8 31.2-95.9 54.3-3.2 2.6-6.3 5.3-9.4 8.1-35.7-15.5-75.4-23.6-115.1-23.6-63.1 0-123.8 19.9-170.9 56.1-45.8 35.3-72.1 81.5-72.1 126.9 0 5.5 4.5 10 10 10h862.9c5.5 0 10-4.5 10-10-0.3-59.7-32.8-120.7-89.6-167.4z m-226.2-370c-3.3 2.1-7 3.4-10.9 3.9-1-6.4-3.2-12.5-6.5-17.9l27.6 3.2c-2.3 4.4-5.8 8.1-10.2 10.8z m66.6-96.8c27.6 3.2 53.3 14.5 74.3 32.7 16.6 14.5 29.4 32.4 37.5 52.6l-152.7-17.7c-0.4-0.1-0.8-0.2-1.2-0.2-0.4 0-0.8-0.1-1.2-0.1l-65.3-7.6c-1-0.3-2-0.4-2.9-0.3l-5.5-0.6c-0.1 0-0.2-0.1-0.3-0.1-0.7-0.1-1.3-0.2-2-0.2l-8.8-1c5.3-7.5 11.3-14.5 18-20.8 0.5-0.4 1-0.8 1.4-1.3 8.7-8 18.4-14.9 29.1-20.5 8-4.2 16.4-7.6 24.9-10.2 0.5-0.1 0.9-0.2 1.4-0.4 17-4.8 35.1-6.4 53.3-4.3z m-92.5-69.4c31.5-30.5 76.2-41.2 117.4-29l-87 84.4c-9.3 2.9-18.4 6.6-27.1 11.2-2.2 1.2-4.3 2.4-6.5 3.6-2.8-15.7-8.5-30.8-17-44.4 5.5-9.5 12.3-18.2 20.2-25.8z m-75.8 0.1c14.4 7.9 26.4 18.6 35.7 31.9 10.5 15.1 16.8 32.7 18.4 51-1.2 1-2.5 2-3.6 3l-74-40.3c-0.8-0.7-1.8-1.2-2.8-1.5l-77.2-42.1c31.3-18.8 70.6-20 103.5-2z m-48.2 63.8c5.2-0.5 10.3-0.6 15.4-0.4l68.2 37.1c-5.1 5.7-9.9 11.8-14.2 18.2l-60 5.3-108.1 9.5c17.8-39.1 55-66 98.7-69.7zM461.2 484c-24.3-43.9-23-97.5 4.5-140.6 8.5-13.4 19-24.9 31.3-34.4l48.3-4.2s0 0.1 0.1 0.1c1.5 3 4.4 5 7.7 5.3l17.8 2.1-32.1 50.3c-0.6 0.7-1 1.4-1.4 2.2L461.2 484zM574 371c-5.2 0-10.1-1.4-14.4-3.9l29.3-45.9 1.1-1.8c7.6 5.2 12.4 13.9 12.4 23.4v2.1c-0.1 1.8-0.5 3.8-1.1 6.1-0.2 0.6-0.4 1.1-0.6 1.7-4.2 10.9-14.8 18.3-26.7 18.3z m47.8-15.5c4.3-0.3 8.6-1.3 12.6-2.7 20.5 32.6 37.2 77.3 48.6 129.9 10.2 47.1 15.7 99.1 15.8 148-15.9-2.5-31.9-3.8-48.1-4 2.7-28.8 5.6-76.5 1.8-130.4-4-57.6-14.3-104.8-30.7-140.8zM149.6 757.9c43.6-33.5 99.9-52 158.7-52 34.2 0 68.3 6.5 99.4 18.8-38.4 40-61.1 87.2-63.9 134.2h-258c3.6-35.9 26.4-72.2 63.8-101z m391.7 101H363.8c3.4-50.5 32.8-101.8 81.7-142 26.4-21.7 56.6-38.8 90-50.9 35.4-12.8 72.5-19.4 110.4-19.4 37.9 0 75 6.5 110.3 19.4 33.4 12.1 63.6 29.3 90 50.9 48.9 40.2 78.2 91.5 81.6 142H541.3z" fill="#4D3500" /></svg>

+ 1
- 0
src/assets/icons/xianxingdiqiu.svg
Файловите разлики са ограничени, защото са твърде много
Целия файл


+ 1
- 0
src/assets/icons/xianxingditu.svg
Файловите разлики са ограничени, защото са твърде много
Целия файл


+ 1
- 0
src/assets/icons/xianxingfanchuan.svg Целия файл

@@ -0,0 +1 @@
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 class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M489.6 541.1V166l283.5 375.1H489.6" fill="#3DC38A" /><path d="M489.6 101.3l-323.2 491h323.2z" fill="#F2B843" /><path d="M489.6 715.7c-16.3 0-29.6-13.2-29.6-29.6V95c0-16.3 13.2-29.6 29.6-29.6 16.3 0 29.6 13.2 29.6 29.6v591.1c-0.1 16.3-13.3 29.6-29.6 29.6z" fill="#EA800C" /><path d="M489.6 608.4H145.3c-16.3 0-29.6-13.2-29.6-29.6 0-16.3 13.2-29.6 29.6-29.6h344.3c16.3 0 29.6 13.2 29.6 29.6-0.1 16.3-13.3 29.6-29.6 29.6z" fill="#EA800C" /><path d="M783.8 557.2H503.1c-16.3 0-29.6-13.2-29.6-29.6 0-16.3 13.2-29.6 29.6-29.6h280.7c16.3 0 29.6 13.2 29.6 29.6 0 16.3-13.3 29.6-29.6 29.6z" fill="#EA800C" /><path d="M752.4 759.8l-67-88.8c-7.9-10.5-20.3-16.7-33.5-16.7H302c-18.3 0-34.5 11.9-40 29.3l-25 76.2h515.4z" fill="#2F9B77" /><path d="M920.8 704.6c15.6-0.8 26.8 14.8 21.1 29.3l-54.5 138.8-28.6 72.8H133.7L81.5 775c-4.1-13.4 5.5-27 19.4-27.8l143.3-7.5 676.6-35.1z" fill="#3DC38A" /><path d="M802.3 791.8m-27 0a27 27 0 1 0 54 0 27 27 0 1 0-54 0Z" fill="#F2B843" /><path d="M947.5 707.7c-6.3-8.7-16.4-13.6-27.2-13.1l-196.8 10.2-30-39.9c-9.8-12.9-25.3-20.6-41.5-20.6H529.2v-77.1h254.7c21.8 0 39.6-17.8 39.6-39.6S805.7 488 783.9 488h-38.3L529.2 201.7V95c0-21.8-17.8-39.6-39.6-39.6S450 73.2 450 95v48.2L189.3 539.3h-44c-21.8 0-39.6 17.8-39.6 39.6s17.8 39.6 39.6 39.6H450v25.8H302c-22.7 0-42.6 14.6-49.5 36.2l-16.2 49.6-135.9 7.1c-9.7 0.6-18.5 5.5-24.1 13.5-5.6 8-7.1 17.9-4.3 27.2l52.2 170.5c1.3 4.2 5.2 7.1 9.6 7.1h725.1c4.1 0 7.8-2.5 9.3-6.3l28.6-72.8 54.5-138.8c3.8-10 2.4-21.2-3.8-29.9zM720.5 488H529.2V234.9L720.5 488zM450 179.6v359.7H213.3L450 179.6z m20 428.8c0-5.5-4.5-10-10-10-0.5 0-0.9 0-1.3 0.1H145.3c-10.8 0-19.6-8.8-19.6-19.6s8.8-19.6 19.6-19.6H460c5.5 0 10-4.5 10-10V95c0-10.8 8.8-19.6 19.6-19.6s19.6 8.8 19.6 19.6v403c0 5.5 4.5 10 10 10h264.7c10.8 0 19.6 8.8 19.6 19.6s-8.8 19.6-19.6 19.6H519.2c-5.5 0-10 4.5-10 10v87.1H470v-35.9z m-198.5 78.3s0-0.1 0 0c4.3-13.4 16.5-22.4 30.5-22.4h350c9.9 0 19.5 4.8 25.5 12.7l21.9 29.1L257.7 729l13.8-42.3z m661.1 43.5L878.1 869 852 935.5H141.1l-50-163.4c-1-3.4-0.5-7 1.6-9.9 2-2.9 5.3-4.8 8.8-5l141.5-7.4h0.6c0.6 0 1.1-0.1 1.7-0.1l473.6-24.6h0.7l201.7-10.5c4-0.2 7.6 1.5 9.9 4.8 2.3 3.2 2.8 7.2 1.4 10.8z" fill="#4D3500" /><path d="M802.3 754.8c-20.4 0-37 16.6-37 37s16.6 37 37 37 37-16.6 37-37-16.6-37-37-37z m0 54c-9.4 0-17-7.6-17-17s7.6-17 17-17 17 7.6 17 17-7.6 17-17 17z" fill="#4D3500" /></svg>

+ 1
- 0
src/assets/icons/xianxingfeiji.svg
Файловите разлики са ограничени, защото са твърде много
Целия файл


+ 1
- 0
src/assets/icons/xianxinglvhangriji.svg Целия файл

@@ -0,0 +1 @@
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 class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M252.8 862.9h-73.4c-6.8 0-12.4-5.6-12.4-12.4V134.4c0-6.8 5.6-12.4 12.4-12.4h73.4l5.3 6.8v728.8l-5.3 5.3z" fill="#F2B843" /><path d="M338.5 942l-42.9-18.1-42.8 18.1v-79.1l7.5-5.3h71.3l7 5.3-0.1 79.1z" fill="#EA800C" /><path d="M844.6 327.9h-40.7l-5.3-5.8v-93.3l5.3-7.2h40.7c6.8 0 12.4 5.6 12.4 12.4v81.5c0 6.9-5.6 12.4-12.4 12.4z" fill="#F2B843" /><path d="M844.6 540.5h-40.7l-5.3-7.3v-90.6l5.3-8.4h40.7c6.8 0 12.4 5.6 12.4 12.4v81.5c0 6.8-5.6 12.4-12.4 12.4z" fill="#EA800C" /><path d="M844.6 753h-40.7l-5.3-6.7v-92.1l5.3-7.5h40.7c6.8 0 12.4 5.6 12.4 12.4v81.5c0 6.8-5.6 12.4-12.4 12.4z" fill="#2F9B77" /><path d="M791.8 862.9h-539V122h539.1c6.7 0 12 5.4 12 12v716.8c0 6.7-5.4 12.1-12.1 12.1z" fill="#3DC38A" /><path d="M680.3 661.1H343.7c-14 0-25.5-11.5-25.5-25.5s11.5-25.5 25.5-25.5h336.6c14 0 25.5 11.5 25.5 25.5s-11.5 25.5-25.5 25.5zM680.3 779.8H343.7c-14 0-25.5-11.5-25.5-25.5s11.5-25.5 25.5-25.5h336.6c14 0 25.5 11.5 25.5 25.5s-11.5 25.5-25.5 25.5z" fill="#2F9B77" /><path d="M594.8 511.1c-79.2 45.7-180.5 18.6-226.3-60.6S350 270 429.2 224.2s180.5-18.6 226.3 60.6 18.5 180.6-60.7 226.3z" fill="#3DC38A" /><path d="M523.7 318.1c-1.2 0.3-3.5 0.9-4.5 1.7-1.2 1 0.7 2.3 0 2.9-1.2 1-2.1 2.7-4.7 2.6-5.5-0.3-13.9-7.5-19-10.2 8.1-8.3-4.7-9.6-9.7-9.1-6.5 0.5-17.7 0-23.5 3.2-4.1 2.3-9.5 11.7-12.8 15.5-4.6 5.2-9.1 9.8-12.1 16-10.9 23 5.9 49.4 32.2 46.3 7.3-0.9 14.9-5.5 21.4 0.6 4.8 4.5 2.3 8.7 3.5 13.9 1.1 4.5 6.1 7.3 7.8 11.4 3.3 7.9 1.2 12.9-1.1 20.2-3.1 9.6 4.9 21 8 30.2 1.6 4.7 6.1 17.7 10.7 19.8 7.1 3.2 18.1-6.4 22.4-11.6 3.3-4.1 2.2-8.2 4.4-12 2.4-4.1 5.4-5.3 7.1-10.6 1.8-5.7 3.7-7.1 7.5-11.3 6.2-6.7 5.2-10.6 2.7-18.6-5.1-16.5 13.5-24.2 21.8-36.3 8.7-12.6-8.2-8.4-14.8-12.8-6.8-4.4-9.8-12.9-13.1-19.9s-6-17.5-11.4-23.3c-4.2-4.3-16.9-6.4-22.8-8.6zM609.2 428.8c-2.6 8.9-5.3 17.8-7.9 26.7-1.8 6.2-8.4 26.6-17.5 13.6-3.5-5-0.6-11.4 1.3-16 2.4-5.8-0.9-8.7 0.9-14.1 2-6.2 10-6.4 13.8-10.8 2.7-3 4.3-7.9 6.2-11.5 1 4 2.1 8.1 3.2 12.1z" fill="#F2B843" /><path d="M655.4 284.9c-28.5-49.4-78.7-78.5-131.6-82.4l-21.6 27.2-46.4 16.3-12.5 30.2 19.2 26.9 2-5.7c3.4-9.5 12.4-15.8 22.5-15.8h31.7l36.4 12.8 12.5 12v7.6l17.4 33.4 5.1-1.9c11-4 20.9-10.4 29.2-18.7l-4.2-6.3c-1.4-2 0.1-4.7 2.5-4.7h10.2c3 0 5.8 1.3 7.7 3.6l8.3 9.7c0.8 0.9 1.4 2 1.8 3.1l9.1 25.2 4.4-4.4c2.7-2.7 4.1-6.5 4.2-10.4 0-3.1 1.4-6.1 3.7-8.2l3.4-3c0.8-0.8 1.8-1.4 2.8-1.8-3.6-15.3-9.5-30.4-17.8-44.7zM407.6 291.3l7.9-8.5c5.8-6.2 7.4-15.2 4.2-23-3.4-8.3-10.9-13.6-19.2-14.8-29.2 26.5-47.4 62.2-52.6 100 6.2 5.4 12.6 11.2 12.6 11.7-0.1 1 23.2-2.9 23.2-2.9l-12-17.5 17.2-12.3 18.7-32.7zM423.8 456.4c7.5-2.4 11.6-10.4 9.1-17.9l-2.1-6.6c-0.9-2.9-0.9-5.9 0-8.8 2.7-8.1-2.4-16.8-10.8-18.4l-16.8-3.3-30.6-23.2-25.3 8.2c2.5 21.9 9.4 43.7 21.2 64.1 10.9 18.8 24.9 34.7 41 47.4l7.5-39.3 6.8-2.2z" fill="#2F9B77" /><path d="M844.6 337.9c12.4 0 22.4-10 22.4-22.4V234c0-12.4-10-22.4-22.4-22.4h-30.7V134c0-12.1-9.9-22-22-22H179.4c-12.4 0-22.4 10-22.4 22.4v716.1c0 12.4 10 22.4 22.4 22.4h63.4V942c0 3.4 1.7 6.5 4.5 8.3 2.8 1.9 6.3 2.2 9.4 0.9l38.9-16.5 39 16.5c1.2 0.5 2.6 0.8 3.9 0.8 1.9 0 3.9-0.6 5.5-1.7 2.8-1.9 4.5-5 4.5-8.3v-69.1h443.3c12.2 0 22.1-9.9 22.1-22.1V763h30.7c12.4 0 22.4-10 22.4-22.4v-81.5c0-12.4-10-22.4-22.4-22.4h-30.7v-86.2h30.7c12.4 0 22.4-10 22.4-22.4v-81.5c0-12.4-10-22.4-22.4-22.4h-30.7v-86.3h30.7z m0-106.3c1.3 0 2.4 1.1 2.4 2.4v81.5c0 1.3-1.1 2.4-2.4 2.4h-30.7v-86.3h30.7zM177 850.5V134.4c0-1.3 1.1-2.4 2.4-2.4h63.4v720.9h-63.4c-1.3 0-2.4-1.1-2.4-2.4z m151.5 76.4l-29-12.2c-2.5-1-5.3-1-7.8 0l-28.9 12.2v-54h65.7v54z m465.4-76.1c0 1.2-0.9 2.1-2.1 2.1h-529V132h529.1c1.1 0 2 0.9 2 2v716.8z m50.7-194.1c1.3 0 2.4 1.1 2.4 2.4v81.5c0 1.4-1 2.4-2.4 2.4h-30.7v-86.3h30.7z m0-212.5c1.3 0 2.4 1.1 2.4 2.4v81.5c0 1.3-1.1 2.4-2.4 2.4h-30.7v-86.3h30.7z" fill="#4D3500" /><path d="M680.3 600.1H343.7c-19.6 0-35.5 15.9-35.5 35.5s15.9 35.5 35.5 35.5h336.6c19.6 0 35.5-15.9 35.5-35.5s-15.9-35.5-35.5-35.5z m0 51H343.7c-8.5 0-15.5-7-15.5-15.5s7-15.5 15.5-15.5h336.6c8.5 0 15.5 7 15.5 15.5s-7 15.5-15.5 15.5zM680.3 718.8H343.7c-19.6 0-35.5 15.9-35.5 35.5s15.9 35.5 35.5 35.5h336.6c19.6 0 35.5-15.9 35.5-35.5s-15.9-35.5-35.5-35.5z m0 51H343.7c-8.5 0-15.5-7-15.5-15.5s7-15.5 15.5-15.5h336.6c8.5 0 15.5 7 15.5 15.5s-7 15.5-15.5 15.5zM512.3 543.2c29.8 0 59.9-7.6 87.5-23.5 40.6-23.4 69.7-61.3 81.9-106.7 12.2-45.4 6-92.7-17.5-133.3-23.5-40.6-61.4-69.7-106.7-81.8-45.3-12.1-92.7-5.9-133.3 17.6-40.6 23.5-69.7 61.4-81.9 106.7-12.2 45.3-6 92.7 17.5 133.3 32.6 56.3 91.7 87.7 152.5 87.7zM361.6 327.4c10.8-40.2 36.6-73.7 72.6-94.6 24-13.9 50.6-20.9 77.6-20.9 13.5 0 27.1 1.8 40.5 5.4 40.2 10.8 73.7 36.5 94.6 72.5 20.8 36 26.3 77.9 15.5 118.1-10.8 40.2-36.6 73.7-72.6 94.5-74.3 42.9-169.7 17.3-212.6-56.9-20.8-36-26.4-77.9-15.6-118.1z" fill="#4D3500" /></svg>

+ 1
- 0
src/assets/icons/xianxingtianqiyubao.svg
Файловите разлики са ограничени, защото са твърде много
Целия файл


+ 1
- 0
src/assets/icons/xianxingxiangjipaizhao.svg Целия файл

@@ -0,0 +1 @@
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 class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M72 440.5h880v286.2H72z" fill="#F2B843" /><path d="M72 726.6V834c0 19.8 16 35.8 35.8 35.8h808.5c19.8 0 35.8-16 35.8-35.8V726.6H72zM916.2 297.4H708.7L647 174.1c-6.1-12.1-18.5-19.8-32-19.8H408.9c-13.5 0-25.9 7.7-32 19.8l-61.7 123.3h-64.4v-35.8c0-19.8-16-35.8-35.8-35.8h-35.8c-19.8 0-35.8 16-35.8 35.8v35.8h-35.8c-19.8 0-35.8 16-35.8 35.8v107.3h880V333.1c0.2-19.7-15.8-35.7-35.6-35.7z" fill="#3DC38A" /><path d="M726.6 583.5c0 118.3-95.9 214.6-214.6 214.6-118.8 0-214.6-96.4-214.6-214.6 0-118.3 95.9-214.6 214.6-214.6 118.8 0 214.6 96.4 214.6 214.6z" fill="#EA800C" /><path d="M512 440.5c78.9 0 143.1 64.2 143.1 143.1S590.9 726.7 512 726.7s-143.1-64.2-143.1-143.1S433.1 440.5 512 440.5z" fill="#FFFFFF" /><path d="M773.1 386.8c9.9 0 17.9-8 17.9-17.9s-8-17.9-17.9-17.9-17.9 8-17.9 17.9c0.1 9.9 8.1 17.9 17.9 17.9zM565.7 207.9H458.3c-9.9 0-17.9 8-17.9 17.9s8 17.9 17.9 17.9h107.3c9.9 0 17.9-8 17.9-17.9s-8-17.9-17.8-17.9zM512 744.5c88.8 0 161-72.2 161-161s-72.2-161-161-161-161 72.2-161 161 72.2 161 161 161z m0-286.2c69 0 125.2 56.2 125.2 125.2S581 708.7 512 708.7s-125.2-56.2-125.2-125.2S443 458.3 512 458.3z" fill="#2F9B77" /><path d="M440.5 601.4c9.9 0 17.9-8 17.9-17.9 0-29.6 24.1-53.7 53.7-53.7 9.9 0 17.9-8 17.9-17.9s-8-17.9-17.9-17.9c-49.3 0-89.4 40.1-89.4 89.4-0.1 10 7.9 18 17.8 18z" fill="#3DC38A" /><path d="M844.7 386.8h35.8c9.9 0 17.9-8 17.9-17.9s-8-17.9-17.9-17.9h-35.8c-9.9 0-17.9 8-17.9 17.9s8 17.9 17.9 17.9z" fill="#2F9B77" /><path d="M773.1 396.8c15.4 0 27.9-12.5 27.9-27.9S788.5 341 773.1 341s-27.9 12.5-27.9 27.9v0.1c0.2 15.3 12.7 27.8 27.9 27.8z m0-35.8c4.4 0 7.9 3.5 7.9 7.9s-3.5 7.9-7.9 7.9c-4.3 0-7.8-3.6-7.9-8 0-4.3 3.6-7.8 7.9-7.8zM458.3 253.7h107.3c15.4 0 27.9-12.5 27.9-27.9s-12.5-27.9-27.8-27.9H458.3c-15.4 0-27.9 12.5-27.9 27.9s12.5 27.9 27.9 27.9z m0-35.8h107.4c4.3 0 7.8 3.5 7.8 7.9s-3.5 7.9-7.9 7.9H458.3c-4.4 0-7.9-3.5-7.9-7.9s3.5-7.9 7.9-7.9zM512 754.5c94.3 0 171-76.7 171-171s-76.7-171-171-171-171 76.7-171 171 76.7 171 171 171z m0-322c83.3 0 151 67.7 151 151s-67.7 151-151 151-151-67.7-151-151 67.7-151 151-151z" fill="#4D3500" /><path d="M512 718.7c74.5 0 135.2-60.7 135.2-135.2S586.5 448.3 512 448.3 376.8 509 376.8 583.5 437.5 718.7 512 718.7z m0-250.4c63.5 0 115.2 51.7 115.2 115.2S575.5 698.7 512 698.7 396.8 647 396.8 583.5 448.5 468.3 512 468.3z" fill="#4D3500" /><path d="M468.4 583.5c0-24.1 19.6-43.7 43.7-43.7 15.4 0 27.9-12.5 27.9-27.9S527.5 484 512.1 484c-54.8 0-99.4 44.6-99.4 99.4-0.1 7.5 2.8 14.5 8 19.8 5.3 5.3 12.3 8.2 19.8 8.2 15.4 0 27.9-12.5 27.9-27.9z m-35.7 0s0-0.1 0 0c0-43.9 35.6-79.5 79.4-79.5 4.4 0 7.9 3.5 7.9 7.9s-3.5 7.9-7.9 7.9c-35.1 0-63.7 28.6-63.7 63.7 0 4.4-3.5 7.9-7.9 7.9-2.1 0-4.1-0.8-5.6-2.3-1.4-1.5-2.2-3.5-2.2-5.6zM844.7 396.8h35.8c15.4 0 27.9-12.5 27.9-27.9S895.9 341 880.5 341h-35.8c-15.4 0-27.9 12.5-27.9 27.9s12.5 27.9 27.9 27.9z m0-35.8h35.8c4.4 0 7.9 3.5 7.9 7.9s-3.5 7.9-7.9 7.9h-35.8c-4.4 0-7.9-3.5-7.9-7.9s3.5-7.9 7.9-7.9z" fill="#4D3500" /><path d="M916.5 287.3H715.2l-58.9-117.8c-7.8-15.6-23.5-25.3-40.9-25.3H409.1c-17.4 0-33.1 9.7-40.9 25.3l-58.9 117.8H261v-25.8c0-25.3-20.5-45.8-45.8-45.8h-35.8c-25.3 0-45.8 20.5-45.8 45.8v25.8h-25.8c-25.3 0-45.8 20.5-45.8 45.8V834c0 25.1 20.5 45.7 45.8 45.8h808.4c25.3 0 45.8-20.5 45.8-45.8V442.8c0.2-0.8 0.3-1.6 0.3-2.4V333.1c0-25.3-20.5-45.8-45.8-45.8z m-737.1-51.6h35.8c14.2 0 25.8 11.6 25.8 25.8v25.9h-87.4v-25.9c0-14.2 11.6-25.8 25.8-25.8zM82 450.5h249.1c-27.5 37.3-43.7 83.3-43.7 133 0 49.8 16.3 95.8 43.8 133.1H82V450.5z m430-71.6c112.8 0 204.6 91.8 204.6 204.6S624.8 788.1 512 788.1s-204.6-91.8-204.6-204.6S399.2 378.9 512 378.9zM942 834c0 14.2-11.6 25.8-25.8 25.8H107.9C93.6 859.7 82 848.2 82 834v-97.4h265.8c41 44 99.4 71.5 164.2 71.5s123.1-27.5 164.2-71.5H942V834z m0-117.4H692.8c27.5-37.3 43.8-83.3 43.8-133.1 0-49.7-16.3-95.7-43.7-133H942v266.1z m0.3-286.2H676.2c-41-44-99.4-71.5-164.2-71.5s-123.2 27.6-164.3 71.6H82v-97.4c0-14.2 11.6-25.8 25.8-25.8h34.4c0.4 0.1 0.9 0.1 1.3 0.1h108c0.5 0 0.9 0 1.3-0.1h62.6c3.8 0 7.2-2.1 8.9-5.5L386 178.5c4.4-8.8 13.3-14.3 23.1-14.3h206.2c9.8 0 18.7 5.5 23.1 14.3l61.7 123.3c1.7 3.4 5.2 5.5 8.9 5.5h207.5c14.2 0 25.8 11.6 25.8 25.8v97.3z" fill="#4D3500" /></svg>

+ 1
- 0
src/assets/icons/xianxingxiarilengyin.svg
Файловите разлики са ограничени, защото са твърде много
Целия файл


+ 1
- 0
src/assets/icons/xianxingyoulun.svg
Файловите разлики са ограничени, защото са твърде много
Целия файл


+ 1
- 0
src/assets/icons/xianxingzijiayou.svg
Файловите разлики са ограничени, защото са твърде много
Целия файл


+ 1
- 0
src/assets/icons/yikaimen.svg Целия файл

@@ -0,0 +1 @@
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 class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M857.6 849.6h-512V684.8h30.4v136h451.2V264H376v60.8h-30.4v-89.6h512v614.4z m0 0" fill="#232323" /><path d="M558.4 955.2h-32V68.8h32l299.2 108.8v667.2l-299.2 110.4z m-1.6-856v824l270.4-99.2v-624L556.8 99.2zM196.8 820.8h164.8v30.4H196.8v-30.4z m660.8 0h60.8v30.4h-60.8v-30.4z m91.2 0h44.8v30.4h-44.8v-30.4z m0 0" fill="#232323" /><path d="M256 752v-126.4H30.4V414.4H256V288l232 232L256 752zM60.8 595.2h225.6v83.2l160-158.4-158.4-160v83.2H60.8v152z m555.2-9.6l-27.2-12.8 12.8-27.2v-68.8l-12.8-27.2 27.2-12.8 16 33.6v81.6l-16 33.6z m-480 235.2h30.4v30.4H136v-30.4z m180.8-526.4h-30.4v-120h256v30.4H316.8v89.6z m-30.4 451.2h30.4v89.6h-30.4v-89.6z m0 0" fill="#232323" /></svg>

+ 539
- 0
src/assets/iconsvg/demo.css Целия файл

@@ -0,0 +1,539 @@
1
+/* Logo 字体 */
2
+@font-face {
3
+  font-family: "iconfont logo";
4
+  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
5
+  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
6
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
7
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
8
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
9
+}
10
+
11
+.logo {
12
+  font-family: "iconfont logo";
13
+  font-size: 160px;
14
+  font-style: normal;
15
+  -webkit-font-smoothing: antialiased;
16
+  -moz-osx-font-smoothing: grayscale;
17
+}
18
+
19
+/* tabs */
20
+.nav-tabs {
21
+  position: relative;
22
+}
23
+
24
+.nav-tabs .nav-more {
25
+  position: absolute;
26
+  right: 0;
27
+  bottom: 0;
28
+  height: 42px;
29
+  line-height: 42px;
30
+  color: #666;
31
+}
32
+
33
+#tabs {
34
+  border-bottom: 1px solid #eee;
35
+}
36
+
37
+#tabs li {
38
+  cursor: pointer;
39
+  width: 100px;
40
+  height: 40px;
41
+  line-height: 40px;
42
+  text-align: center;
43
+  font-size: 16px;
44
+  border-bottom: 2px solid transparent;
45
+  position: relative;
46
+  z-index: 1;
47
+  margin-bottom: -1px;
48
+  color: #666;
49
+}
50
+
51
+
52
+#tabs .active {
53
+  border-bottom-color: #f00;
54
+  color: #222;
55
+}
56
+
57
+.tab-container .content {
58
+  display: none;
59
+}
60
+
61
+/* 页面布局 */
62
+.main {
63
+  padding: 30px 100px;
64
+  width: 960px;
65
+  margin: 0 auto;
66
+}
67
+
68
+.main .logo {
69
+  color: #333;
70
+  text-align: left;
71
+  margin-bottom: 30px;
72
+  line-height: 1;
73
+  height: 110px;
74
+  margin-top: -50px;
75
+  overflow: hidden;
76
+  *zoom: 1;
77
+}
78
+
79
+.main .logo a {
80
+  font-size: 160px;
81
+  color: #333;
82
+}
83
+
84
+.helps {
85
+  margin-top: 40px;
86
+}
87
+
88
+.helps pre {
89
+  padding: 20px;
90
+  margin: 10px 0;
91
+  border: solid 1px #e7e1cd;
92
+  background-color: #fffdef;
93
+  overflow: auto;
94
+}
95
+
96
+.icon_lists {
97
+  width: 100% !important;
98
+  overflow: hidden;
99
+  *zoom: 1;
100
+}
101
+
102
+.icon_lists li {
103
+  width: 100px;
104
+  margin-bottom: 10px;
105
+  margin-right: 20px;
106
+  text-align: center;
107
+  list-style: none !important;
108
+  cursor: default;
109
+}
110
+
111
+.icon_lists li .code-name {
112
+  line-height: 1.2;
113
+}
114
+
115
+.icon_lists .icon {
116
+  display: block;
117
+  height: 100px;
118
+  line-height: 100px;
119
+  font-size: 42px;
120
+  margin: 10px auto;
121
+  color: #333;
122
+  -webkit-transition: font-size 0.25s linear, width 0.25s linear;
123
+  -moz-transition: font-size 0.25s linear, width 0.25s linear;
124
+  transition: font-size 0.25s linear, width 0.25s linear;
125
+}
126
+
127
+.icon_lists .icon:hover {
128
+  font-size: 100px;
129
+}
130
+
131
+.icon_lists .svg-icon {
132
+  /* 通过设置 font-size 来改变图标大小 */
133
+  width: 1em;
134
+  /* 图标和文字相邻时,垂直对齐 */
135
+  vertical-align: -0.15em;
136
+  /* 通过设置 color 来改变 SVG 的颜色/fill */
137
+  fill: currentColor;
138
+  /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
139
+      normalize.css 中也包含这行 */
140
+  overflow: hidden;
141
+}
142
+
143
+.icon_lists li .name,
144
+.icon_lists li .code-name {
145
+  color: #666;
146
+}
147
+
148
+/* markdown 样式 */
149
+.markdown {
150
+  color: #666;
151
+  font-size: 14px;
152
+  line-height: 1.8;
153
+}
154
+
155
+.highlight {
156
+  line-height: 1.5;
157
+}
158
+
159
+.markdown img {
160
+  vertical-align: middle;
161
+  max-width: 100%;
162
+}
163
+
164
+.markdown h1 {
165
+  color: #404040;
166
+  font-weight: 500;
167
+  line-height: 40px;
168
+  margin-bottom: 24px;
169
+}
170
+
171
+.markdown h2,
172
+.markdown h3,
173
+.markdown h4,
174
+.markdown h5,
175
+.markdown h6 {
176
+  color: #404040;
177
+  margin: 1.6em 0 0.6em 0;
178
+  font-weight: 500;
179
+  clear: both;
180
+}
181
+
182
+.markdown h1 {
183
+  font-size: 28px;
184
+}
185
+
186
+.markdown h2 {
187
+  font-size: 22px;
188
+}
189
+
190
+.markdown h3 {
191
+  font-size: 16px;
192
+}
193
+
194
+.markdown h4 {
195
+  font-size: 14px;
196
+}
197
+
198
+.markdown h5 {
199
+  font-size: 12px;
200
+}
201
+
202
+.markdown h6 {
203
+  font-size: 12px;
204
+}
205
+
206
+.markdown hr {
207
+  height: 1px;
208
+  border: 0;
209
+  background: #e9e9e9;
210
+  margin: 16px 0;
211
+  clear: both;
212
+}
213
+
214
+.markdown p {
215
+  margin: 1em 0;
216
+}
217
+
218
+.markdown>p,
219
+.markdown>blockquote,
220
+.markdown>.highlight,
221
+.markdown>ol,
222
+.markdown>ul {
223
+  width: 80%;
224
+}
225
+
226
+.markdown ul>li {
227
+  list-style: circle;
228
+}
229
+
230
+.markdown>ul li,
231
+.markdown blockquote ul>li {
232
+  margin-left: 20px;
233
+  padding-left: 4px;
234
+}
235
+
236
+.markdown>ul li p,
237
+.markdown>ol li p {
238
+  margin: 0.6em 0;
239
+}
240
+
241
+.markdown ol>li {
242
+  list-style: decimal;
243
+}
244
+
245
+.markdown>ol li,
246
+.markdown blockquote ol>li {
247
+  margin-left: 20px;
248
+  padding-left: 4px;
249
+}
250
+
251
+.markdown code {
252
+  margin: 0 3px;
253
+  padding: 0 5px;
254
+  background: #eee;
255
+  border-radius: 3px;
256
+}
257
+
258
+.markdown strong,
259
+.markdown b {
260
+  font-weight: 600;
261
+}
262
+
263
+.markdown>table {
264
+  border-collapse: collapse;
265
+  border-spacing: 0px;
266
+  empty-cells: show;
267
+  border: 1px solid #e9e9e9;
268
+  width: 95%;
269
+  margin-bottom: 24px;
270
+}
271
+
272
+.markdown>table th {
273
+  white-space: nowrap;
274
+  color: #333;
275
+  font-weight: 600;
276
+}
277
+
278
+.markdown>table th,
279
+.markdown>table td {
280
+  border: 1px solid #e9e9e9;
281
+  padding: 8px 16px;
282
+  text-align: left;
283
+}
284
+
285
+.markdown>table th {
286
+  background: #F7F7F7;
287
+}
288
+
289
+.markdown blockquote {
290
+  font-size: 90%;
291
+  color: #999;
292
+  border-left: 4px solid #e9e9e9;
293
+  padding-left: 0.8em;
294
+  margin: 1em 0;
295
+}
296
+
297
+.markdown blockquote p {
298
+  margin: 0;
299
+}
300
+
301
+.markdown .anchor {
302
+  opacity: 0;
303
+  transition: opacity 0.3s ease;
304
+  margin-left: 8px;
305
+}
306
+
307
+.markdown .waiting {
308
+  color: #ccc;
309
+}
310
+
311
+.markdown h1:hover .anchor,
312
+.markdown h2:hover .anchor,
313
+.markdown h3:hover .anchor,
314
+.markdown h4:hover .anchor,
315
+.markdown h5:hover .anchor,
316
+.markdown h6:hover .anchor {
317
+  opacity: 1;
318
+  display: inline-block;
319
+}
320
+
321
+.markdown>br,
322
+.markdown>p>br {
323
+  clear: both;
324
+}
325
+
326
+
327
+.hljs {
328
+  display: block;
329
+  background: white;
330
+  padding: 0.5em;
331
+  color: #333333;
332
+  overflow-x: auto;
333
+}
334
+
335
+.hljs-comment,
336
+.hljs-meta {
337
+  color: #969896;
338
+}
339
+
340
+.hljs-string,
341
+.hljs-variable,
342
+.hljs-template-variable,
343
+.hljs-strong,
344
+.hljs-emphasis,
345
+.hljs-quote {
346
+  color: #df5000;
347
+}
348
+
349
+.hljs-keyword,
350
+.hljs-selector-tag,
351
+.hljs-type {
352
+  color: #a71d5d;
353
+}
354
+
355
+.hljs-literal,
356
+.hljs-symbol,
357
+.hljs-bullet,
358
+.hljs-attribute {
359
+  color: #0086b3;
360
+}
361
+
362
+.hljs-section,
363
+.hljs-name {
364
+  color: #63a35c;
365
+}
366
+
367
+.hljs-tag {
368
+  color: #333333;
369
+}
370
+
371
+.hljs-title,
372
+.hljs-attr,
373
+.hljs-selector-id,
374
+.hljs-selector-class,
375
+.hljs-selector-attr,
376
+.hljs-selector-pseudo {
377
+  color: #795da3;
378
+}
379
+
380
+.hljs-addition {
381
+  color: #55a532;
382
+  background-color: #eaffea;
383
+}
384
+
385
+.hljs-deletion {
386
+  color: #bd2c00;
387
+  background-color: #ffecec;
388
+}
389
+
390
+.hljs-link {
391
+  text-decoration: underline;
392
+}
393
+
394
+/* 代码高亮 */
395
+/* PrismJS 1.15.0
396
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
397
+/**
398
+ * prism.js default theme for JavaScript, CSS and HTML
399
+ * Based on dabblet (http://dabblet.com)
400
+ * @author Lea Verou
401
+ */
402
+code[class*="language-"],
403
+pre[class*="language-"] {
404
+  color: black;
405
+  background: none;
406
+  text-shadow: 0 1px white;
407
+  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
408
+  text-align: left;
409
+  white-space: pre;
410
+  word-spacing: normal;
411
+  word-break: normal;
412
+  word-wrap: normal;
413
+  line-height: 1.5;
414
+
415
+  -moz-tab-size: 4;
416
+  -o-tab-size: 4;
417
+  tab-size: 4;
418
+
419
+  -webkit-hyphens: none;
420
+  -moz-hyphens: none;
421
+  -ms-hyphens: none;
422
+  hyphens: none;
423
+}
424
+
425
+pre[class*="language-"]::-moz-selection,
426
+pre[class*="language-"] ::-moz-selection,
427
+code[class*="language-"]::-moz-selection,
428
+code[class*="language-"] ::-moz-selection {
429
+  text-shadow: none;
430
+  background: #b3d4fc;
431
+}
432
+
433
+pre[class*="language-"]::selection,
434
+pre[class*="language-"] ::selection,
435
+code[class*="language-"]::selection,
436
+code[class*="language-"] ::selection {
437
+  text-shadow: none;
438
+  background: #b3d4fc;
439
+}
440
+
441
+@media print {
442
+
443
+  code[class*="language-"],
444
+  pre[class*="language-"] {
445
+    text-shadow: none;
446
+  }
447
+}
448
+
449
+/* Code blocks */
450
+pre[class*="language-"] {
451
+  padding: 1em;
452
+  margin: .5em 0;
453
+  overflow: auto;
454
+}
455
+
456
+:not(pre)>code[class*="language-"],
457
+pre[class*="language-"] {
458
+  background: #f5f2f0;
459
+}
460
+
461
+/* Inline code */
462
+:not(pre)>code[class*="language-"] {
463
+  padding: .1em;
464
+  border-radius: .3em;
465
+  white-space: normal;
466
+}
467
+
468
+.token.comment,
469
+.token.prolog,
470
+.token.doctype,
471
+.token.cdata {
472
+  color: slategray;
473
+}
474
+
475
+.token.punctuation {
476
+  color: #999;
477
+}
478
+
479
+.namespace {
480
+  opacity: .7;
481
+}
482
+
483
+.token.property,
484
+.token.tag,
485
+.token.boolean,
486
+.token.number,
487
+.token.constant,
488
+.token.symbol,
489
+.token.deleted {
490
+  color: #905;
491
+}
492
+
493
+.token.selector,
494
+.token.attr-name,
495
+.token.string,
496
+.token.char,
497
+.token.builtin,
498
+.token.inserted {
499
+  color: #690;
500
+}
501
+
502
+.token.operator,
503
+.token.entity,
504
+.token.url,
505
+.language-css .token.string,
506
+.style .token.string {
507
+  color: #9a6e3a;
508
+  background: hsla(0, 0%, 100%, .5);
509
+}
510
+
511
+.token.atrule,
512
+.token.attr-value,
513
+.token.keyword {
514
+  color: #07a;
515
+}
516
+
517
+.token.function,
518
+.token.class-name {
519
+  color: #DD4A68;
520
+}
521
+
522
+.token.regex,
523
+.token.important,
524
+.token.variable {
525
+  color: #e90;
526
+}
527
+
528
+.token.important,
529
+.token.bold {
530
+  font-weight: bold;
531
+}
532
+
533
+.token.italic {
534
+  font-style: italic;
535
+}
536
+
537
+.token.entity {
538
+  cursor: help;
539
+}

+ 327
- 0
src/assets/iconsvg/demo_index.html Целия файл

@@ -0,0 +1,327 @@
1
+<!DOCTYPE html>
2
+<html>
3
+<head>
4
+  <meta charset="utf-8"/>
5
+  <title>iconfont Demo</title>
6
+  <link rel="shortcut icon" href="//img.alicdn.com/imgextra/i4/O1CN01Z5paLz1O0zuCC7osS_!!6000000001644-55-tps-83-82.svg" type="image/x-icon"/>
7
+  <link rel="icon" type="image/svg+xml" href="//img.alicdn.com/imgextra/i4/O1CN01Z5paLz1O0zuCC7osS_!!6000000001644-55-tps-83-82.svg"/>
8
+  <link rel="stylesheet" href="https://g.alicdn.com/thx/cube/1.3.2/cube.min.css">
9
+  <link rel="stylesheet" href="demo.css">
10
+  <link rel="stylesheet" href="iconfont.css">
11
+  <script src="iconfont.js"></script>
12
+  <!-- jQuery -->
13
+  <script src="https://a1.alicdn.com/oss/uploads/2018/12/26/7bfddb60-08e8-11e9-9b04-53e73bb6408b.js"></script>
14
+  <!-- 代码高亮 -->
15
+  <script src="https://a1.alicdn.com/oss/uploads/2018/12/26/a3f714d0-08e6-11e9-8a15-ebf944d7534c.js"></script>
16
+  <style>
17
+    .main .logo {
18
+      margin-top: 0;
19
+      height: auto;
20
+    }
21
+
22
+    .main .logo a {
23
+      display: flex;
24
+      align-items: center;
25
+    }
26
+
27
+    .main .logo .sub-title {
28
+      margin-left: 0.5em;
29
+      font-size: 22px;
30
+      color: #fff;
31
+      background: linear-gradient(-45deg, #3967FF, #B500FE);
32
+      -webkit-background-clip: text;
33
+      -webkit-text-fill-color: transparent;
34
+    }
35
+  </style>
36
+</head>
37
+<body>
38
+  <div class="main">
39
+    <h1 class="logo"><a href="https://www.iconfont.cn/" title="iconfont 首页" target="_blank">
40
+      <img width="200" src="https://img.alicdn.com/imgextra/i3/O1CN01Mn65HV1FfSEzR6DKv_!!6000000000514-55-tps-228-59.svg">
41
+      
42
+    </a></h1>
43
+    <div class="nav-tabs">
44
+      <ul id="tabs" class="dib-box">
45
+        <li class="dib active"><span>Unicode</span></li>
46
+        <li class="dib"><span>Font class</span></li>
47
+        <li class="dib"><span>Symbol</span></li>
48
+      </ul>
49
+      
50
+      <a href="https://www.iconfont.cn/manage/index?manage_type=myprojects&projectId=4501842" target="_blank" class="nav-more">查看项目</a>
51
+      
52
+    </div>
53
+    <div class="tab-container">
54
+      <div class="content unicode" style="display: block;">
55
+          <ul class="icon_lists dib-box">
56
+          
57
+            <li class="dib">
58
+              <span class="icon iconfont">&#xe663;</span>
59
+                <div class="name">柱状图</div>
60
+                <div class="code-name">&amp;#xe663;</div>
61
+              </li>
62
+          
63
+            <li class="dib">
64
+              <span class="icon iconfont">&#xeb94;</span>
65
+                <div class="name">表单组件-表格</div>
66
+                <div class="code-name">&amp;#xeb94;</div>
67
+              </li>
68
+          
69
+            <li class="dib">
70
+              <span class="icon iconfont">&#xeb96;</span>
71
+                <div class="name">图表-折线图</div>
72
+                <div class="code-name">&amp;#xeb96;</div>
73
+              </li>
74
+          
75
+            <li class="dib">
76
+              <span class="icon iconfont">&#xe639;</span>
77
+                <div class="name">已开门</div>
78
+                <div class="code-name">&amp;#xe639;</div>
79
+              </li>
80
+          
81
+            <li class="dib">
82
+              <span class="icon iconfont">&#xe61b;</span>
83
+                <div class="name">查询</div>
84
+                <div class="code-name">&amp;#xe61b;</div>
85
+              </li>
86
+          
87
+            <li class="dib">
88
+              <span class="icon iconfont">&#xe62d;</span>
89
+                <div class="name">一键开门</div>
90
+                <div class="code-name">&amp;#xe62d;</div>
91
+              </li>
92
+          
93
+          </ul>
94
+          <div class="article markdown">
95
+          <h2 id="unicode-">Unicode 引用</h2>
96
+          <hr>
97
+
98
+          <p>Unicode 是字体在网页端最原始的应用方式,特点是:</p>
99
+          <ul>
100
+            <li>支持按字体的方式去动态调整图标大小,颜色等等。</li>
101
+            <li>默认情况下不支持多色,直接添加多色图标会自动去色。</li>
102
+          </ul>
103
+          <blockquote>
104
+            <p>注意:新版 iconfont 支持两种方式引用多色图标:SVG symbol 引用方式和彩色字体图标模式。(使用彩色字体图标需要在「编辑项目」中开启「彩色」选项后并重新生成。)</p>
105
+          </blockquote>
106
+          <p>Unicode 使用步骤如下:</p>
107
+          <h3 id="-font-face">第一步:拷贝项目下面生成的 <code>@font-face</code></h3>
108
+<pre><code class="language-css"
109
+>@font-face {
110
+  font-family: 'iconfont';
111
+  src: url('iconfont.woff2?t=1713344670143') format('woff2'),
112
+       url('iconfont.woff?t=1713344670143') format('woff'),
113
+       url('iconfont.ttf?t=1713344670143') format('truetype'),
114
+       url('iconfont.svg?t=1713344670143#iconfont') format('svg');
115
+}
116
+</code></pre>
117
+          <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
118
+<pre><code class="language-css"
119
+>.iconfont {
120
+  font-family: "iconfont" !important;
121
+  font-size: 16px;
122
+  font-style: normal;
123
+  -webkit-font-smoothing: antialiased;
124
+  -moz-osx-font-smoothing: grayscale;
125
+}
126
+</code></pre>
127
+          <h3 id="-">第三步:挑选相应图标并获取字体编码,应用于页面</h3>
128
+<pre>
129
+<code class="language-html"
130
+>&lt;span class="iconfont"&gt;&amp;#x33;&lt;/span&gt;
131
+</code></pre>
132
+          <blockquote>
133
+            <p>"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。</p>
134
+          </blockquote>
135
+          </div>
136
+      </div>
137
+      <div class="content font-class">
138
+        <ul class="icon_lists dib-box">
139
+          
140
+          <li class="dib">
141
+            <span class="icon iconfont icon-icon-bar-graph"></span>
142
+            <div class="name">
143
+              柱状图
144
+            </div>
145
+            <div class="code-name">.icon-icon-bar-graph
146
+            </div>
147
+          </li>
148
+          
149
+          <li class="dib">
150
+            <span class="icon iconfont icon-biaodanzujian-biaoge"></span>
151
+            <div class="name">
152
+              表单组件-表格
153
+            </div>
154
+            <div class="code-name">.icon-biaodanzujian-biaoge
155
+            </div>
156
+          </li>
157
+          
158
+          <li class="dib">
159
+            <span class="icon iconfont icon-tubiao-zhexiantu"></span>
160
+            <div class="name">
161
+              图表-折线图
162
+            </div>
163
+            <div class="code-name">.icon-tubiao-zhexiantu
164
+            </div>
165
+          </li>
166
+          
167
+          <li class="dib">
168
+            <span class="icon iconfont icon-yikaimen"></span>
169
+            <div class="name">
170
+              已开门
171
+            </div>
172
+            <div class="code-name">.icon-yikaimen
173
+            </div>
174
+          </li>
175
+          
176
+          <li class="dib">
177
+            <span class="icon iconfont icon-chaxun"></span>
178
+            <div class="name">
179
+              查询
180
+            </div>
181
+            <div class="code-name">.icon-chaxun
182
+            </div>
183
+          </li>
184
+          
185
+          <li class="dib">
186
+            <span class="icon iconfont icon-yijiankaimen"></span>
187
+            <div class="name">
188
+              一键开门
189
+            </div>
190
+            <div class="code-name">.icon-yijiankaimen
191
+            </div>
192
+          </li>
193
+          
194
+        </ul>
195
+        <div class="article markdown">
196
+        <h2 id="font-class-">font-class 引用</h2>
197
+        <hr>
198
+
199
+        <p>font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。</p>
200
+        <p>与 Unicode 使用方式相比,具有如下特点:</p>
201
+        <ul>
202
+          <li>相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。</li>
203
+          <li>因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。</li>
204
+        </ul>
205
+        <p>使用步骤如下:</p>
206
+        <h3 id="-fontclass-">第一步:引入项目下面生成的 fontclass 代码:</h3>
207
+<pre><code class="language-html">&lt;link rel="stylesheet" href="./iconfont.css"&gt;
208
+</code></pre>
209
+        <h3 id="-">第二步:挑选相应图标并获取类名,应用于页面:</h3>
210
+<pre><code class="language-html">&lt;span class="iconfont icon-xxx"&gt;&lt;/span&gt;
211
+</code></pre>
212
+        <blockquote>
213
+          <p>"
214
+            iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。</p>
215
+        </blockquote>
216
+      </div>
217
+      </div>
218
+      <div class="content symbol">
219
+          <ul class="icon_lists dib-box">
220
+          
221
+            <li class="dib">
222
+                <svg class="icon svg-icon" aria-hidden="true">
223
+                  <use xlink:href="#icon-icon-bar-graph"></use>
224
+                </svg>
225
+                <div class="name">柱状图</div>
226
+                <div class="code-name">#icon-icon-bar-graph</div>
227
+            </li>
228
+          
229
+            <li class="dib">
230
+                <svg class="icon svg-icon" aria-hidden="true">
231
+                  <use xlink:href="#icon-biaodanzujian-biaoge"></use>
232
+                </svg>
233
+                <div class="name">表单组件-表格</div>
234
+                <div class="code-name">#icon-biaodanzujian-biaoge</div>
235
+            </li>
236
+          
237
+            <li class="dib">
238
+                <svg class="icon svg-icon" aria-hidden="true">
239
+                  <use xlink:href="#icon-tubiao-zhexiantu"></use>
240
+                </svg>
241
+                <div class="name">图表-折线图</div>
242
+                <div class="code-name">#icon-tubiao-zhexiantu</div>
243
+            </li>
244
+          
245
+            <li class="dib">
246
+                <svg class="icon svg-icon" aria-hidden="true">
247
+                  <use xlink:href="#icon-yikaimen"></use>
248
+                </svg>
249
+                <div class="name">已开门</div>
250
+                <div class="code-name">#icon-yikaimen</div>
251
+            </li>
252
+          
253
+            <li class="dib">
254
+                <svg class="icon svg-icon" aria-hidden="true">
255
+                  <use xlink:href="#icon-chaxun"></use>
256
+                </svg>
257
+                <div class="name">查询</div>
258
+                <div class="code-name">#icon-chaxun</div>
259
+            </li>
260
+          
261
+            <li class="dib">
262
+                <svg class="icon svg-icon" aria-hidden="true">
263
+                  <use xlink:href="#icon-yijiankaimen"></use>
264
+                </svg>
265
+                <div class="name">一键开门</div>
266
+                <div class="code-name">#icon-yijiankaimen</div>
267
+            </li>
268
+          
269
+          </ul>
270
+          <div class="article markdown">
271
+          <h2 id="symbol-">Symbol 引用</h2>
272
+          <hr>
273
+
274
+          <p>这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇<a href="">文章</a>
275
+            这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:</p>
276
+          <ul>
277
+            <li>支持多色图标了,不再受单色限制。</li>
278
+            <li>通过一些技巧,支持像字体那样,通过 <code>font-size</code>, <code>color</code> 来调整样式。</li>
279
+            <li>兼容性较差,支持 IE9+,及现代浏览器。</li>
280
+            <li>浏览器渲染 SVG 的性能一般,还不如 png。</li>
281
+          </ul>
282
+          <p>使用步骤如下:</p>
283
+          <h3 id="-symbol-">第一步:引入项目下面生成的 symbol 代码:</h3>
284
+<pre><code class="language-html">&lt;script src="./iconfont.js"&gt;&lt;/script&gt;
285
+</code></pre>
286
+          <h3 id="-css-">第二步:加入通用 CSS 代码(引入一次就行):</h3>
287
+<pre><code class="language-html">&lt;style&gt;
288
+.icon {
289
+  width: 1em;
290
+  height: 1em;
291
+  vertical-align: -0.15em;
292
+  fill: currentColor;
293
+  overflow: hidden;
294
+}
295
+&lt;/style&gt;
296
+</code></pre>
297
+          <h3 id="-">第三步:挑选相应图标并获取类名,应用于页面:</h3>
298
+<pre><code class="language-html">&lt;svg class="icon" aria-hidden="true"&gt;
299
+  &lt;use xlink:href="#icon-xxx"&gt;&lt;/use&gt;
300
+&lt;/svg&gt;
301
+</code></pre>
302
+          </div>
303
+      </div>
304
+
305
+    </div>
306
+  </div>
307
+  <script>
308
+  $(document).ready(function () {
309
+      $('.tab-container .content:first').show()
310
+
311
+      $('#tabs li').click(function (e) {
312
+        var tabContent = $('.tab-container .content')
313
+        var index = $(this).index()
314
+
315
+        if ($(this).hasClass('active')) {
316
+          return
317
+        } else {
318
+          $('#tabs li').removeClass('active')
319
+          $(this).addClass('active')
320
+
321
+          tabContent.hide().eq(index).fadeIn()
322
+        }
323
+      })
324
+    })
325
+  </script>
326
+</body>
327
+</html>

+ 40
- 0
src/assets/iconsvg/iconfont.css Целия файл

@@ -0,0 +1,40 @@
1
+@font-face {
2
+  font-family: "iconfont"; /* Project id 4501842 */
3
+  src: url('iconfont.woff2?t=1713344670143') format('woff2'),
4
+       url('iconfont.woff?t=1713344670143') format('woff'),
5
+       url('iconfont.ttf?t=1713344670143') format('truetype'),
6
+       url('iconfont.svg?t=1713344670143#iconfont') format('svg');
7
+}
8
+
9
+.iconfont {
10
+  font-family: "iconfont" !important;
11
+  font-size: 16px;
12
+  font-style: normal;
13
+  -webkit-font-smoothing: antialiased;
14
+  -moz-osx-font-smoothing: grayscale;
15
+}
16
+
17
+.icon-icon-bar-graph:before {
18
+  content: "\e663";
19
+}
20
+
21
+.icon-biaodanzujian-biaoge:before {
22
+  content: "\eb94";
23
+}
24
+
25
+.icon-tubiao-zhexiantu:before {
26
+  content: "\eb96";
27
+}
28
+
29
+.icon-yikaimen:before {
30
+  content: "\e639";
31
+}
32
+
33
+.icon-chaxun:before {
34
+  content: "\e61b";
35
+}
36
+
37
+.icon-yijiankaimen:before {
38
+  content: "\e62d";
39
+}
40
+

+ 66
- 0
src/assets/iconsvg/iconfont.js Целия файл

@@ -0,0 +1,66 @@
1
+(window._iconfont_svg_string_4501842 =
2
+  '<svg><symbol id="icon-icon-bar-graph" viewBox="0 0 1024 1024"><path d="M441.691632 79.418044l125.94359 0 0 881.109746L441.691632 960.52779 441.691632 79.418044zM378.71883 1023.498578l251.889193 0L630.608023 16.445242 378.71883 16.445242 378.71883 1023.498578z"  ></path><path d="M63.859856 457.250826l125.942583 0 0 503.276964L63.859856 960.52779 63.859856 457.250826zM0.887054 1023.498578l251.889193 0L252.776247 394.280038 0.887054 394.280038 0.887054 1023.498578z"  ></path><path d="M819.359287 268.301208l125.674755 0 0 691.689919L819.359287 959.991127 819.359287 268.301208zM756.350238 1023.29821l251.491478 0L1007.841717 205.49454 756.350238 205.49454 756.350238 1023.29821z"  ></path></symbol><symbol id="icon-biaodanzujian-biaoge" viewBox="0 0 1024 1024"><path d="M96 160v704h832V160H96z m309.344 400.192v-160h192v160h-192z m192 64V800h-192v-175.808h192zM160 400.192h181.344v160H160v-160z m501.344 0H864v160h-202.656v-160zM864 224v112.192H160V224h704zM160 624.192h181.344V800H160v-175.808zM661.344 800v-175.808H864V800h-202.656z"  ></path></symbol><symbol id="icon-tubiao-zhexiantu" viewBox="0 0 1024 1024"><path d="M896 896H96a32 32 0 0 1-32-32V224a32 32 0 0 1 64 0v608h768a32 32 0 1 1 0 64z"  ></path><path d="M247.008 640a32 32 0 0 1-20.992-56.192l200.992-174.24a32 32 0 0 1 42.272 0.288l172.128 153.44 229.088-246.304a32 32 0 0 1 46.88 43.616l-250.432 269.216a31.936 31.936 0 0 1-44.704 2.08l-174.56-155.52-179.744 155.84a31.872 31.872 0 0 1-20.928 7.776z"  ></path></symbol><symbol id="icon-yikaimen" viewBox="0 0 1024 1024"><path d="M857.6 849.6h-512V684.8h30.4v136h451.2V264H376v60.8h-30.4v-89.6h512v614.4z m0 0" fill="#232323" ></path><path d="M558.4 955.2h-32V68.8h32l299.2 108.8v667.2l-299.2 110.4z m-1.6-856v824l270.4-99.2v-624L556.8 99.2zM196.8 820.8h164.8v30.4H196.8v-30.4z m660.8 0h60.8v30.4h-60.8v-30.4z m91.2 0h44.8v30.4h-44.8v-30.4z m0 0" fill="#232323" ></path><path d="M256 752v-126.4H30.4V414.4H256V288l232 232L256 752zM60.8 595.2h225.6v83.2l160-158.4-158.4-160v83.2H60.8v152z m555.2-9.6l-27.2-12.8 12.8-27.2v-68.8l-12.8-27.2 27.2-12.8 16 33.6v81.6l-16 33.6z m-480 235.2h30.4v30.4H136v-30.4z m180.8-526.4h-30.4v-120h256v30.4H316.8v89.6z m-30.4 451.2h30.4v89.6h-30.4v-89.6z m0 0" fill="#232323" ></path></symbol><symbol id="icon-chaxun" viewBox="0 0 1045 1024"><path d="M229.83609 177.191812l461.985567 0 0 57.748052-461.985567 0 0-57.748052ZM228.296527 293.255001l461.985567 0 0 57.748052-461.985567 0 0-57.748052ZM114.341142 60.754415l692.976619 0 0 461.984413 57.748052 0 0-461.984413c0-31.893094-25.854958-57.748052-57.748052-57.748052l-692.976619 0c-31.893094 0-57.748052 25.854958-57.748052 57.748052l0 808.472722c0 31.893094 25.854958 57.748052 57.748052 57.748052l404.236361 0 0-57.748052-404.236361 0L114.341142 60.754415zM229.451488 524.241432l0 57.748052 140.452501 0c0-20.068603 2.939376-39.447694 8.386172-57.748052L229.451488 524.241432zM465.562482 408.745329 228.296527 408.745329l0 57.748052 175.543682 0C420.103216 443.180492 441.148916 423.454913 465.562482 408.745329zM902.807629 873.522437 770.391347 742.678057c30.443618-35.382231 48.851387-81.416668 48.851387-131.75449 0-111.626984-90.492352-202.11818-202.117026-202.11818-111.625829 0-202.11818 90.491197-202.11818 202.11818 0 111.624674 90.492352 202.11818 202.11818 202.11818 40.412086 0 78.049957-11.867225 109.631211-32.298485l135.217063 133.613977c11.275885 11.275885 29.557763 11.275885 40.833647 0C914.082359 903.0802 914.082359 884.799477 902.807629 873.522437zM472.754424 610.923567c0-79.73389 64.638549-144.370129 144.371284-144.370129 79.73158 0 144.368974 64.636239 144.368974 144.370129 0 79.73158-64.637394 144.370129-144.368974 144.370129C537.392973 755.293696 472.754424 690.655147 472.754424 610.923567z" fill="#272636" ></path></symbol><symbol id="icon-yijiankaimen" viewBox="0 0 1024 1024"><path d="M877.9776 1.0496h-598.912a23.8592 23.8592 0 0 0-23.9488 23.7568v355.2768h32.9472a70.784 70.784 0 0 1-15.2832-44.1088 70.976 70.976 0 0 1 30.2592-58.2912V48.576h550.9888v17.0752L602.4832 246.8096v775.7312l252.9152-182.144a23.8976 23.8976 0 0 0 22.592 16.1536 23.8592 23.8592 0 0 0 23.9488-23.7568V24.8192A23.872 23.872 0 0 0 877.9776 1.0496zM697.5104 652.7488c-11.3024 0-20.7104-13.8496-23.1424-32.3712h-26.9696v-20.7872h27.3536c2.8672-17.3952 11.904-30.1952 22.7456-30.1952 13.12 0 23.7696 18.6624 23.7696 41.6896 0 23.0144-10.624 41.664-23.7568 41.664z m-403.5328-34.3552c2.816 2.7776 5.8752 5.248 9.0368 7.5008v206.8864a23.8592 23.8592 0 0 1-23.9488 23.7568 23.8592 23.8592 0 0 1-23.9488-23.7568V523.5072h32.9472a71.4624 71.4624 0 0 0 5.9136 94.8864z m171.3408-188.6336a24.0384 24.0384 0 0 1 0 34.2144l-116.7488 115.8272a24.512 24.512 0 0 1-34.4832 0 24.064 24.064 0 0 1 0-34.2016l75.1488-74.5472H145.9712c-13.4656 0-24.3712-10.8288-24.3712-24.1792s10.8928-24.1792 24.384-24.1792h243.2512l-75.1488-74.5472a24.0384 24.0384 0 0 1 0-34.1888 24.5248 24.5248 0 0 1 34.4832 0l116.7488 115.8016z m0 0"  ></path></symbol></svg>'),
3
+  (function (n) {
4
+    var t = (t = document.getElementsByTagName("script"))[t.length - 1],
5
+      e = t.getAttribute("data-injectcss"),
6
+      t = t.getAttribute("data-disable-injectsvg");
7
+    if (!t) {
8
+      var i,
9
+        a,
10
+        o,
11
+        l,
12
+        h,
13
+        v = function (t, e) {
14
+          e.parentNode.insertBefore(t, e);
15
+        };
16
+      if (e && !n.__iconfont__svg__cssinject__) {
17
+        n.__iconfont__svg__cssinject__ = !0;
18
+        try {
19
+          document.write(
20
+            "<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>"
21
+          );
22
+        } catch (t) {
23
+          console && console.log(t);
24
+        }
25
+      }
26
+      (i = function () {
27
+        let t,
28
+          e = document.createElement("div");
29
+        (e.innerHTML = n._iconfont_svg_string_4501842),
30
+          (e = e.getElementsByTagName("svg")[0]) &&
31
+            (e.setAttribute("aria-hidden", "true"),
32
+            (e.style.position = "absolute"),
33
+            (e.style.width = 0),
34
+            (e.style.height = 0),
35
+            (e.style.overflow = "hidden"),
36
+            (e = e),
37
+            (t = document.body).firstChild ? v(e, t.firstChild) : t.appendChild(e));
38
+      }),
39
+        document.addEventListener
40
+          ? ~["complete", "loaded", "interactive"].indexOf(document.readyState)
41
+            ? setTimeout(i, 0)
42
+            : ((a = function () {
43
+                document.removeEventListener("DOMContentLoaded", a, !1), i();
44
+              }),
45
+              document.addEventListener("DOMContentLoaded", a, !1))
46
+          : document.attachEvent &&
47
+            ((o = i),
48
+            (l = n.document),
49
+            (h = !1),
50
+            d(),
51
+            (l.onreadystatechange = function () {
52
+              "complete" == l.readyState && ((l.onreadystatechange = null), c());
53
+            }));
54
+    }
55
+    function c() {
56
+      h || ((h = !0), o());
57
+    }
58
+    function d() {
59
+      try {
60
+        l.documentElement.doScroll("left");
61
+      } catch (t) {
62
+        return void setTimeout(d, 50);
63
+      }
64
+      c();
65
+    }
66
+  })(window);

+ 51
- 0
src/assets/iconsvg/iconfont.json Целия файл

@@ -0,0 +1,51 @@
1
+{
2
+  "id": "4501842",
3
+  "name": "智慧云储能平台",
4
+  "font_family": "iconfont",
5
+  "css_prefix_text": "icon-",
6
+  "description": "智慧云储能平台web端图标",
7
+  "glyphs": [
8
+    {
9
+      "icon_id": "712342",
10
+      "name": "柱状图",
11
+      "font_class": "icon-bar-graph",
12
+      "unicode": "e663",
13
+      "unicode_decimal": 58979
14
+    },
15
+    {
16
+      "icon_id": "4354241",
17
+      "name": "表单组件-表格",
18
+      "font_class": "biaodanzujian-biaoge",
19
+      "unicode": "eb94",
20
+      "unicode_decimal": 60308
21
+    },
22
+    {
23
+      "icon_id": "4354248",
24
+      "name": "图表-折线图",
25
+      "font_class": "tubiao-zhexiantu",
26
+      "unicode": "eb96",
27
+      "unicode_decimal": 60310
28
+    },
29
+    {
30
+      "icon_id": "10487414",
31
+      "name": "已开门",
32
+      "font_class": "yikaimen",
33
+      "unicode": "e639",
34
+      "unicode_decimal": 58937
35
+    },
36
+    {
37
+      "icon_id": "1167139",
38
+      "name": "查询",
39
+      "font_class": "chaxun",
40
+      "unicode": "e61b",
41
+      "unicode_decimal": 58907
42
+    },
43
+    {
44
+      "icon_id": "4538218",
45
+      "name": "一键开门",
46
+      "font_class": "yijiankaimen",
47
+      "unicode": "e62d",
48
+      "unicode_decimal": 58925
49
+    }
50
+  ]
51
+}

+ 31
- 0
src/assets/iconsvg/iconfont.svg Целия файл

@@ -0,0 +1,31 @@
1
+<?xml version="1.0" standalone="no"?>
2
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
+<svg xmlns="http://www.w3.org/2000/svg">
4
+  <metadata>Created by iconfont</metadata>
5
+  <defs>
6
+  <font id="iconfont" horiz-adv-x="1024">
7
+    <font-face
8
+      font-family="iconfont"
9
+      font-weight="400"
10
+      font-stretch="normal"
11
+      units-per-em="1024"
12
+      ascent="896"
13
+      descent="-128"
14
+    />
15
+      <missing-glyph />
16
+      
17
+      <glyph glyph-name="icon-bar-graph" unicode="&#58979;" d="M441.692 816.582h125.944v-881.11h-125.944v881.11zM378.719-127.499h251.889v1007.053h-251.889v-1007.053zM63.86 438.749h125.943v-503.277l-125.943 0v503.277zM0.887-127.499h251.889v629.219h-251.889v-629.219zM819.359 627.699h125.675v-691.69h-125.675v691.69zM756.35-127.298h251.491l0 817.804h-251.491v-817.804z"  horiz-adv-x="1024" />
18
+      
19
+      <glyph glyph-name="biaodanzujian-biaoge" unicode="&#60308;" d="M96 736v-704h832V736H96z m309.344-400.192v160h192v-160h-192z m192-64V96h-192v175.808h192zM160 495.808h181.344v-160H160v160z m501.344 0H864v-160h-202.656v160zM864 672v-112.192H160V672h704zM160 271.808h181.344V96H160v175.808zM661.344 96v175.808H864V96h-202.656z"  horiz-adv-x="1024" />
20
+      
21
+      <glyph glyph-name="tubiao-zhexiantu" unicode="&#60310;" d="M896 0H96a32 32 0 0 0-32 32V672a32 32 0 0 0 64 0v-608h768a32 32 0 1 0 0-64zM247.008 256a32 32 0 0 0-20.992 56.192l200.992 174.24a32 32 0 0 0 42.272-0.288l172.128-153.44 229.088 246.304a32 32 0 0 0 46.88-43.616l-250.432-269.216a31.936 31.936 0 0 0-44.704-2.08l-174.56 155.52-179.744-155.84a31.872 31.872 0 0 0-20.928-7.776z"  horiz-adv-x="1024" />
22
+      
23
+      <glyph glyph-name="yikaimen" unicode="&#58937;" d="M857.6 46.4h-512V211.2h30.4v-136h451.2V632H376v-60.8h-30.4v89.6h512v-614.4z m0 0M558.4-59.2h-32V827.2h32l299.2-108.8v-667.2l-299.2-110.4z m-1.6 856v-824l270.4 99.2v624L556.8 796.8zM196.8 75.2h164.8v-30.4H196.8v30.4z m660.8 0h60.8v-30.4h-60.8v30.4z m91.2 0h44.8v-30.4h-44.8v30.4z m0 0M256 144v126.4H30.4V481.6H256V608l232-232L256 144zM60.8 300.8h225.6v-83.2l160 158.4-158.4 160v-83.2H60.8v-152z m555.2 9.6l-27.2 12.8 12.8 27.2v68.8l-12.8 27.2 27.2 12.8 16-33.6v-81.6l-16-33.6z m-480-235.2h30.4v-30.4H136v30.4z m180.8 526.4h-30.4v120h256v-30.4H316.8v-89.6z m-30.4-451.2h30.4v-89.6h-30.4v89.6z m0 0"  horiz-adv-x="1024" />
24
+      
25
+      <glyph glyph-name="chaxun" unicode="&#58907;" d="M229.83609 718.808188l461.985567 0 0-57.748052-461.985567 0 0 57.748052ZM228.296527 602.744999l461.985567 0 0-57.748052-461.985567 0 0 57.748052ZM114.341142 835.245585l692.976619 0 0-461.984413 57.748052 0 0 461.984413c0 31.893094-25.854958 57.748052-57.748052 57.748052l-692.976619 0c-31.893094 0-57.748052-25.854958-57.748052-57.748052l0-808.472722c0-31.893094 25.854958-57.748052 57.748052-57.748052l404.236361 0 0 57.748052-404.236361 0L114.341142 835.245585zM229.451488 371.758568l0-57.748052 140.452501 0c0 20.068603 2.939376 39.447694 8.386172 57.748052L229.451488 371.758568zM465.562482 487.254671 228.296527 487.254671l0-57.748052 175.543682 0C420.103216 452.819508 441.148916 472.545087 465.562482 487.254671zM902.807629 22.477563 770.391347 153.321943c30.443618 35.382231 48.851387 81.416668 48.851387 131.75449 0 111.626984-90.492352 202.11818-202.117026 202.11818-111.625829 0-202.11818-90.491197-202.11818-202.11818 0-111.624674 90.492352-202.11818 202.11818-202.11818 40.412086 0 78.049957 11.867225 109.631211 32.298485l135.217063-133.613977c11.275885-11.275885 29.557763-11.275885 40.833647 0C914.082359-7.0802 914.082359 11.200523 902.807629 22.477563zM472.754424 285.076433c0 79.73389 64.638549 144.370129 144.371284 144.370129 79.73158 0 144.368974-64.636239 144.368974-144.370129 0-79.73158-64.637394-144.370129-144.368974-144.370129C537.392973 140.706304 472.754424 205.344853 472.754424 285.076433z"  horiz-adv-x="1045" />
26
+      
27
+      <glyph glyph-name="yijiankaimen" unicode="&#58925;" d="M877.9776 894.9504h-598.912a23.8592 23.8592 0 0 1-23.9488-23.7568v-355.2768h32.9472a70.784 70.784 0 0 0-15.2832 44.1088 70.976 70.976 0 0 0 30.2592 58.2912V847.424h550.9888v-17.0752L602.4832 649.1904v-775.7312l252.9152 182.144a23.8976 23.8976 0 0 1 22.592-16.1536 23.8592 23.8592 0 0 1 23.9488 23.7568V871.1808A23.872 23.872 0 0 1 877.9776 894.9504zM697.5104 243.2512c-11.3024 0-20.7104 13.8496-23.1424 32.3712h-26.9696v20.7872h27.3536c2.8672 17.3952 11.904 30.1952 22.7456 30.1952 13.12 0 23.7696-18.6624 23.7696-41.6896 0-23.0144-10.624-41.664-23.7568-41.664z m-403.5328 34.3552c2.816-2.7776 5.8752-5.248 9.0368-7.5008v-206.8864a23.8592 23.8592 0 0 0-23.9488-23.7568 23.8592 23.8592 0 0 0-23.9488 23.7568V372.4928h32.9472a71.4624 71.4624 0 0 1 5.9136-94.8864z m171.3408 188.6336a24.0384 24.0384 0 0 0 0-34.2144l-116.7488-115.8272a24.512 24.512 0 0 0-34.4832 0 24.064 24.064 0 0 0 0 34.2016l75.1488 74.5472H145.9712c-13.4656 0-24.3712 10.8288-24.3712 24.1792s10.8928 24.1792 24.384 24.1792h243.2512l-75.1488 74.5472a24.0384 24.0384 0 0 0 0 34.1888 24.5248 24.5248 0 0 0 34.4832 0l116.7488-115.8016z m0 0"  horiz-adv-x="1024" />
28
+      
29
+    </font>
30
+  </defs>
31
+</svg>

Двоични данни
src/assets/iconsvg/iconfont.ttf Целия файл


Двоични данни
src/assets/iconsvg/iconfont.woff Целия файл


Двоични данни
src/assets/iconsvg/iconfont.woff2 Целия файл


Двоични данни
src/assets/images/403.png Целия файл


Двоични данни
src/assets/images/404.png Целия файл


Двоични данни
src/assets/images/500.png Целия файл


Двоични данни
src/assets/images/Electricbox.png Целия файл


Двоични данни
src/assets/images/avatar.gif Целия файл


Двоични данни
src/assets/images/charging.png Целия файл


Двоични данни
src/assets/images/chaxun.png Целия файл


Двоични данни
src/assets/images/discharge.png Целия файл


Двоични данни
src/assets/images/dw.36d3b54f.png Целия файл


Двоични данни
src/assets/images/gu.png Целия файл


Двоични данни
src/assets/images/gu1.png Целия файл


Двоични данни
src/assets/images/household.png Целия файл


+ 33
- 0
src/assets/images/login_bg.svg Целия файл

@@ -0,0 +1,33 @@
1
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" baseProfile="full" width="100%" height="100%" viewBox="0 0 1400 800">
2
+
3
+  <rect x="1300" y="400" rx="40" ry="40" width="150" height="150" stroke="rgb(129, 201, 149)" fill="rgb(129, 201, 149)">
4
+    <animateTransform attributeType="XML" attributeName="transform" begin="0s" dur="35s" type="rotate" from="0 1450 550" to="360 1450 550" repeatCount="indefinite"/>
5
+  </rect>
6
+
7
+  <path d="M 100 350 A 150 150 0 1 1 400 350 Q400 370 380 370 L 250 370 L 120 370 Q100 370 100 350" fill="#a2b3ff">
8
+    <animateMotion path="M 800 -200 L 800 -300 L 800 -200" dur="20s" begin="0s" repeatCount="indefinite"/>
9
+    <animateTransform attributeType="XML" attributeName="transform" begin="0s" dur="30s" type="rotate" values="0 210 530 ; -30 210 530 ; 0 210 530" keyTimes="0 ; 0.5 ; 1" repeatCount="indefinite"/>
10
+  </path>
11
+
12
+  <circle cx="150" cy="150" r="180" stroke="#85FFBD" fill="#85FFBD">
13
+    <animateMotion path="M 0 0 L 40 20 Z" dur="5s" repeatCount="indefinite"/>
14
+  </circle>
15
+
16
+  <!-- 三角形 -->
17
+  <path d="M 165 580 L 270 580 Q275 578 270 570 L 223 483 Q220 480 217 483 L 165 570 Q160 578 165 580"  fill="#a2b3ff">
18
+    <animateTransform attributeType="XML" attributeName="transform" begin="0s" dur="35s" type="rotate" from="0 210 530" to="360 210 530" repeatCount="indefinite"/>
19
+  </path>
20
+
21
+<!--  <circle cx="1200" cy="600" r="30" stroke="rgb(241, 243, 244)" fill="rgb(241, 243, 244)">-->
22
+<!--    <animateMotion path="M 0 0 L -20 40 Z" dur="9s" repeatCount="indefinite"/>-->
23
+<!--  </circle>-->
24
+
25
+  <path d="M 100 350 A 40 40 0 1 1 180 350 L 180 430 A 40 40 0 1 1 100 430 Z" fill="#3054EB">
26
+    <animateMotion path="M 140 390 L 180 360 L 140 390" dur="20s" begin="0s" repeatCount="indefinite"/>
27
+    <animateTransform attributeType="XML" attributeName="transform" begin="0s" dur="30s" type="rotate" values="0 140 390; -60 140 390; 0 140 390" keyTimes="0 ; 0.5 ; 1" repeatCount="indefinite"/>
28
+  </path>
29
+
30
+  <rect x="400" y="600" rx="40" ry="40" width="100" height="100" stroke="rgb(129, 201, 149)" fill="#3054EB">
31
+    <animateTransform attributeType="XML" attributeName="transform" begin="0s" dur="35s" type="rotate" from="-30 550 750" to="330 550 750" repeatCount="indefinite"/>
32
+  </rect>
33
+</svg>

Двоични данни
src/assets/images/login_left.png Целия файл


Двоични данни
src/assets/images/login_left1.png Целия файл


Двоични данни
src/assets/images/login_left2.png Целия файл


Двоични данни
src/assets/images/login_left3.png Целия файл


Двоични данни
src/assets/images/login_left4.png Целия файл


Двоични данни
src/assets/images/login_left5.png Целия файл


+ 5
- 0
src/assets/images/logo.svg
Файловите разлики са ограничени, защото са твърде много
Целия файл


Двоични данни
src/assets/images/msg01.png Целия файл


Двоични данни
src/assets/images/msg02.png Целия файл


Двоични данни
src/assets/images/msg03.png Целия файл


Двоични данни
src/assets/images/msg04.png Целия файл


Двоични данни
src/assets/images/msg05.png Целия файл


Двоични данни
src/assets/images/notData.png Целия файл


Двоични данни
src/assets/images/qian.png Целия файл


Двоични данни
src/assets/images/server.png Целия файл


Двоични данни
src/assets/images/server1.png Целия файл


Двоични данни
src/assets/images/server2.png Целия файл


+ 0
- 0
src/assets/images/welcome.png Целия файл


Някои файлове не бяха показани, защото твърде много файлове са промени

Loading…
Отказ
Запис