diff --git a/package.json b/package.json
index f80b910..6b24583 100644
--- a/package.json
+++ b/package.json
@@ -19,8 +19,11 @@
"@kjgl77/datav-vue3": "^1.6.1",
"@vee-validate/rules": "4.5.8",
"@vueuse/core": "9.5.0",
+ "animate.css": "^4.1.1",
"axios": "0.27.2",
"bpmn-js": "^11.4.1",
+ "can-autoplay": "^3.0.2",
+ "crypto-js": "^4.2.0",
"diagram-js": "^11.9.1",
"echarts": "5.4.0",
"element-plus": "2.2.28",
@@ -29,6 +32,7 @@
"highlight.js": "11.7.0",
"js-cookie": "3.0.1",
"jsencrypt": "3.3.1",
+ "mitt": "^3.0.1",
"nprogress": "0.2.0",
"pinia": "2.0.22",
"splitpanes": "^3.1.5",
@@ -39,6 +43,7 @@
"vue-cropper": "1.0.3",
"vue-draggable-plus": "^0.3.0",
"vue-router": "4.1.4",
+ "vue3-seamless-scroll": "^2.0.1",
"vuedraggable": "^2.24.3",
"vxe-table": "^4.5.14",
"vxe-table-plugin-antd": "^3.1.0",
@@ -50,9 +55,17 @@
"xe-utils": "^3.5.14"
},
"devDependencies": {
+ "@typescript-eslint/eslint-plugin": "^5.19.0",
+ "@typescript-eslint/parser": "^5.19.0",
+ "@types/crypto-js": "^4.2.1",
+ "@vicons/antd": "^0.12.0",
+ "@vicons/ionicons5": "^0.12.0",
+ "@vicons/tabler": "^0.12.0",
"@vitejs/plugin-vue": "3.1.0",
"@vue/compiler-sfc": "3.2.45",
+ "naive-ui": "^2.34.4",
"sass": "1.56.1",
+ "typescript": "^4.7.4",
"unplugin-auto-import": "^0.11.5",
"vite": "^3.2.3",
"vite-plugin-compression": "0.5.1",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 7f2e064..f8a3365 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -17,12 +17,21 @@ dependencies:
'@vueuse/core':
specifier: 9.5.0
version: 9.5.0(vue@3.2.45)
+ animate.css:
+ specifier: ^4.1.1
+ version: 4.1.1
axios:
specifier: 0.27.2
version: 0.27.2
bpmn-js:
specifier: ^11.4.1
version: 11.5.0
+ can-autoplay:
+ specifier: ^3.0.2
+ version: 3.0.2
+ crypto-js:
+ specifier: ^4.2.0
+ version: 4.2.0
diagram-js:
specifier: ^11.9.1
version: 11.13.1
@@ -47,12 +56,15 @@ dependencies:
jsencrypt:
specifier: 3.3.1
version: 3.3.1
+ mitt:
+ specifier: ^3.0.1
+ version: 3.0.1
nprogress:
specifier: 0.2.0
version: 0.2.0
pinia:
specifier: 2.0.22
- version: 2.0.22(vue@3.2.45)
+ version: 2.0.22(typescript@4.9.5)(vue@3.2.45)
splitpanes:
specifier: ^3.1.5
version: 3.1.5
@@ -77,44 +89,71 @@ dependencies:
vue-router:
specifier: 4.1.4
version: 4.1.4(vue@3.2.45)
+ vue3-seamless-scroll:
+ specifier: ^2.0.1
+ version: 2.0.1
vuedraggable:
specifier: ^2.24.3
version: 2.24.3
vxe-table:
specifier: ^4.5.14
- version: 4.5.20(vue@3.2.45)(xe-utils@3.5.22)
+ version: 4.5.21(vue@3.2.45)(xe-utils@3.5.22)
vxe-table-plugin-antd:
specifier: ^3.1.0
- version: 3.3.0(vxe-table@4.5.20)
+ version: 3.3.0(vxe-table@4.5.21)
vxe-table-plugin-charts:
specifier: ^3.1.0
- version: 3.3.1(vxe-table@4.5.20)
+ version: 3.3.1(vxe-table@4.5.21)
vxe-table-plugin-element:
specifier: ^3.1.0
- version: 3.3.0(vxe-table@4.5.20)
+ version: 3.3.0(vxe-table@4.5.21)
vxe-table-plugin-menus:
specifier: ^3.2.1
- version: 3.3.0(vxe-table@4.5.20)
+ version: 3.3.0(vxe-table@4.5.21)
vxe-table-plugin-renderer:
specifier: ^3.1.0
- version: 3.3.0(vxe-table@4.5.20)
+ version: 3.3.0(vxe-table@4.5.21)
vxe-table-plugin-validator:
specifier: ^3.0.0
- version: 3.0.0(vxe-table@4.5.20)
+ version: 3.0.0(vxe-table@4.5.21)
xe-utils:
specifier: ^3.5.14
version: 3.5.22
devDependencies:
+ '@types/crypto-js':
+ specifier: ^4.2.1
+ version: 4.2.2
+ '@typescript-eslint/eslint-plugin':
+ specifier: ^5.19.0
+ version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@4.9.5)
+ '@typescript-eslint/parser':
+ specifier: ^5.19.0
+ version: 5.62.0(eslint@8.57.0)(typescript@4.9.5)
+ '@vicons/antd':
+ specifier: ^0.12.0
+ version: 0.12.0
+ '@vicons/ionicons5':
+ specifier: ^0.12.0
+ version: 0.12.0
+ '@vicons/tabler':
+ specifier: ^0.12.0
+ version: 0.12.0
'@vitejs/plugin-vue':
specifier: 3.1.0
version: 3.1.0(vite@3.2.8)(vue@3.2.45)
'@vue/compiler-sfc':
specifier: 3.2.45
version: 3.2.45
+ naive-ui:
+ specifier: ^2.34.4
+ version: 2.38.1(vue@3.2.45)
sass:
specifier: 1.56.1
version: 1.56.1
+ typescript:
+ specifier: ^4.7.4
+ version: 4.9.5
unplugin-auto-import:
specifier: ^0.11.5
version: 0.11.5(@vueuse/core@9.5.0)
@@ -133,6 +172,11 @@ devDependencies:
packages:
+ /@aashutoshrathi/word-wrap@1.2.6:
+ resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
/@antfu/utils@0.7.7:
resolution: {integrity: sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==}
dev: true
@@ -157,7 +201,6 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
regenerator-runtime: 0.14.1
- dev: false
/@babel/types@7.24.0:
resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==}
@@ -174,6 +217,22 @@ packages:
preact: 10.19.6
dev: false
+ /@css-render/plugin-bem@0.15.12(css-render@0.15.12):
+ resolution: {integrity: sha512-Lq2jSOZn+wYQtsyaFj6QRz2EzAnd3iW5fZeHO1WSXQdVYwvwGX0ZiH3X2JQgtgYLT1yeGtrwrqJdNdMEUD2xTw==}
+ peerDependencies:
+ css-render: ~0.15.12
+ dependencies:
+ css-render: 0.15.12
+ dev: true
+
+ /@css-render/vue3-ssr@0.15.12(vue@3.2.45):
+ resolution: {integrity: sha512-AQLGhhaE0F+rwybRCkKUdzBdTEM/5PZBYy+fSYe1T9z9+yxMuV/k7ZRqa4M69X+EI1W8pa4kc9Iq2VjQkZx4rg==}
+ peerDependencies:
+ vue: ^3.0.11
+ dependencies:
+ vue: 3.2.45
+ dev: true
+
/@ctrl/tinycolor@3.6.1:
resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==}
engines: {node: '>=10'}
@@ -187,6 +246,10 @@ packages:
vue: 3.2.45
dev: false
+ /@emotion/hash@0.8.0:
+ resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==}
+ dev: true
+
/@esbuild/android-arm@0.15.18:
resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==}
engines: {node: '>=12'}
@@ -205,6 +268,43 @@ packages:
dev: true
optional: true
+ /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0):
+ resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+ dependencies:
+ eslint: 8.57.0
+ eslint-visitor-keys: 3.4.3
+ dev: true
+
+ /@eslint-community/regexpp@4.10.0:
+ resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+ dev: true
+
+ /@eslint/eslintrc@2.1.4:
+ resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.3.4
+ espree: 9.6.1
+ globals: 13.24.0
+ ignore: 5.3.1
+ import-fresh: 3.3.0
+ js-yaml: 4.1.0
+ minimatch: 3.1.2
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@eslint/js@8.57.0:
+ resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dev: true
+
/@floating-ui/core@1.6.0:
resolution: {integrity: sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==}
dependencies:
@@ -222,6 +322,26 @@ packages:
resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==}
dev: false
+ /@humanwhocodes/config-array@0.11.14:
+ resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
+ engines: {node: '>=10.10.0'}
+ dependencies:
+ '@humanwhocodes/object-schema': 2.0.2
+ debug: 4.3.4
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@humanwhocodes/module-importer@1.0.1:
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
+ dev: true
+
+ /@humanwhocodes/object-schema@2.0.2:
+ resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==}
+ dev: true
+
/@jiaminghi/bezier-curve@0.0.9:
resolution: {integrity: sha512-u9xJPOEl6Dri2E9FfmJoGxYQY7vYJkURNX04Vj64tdi535tPrpkuf9Sm0lNr3QTKdHQh0DdNRsaa62FLQNQEEw==}
dependencies:
@@ -258,6 +378,10 @@ packages:
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
dev: true
+ /@juggle/resize-observer@3.4.0:
+ resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==}
+ dev: true
+
/@kjgl77/datav-vue3@1.7.2(vue@3.2.45):
resolution: {integrity: sha512-Fvllk4rJEdUwLdumvsnPADZNPMKkDdC7u/vJEAPBsMh6UgFQytIT+SVtjj1vy/TXtgcH/te9hlXBPgV8LVSmQw==}
dependencies:
@@ -314,19 +438,29 @@ packages:
engines: {node: '>=10.13.0'}
dev: true
+ /@types/crypto-js@4.2.2:
+ resolution: {integrity: sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==}
+ dev: true
+
/@types/estree@1.0.5:
resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
dev: true
+ /@types/json-schema@7.0.15:
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+ dev: true
+
+ /@types/katex@0.16.7:
+ resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==}
+ dev: true
+
/@types/lodash-es@4.17.12:
resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==}
dependencies:
'@types/lodash': 4.14.202
- dev: false
/@types/lodash@4.14.202:
resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==}
- dev: false
/@types/node@20.11.25:
resolution: {integrity: sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==}
@@ -334,6 +468,10 @@ packages:
undici-types: 5.26.5
dev: true
+ /@types/semver@7.5.8:
+ resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==}
+ dev: true
+
/@types/sortablejs@1.15.8:
resolution: {integrity: sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==}
dev: false
@@ -351,10 +489,156 @@ packages:
resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
dev: false
+ /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@4.9.5):
+ resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ '@typescript-eslint/parser': ^5.0.0
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@eslint-community/regexpp': 4.10.0
+ '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@4.9.5)
+ '@typescript-eslint/scope-manager': 5.62.0
+ '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@4.9.5)
+ '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@4.9.5)
+ debug: 4.3.4
+ eslint: 8.57.0
+ graphemer: 1.4.0
+ ignore: 5.3.1
+ natural-compare-lite: 1.4.0
+ semver: 7.6.0
+ tsutils: 3.21.0(typescript@4.9.5)
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.9.5):
+ resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/scope-manager': 5.62.0
+ '@typescript-eslint/types': 5.62.0
+ '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5)
+ debug: 4.3.4
+ eslint: 8.57.0
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/scope-manager@5.62.0:
+ resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ '@typescript-eslint/types': 5.62.0
+ '@typescript-eslint/visitor-keys': 5.62.0
+ dev: true
+
+ /@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@4.9.5):
+ resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: '*'
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5)
+ '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@4.9.5)
+ debug: 4.3.4
+ eslint: 8.57.0
+ tsutils: 3.21.0(typescript@4.9.5)
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/types@5.62.0:
+ resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dev: true
+
+ /@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5):
+ resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/types': 5.62.0
+ '@typescript-eslint/visitor-keys': 5.62.0
+ debug: 4.3.4
+ globby: 11.1.0
+ is-glob: 4.0.3
+ semver: 7.6.0
+ tsutils: 3.21.0(typescript@4.9.5)
+ typescript: 4.9.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@4.9.5):
+ resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
+ '@types/json-schema': 7.0.15
+ '@types/semver': 7.5.8
+ '@typescript-eslint/scope-manager': 5.62.0
+ '@typescript-eslint/types': 5.62.0
+ '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5)
+ eslint: 8.57.0
+ eslint-scope: 5.1.1
+ semver: 7.6.0
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+ dev: true
+
+ /@typescript-eslint/visitor-keys@5.62.0:
+ resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ '@typescript-eslint/types': 5.62.0
+ eslint-visitor-keys: 3.4.3
+ dev: true
+
+ /@ungap/structured-clone@1.2.0:
+ resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
+ dev: true
+
/@vee-validate/rules@4.5.8:
resolution: {integrity: sha512-NRK+sdsarBB90Xx7r6NyTPGmc/KoJM5Sp01bkVG3SrnNnPL9z1NvmXOC1cAhwWROkvNMueQlIbuG9+RWaT/S5w==}
dev: false
+ /@vicons/antd@0.12.0:
+ resolution: {integrity: sha512-C0p6aO1EmGG1QHrqgUWQS1No20934OdWSRQshM5NIDK5H1On6tC26U0hT6Rmp40KfUsvhvX5YW8BoWJdNFifPg==}
+ dev: true
+
+ /@vicons/ionicons5@0.12.0:
+ resolution: {integrity: sha512-Iy1EUVRpX0WWxeu1VIReR1zsZLMc4fqpt223czR+Rpnrwu7pt46nbnC2ycO7ItI/uqDLJxnbcMC7FujKs9IfFA==}
+ dev: true
+
+ /@vicons/tabler@0.12.0:
+ resolution: {integrity: sha512-3+wUFuxb7e8OzZ8Wryct1pzfA2vyoF4lwW98O9s27ZrfCGaJGNmqG+q8A7vQ92Mf+COCgxpK+rhNPTtTvaU6qw==}
+ dev: true
+
/@vitejs/plugin-vue@3.1.0(vite@3.2.8)(vue@3.2.45):
resolution: {integrity: sha512-fmxtHPjSOEIRg6vHYDaem+97iwCUg/uSIaTzp98lhELt2ISOQuDo2hbkBdXod0g15IhfPMQmAxh4heUks2zvDA==}
engines: {node: ^14.18.0 || >=16.0.0}
@@ -490,17 +774,43 @@ packages:
- '@vue/composition-api'
- vue
+ /acorn-jsx@5.3.2(acorn@8.11.3):
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ dependencies:
+ acorn: 8.11.3
+ dev: true
+
/acorn@8.11.3:
resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==}
engines: {node: '>=0.4.0'}
hasBin: true
dev: true
+ /ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+ dev: true
+
+ /animate.css@4.1.1:
+ resolution: {integrity: sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==}
+ dev: false
+
/ansi-regex@2.1.1:
resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==}
engines: {node: '>=0.10.0'}
dev: true
+ /ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+ dev: true
+
/ansi-styles@2.2.1:
resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==}
engines: {node: '>=0.10.0'}
@@ -521,6 +831,10 @@ packages:
picomatch: 2.3.1
dev: true
+ /argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+ dev: true
+
/arr-diff@4.0.0:
resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==}
engines: {node: '>=0.10.0'}
@@ -536,6 +850,11 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
+ /array-union@2.1.0:
+ resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
+ engines: {node: '>=8'}
+ dev: true
+
/array-unique@0.3.2:
resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==}
engines: {node: '>=0.10.0'}
@@ -548,7 +867,6 @@ packages:
/async-validator@4.2.5:
resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==}
- dev: false
/asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
@@ -569,6 +887,10 @@ packages:
- debug
dev: false
+ /balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ dev: true
+
/base@0.11.2:
resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==}
engines: {node: '>=0.10.0'}
@@ -647,6 +969,13 @@ packages:
moddle-xml: 10.1.0
dev: false
+ /brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+ dev: true
+
/braces@2.3.2:
resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==}
engines: {node: '>=0.10.0'}
@@ -687,6 +1016,15 @@ packages:
unset-value: 1.0.0
dev: true
+ /callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /can-autoplay@3.0.2:
+ resolution: {integrity: sha512-Ih6wc7yJB4TylS/mLyAW0Dj5Nh3Gftq/g966TcxgvpNCOzlbqTs85srAq7mwIspo4w8gnLCVVGroyCHfh6l9aA==}
+ dev: false
+
/chalk@1.1.3:
resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==}
engines: {node: '>=0.10.0'}
@@ -780,6 +1118,10 @@ packages:
resolution: {integrity: sha512-wGA++isMqiDq1jPYeyv2as/Bt/u+3iLW0rEa+8NQ82jAv3TgqMiCM+B2SaBdn2DfLilLjjq736YcezihRYhfxw==}
dev: false
+ /concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ dev: true
+
/copy-descriptor@0.1.1:
resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==}
engines: {node: '>=0.10.0'}
@@ -793,6 +1135,26 @@ packages:
vary: 1.1.2
dev: true
+ /cross-spawn@7.0.3:
+ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
+ engines: {node: '>= 8'}
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+ dev: true
+
+ /crypto-js@4.2.0:
+ resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==}
+ dev: false
+
+ /css-render@0.15.12:
+ resolution: {integrity: sha512-eWzS66patiGkTTik+ipO9qNGZ+uNuGyTmnz6/+EJIiFg8+3yZRpnMwgFo8YdXhQRsiePzehnusrxVvugNjXzbw==}
+ dependencies:
+ '@emotion/hash': 0.8.0
+ csstype: 3.0.11
+ dev: true
+
/css-select@4.3.0:
resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==}
dependencies:
@@ -826,6 +1188,29 @@ packages:
/csstype@2.6.21:
resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==}
+ /csstype@3.0.11:
+ resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==}
+ dev: true
+
+ /csstype@3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+ dev: true
+
+ /date-fns-tz@2.0.1(date-fns@2.30.0):
+ resolution: {integrity: sha512-fJCG3Pwx8HUoLhkepdsP7Z5RsucUi+ZBOxyM5d0ZZ6c4SdYustq0VMmOu6Wf7bli+yS/Jwp91TOCqn9jMcVrUA==}
+ peerDependencies:
+ date-fns: 2.x
+ dependencies:
+ date-fns: 2.30.0
+ dev: true
+
+ /date-fns@2.30.0:
+ resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==}
+ engines: {node: '>=0.11'}
+ dependencies:
+ '@babel/runtime': 7.24.0
+ dev: true
+
/dayjs@1.11.10:
resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==}
dev: false
@@ -858,6 +1243,10 @@ packages:
engines: {node: '>=0.10'}
dev: true
+ /deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+ dev: true
+
/define-property@0.2.5:
resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==}
engines: {node: '>=0.10.0'}
@@ -914,6 +1303,20 @@ packages:
resolution: {integrity: sha512-q2+aj+lnJcUweV7A9pdUrwFr4LHVmRPwTmQLtHPFz4aT7IBoryN6Iy+jmFku+oIzr5ebBkvtBCOb87+dJhb7bg==}
dev: false
+ /dir-glob@3.0.1:
+ resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
+ engines: {node: '>=8'}
+ dependencies:
+ path-type: 4.0.0
+ dev: true
+
+ /doctrine@3.0.0:
+ resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ esutils: 2.0.3
+ dev: true
+
/dom-serializer@0.2.2:
resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==}
dependencies:
@@ -1237,19 +1640,134 @@ packages:
engines: {node: '>=0.8.0'}
dev: true
+ /escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+ dev: true
+
/escape-string-regexp@5.0.0:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
dev: true
+ /eslint-scope@5.1.1:
+ resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
+ engines: {node: '>=8.0.0'}
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 4.3.0
+ dev: true
+
+ /eslint-scope@7.2.2:
+ resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+ dev: true
+
+ /eslint-visitor-keys@3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dev: true
+
+ /eslint@8.57.0:
+ resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ hasBin: true
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
+ '@eslint-community/regexpp': 4.10.0
+ '@eslint/eslintrc': 2.1.4
+ '@eslint/js': 8.57.0
+ '@humanwhocodes/config-array': 0.11.14
+ '@humanwhocodes/module-importer': 1.0.1
+ '@nodelib/fs.walk': 1.2.8
+ '@ungap/structured-clone': 1.2.0
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.3
+ debug: 4.3.4
+ doctrine: 3.0.0
+ escape-string-regexp: 4.0.0
+ eslint-scope: 7.2.2
+ eslint-visitor-keys: 3.4.3
+ espree: 9.6.1
+ esquery: 1.5.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 6.0.1
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ globals: 13.24.0
+ graphemer: 1.4.0
+ ignore: 5.3.1
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ is-path-inside: 3.0.3
+ js-yaml: 4.1.0
+ json-stable-stringify-without-jsonify: 1.0.1
+ levn: 0.4.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.2
+ natural-compare: 1.4.0
+ optionator: 0.9.3
+ strip-ansi: 6.0.1
+ text-table: 0.2.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /espree@9.6.1:
+ resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ acorn: 8.11.3
+ acorn-jsx: 5.3.2(acorn@8.11.3)
+ eslint-visitor-keys: 3.4.3
+ dev: true
+
+ /esquery@1.5.0:
+ resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
+ engines: {node: '>=0.10'}
+ dependencies:
+ estraverse: 5.3.0
+ dev: true
+
+ /esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+ dependencies:
+ estraverse: 5.3.0
+ dev: true
+
+ /estraverse@4.3.0:
+ resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
+ engines: {node: '>=4.0'}
+ dev: true
+
+ /estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+ dev: true
+
/estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+ /esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
/etag@1.8.1:
resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
engines: {node: '>= 0.6'}
dev: true
+ /evtd@0.2.4:
+ resolution: {integrity: sha512-qaeGN5bx63s/AXgQo8gj6fBkxge+OoLddLniox5qtLAEY5HSnuSlISXVPxnSae1dWblvTh4/HoMIB+mbMsvZzw==}
+ dev: true
+
/expand-brackets@2.1.4:
resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==}
engines: {node: '>=0.10.0'}
@@ -1296,6 +1814,10 @@ packages:
- supports-color
dev: true
+ /fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+ dev: true
+
/fast-glob@3.3.2:
resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
engines: {node: '>=8.6.0'}
@@ -1307,12 +1829,27 @@ packages:
micromatch: 4.0.5
dev: true
+ /fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+ dev: true
+
+ /fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+ dev: true
+
/fastq@1.17.1:
resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
dependencies:
reusify: 1.0.4
dev: true
+ /file-entry-cache@6.0.1:
+ resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+ dependencies:
+ flat-cache: 3.2.0
+ dev: true
+
/file-saver@2.0.5:
resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==}
dev: false
@@ -1334,6 +1871,27 @@ packages:
to-regex-range: 5.0.1
dev: true
+ /find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+ dev: true
+
+ /flat-cache@3.2.0:
+ resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+ dependencies:
+ flatted: 3.3.1
+ keyv: 4.5.4
+ rimraf: 3.0.2
+ dev: true
+
+ /flatted@3.3.1:
+ resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
+ dev: true
+
/follow-redirects@1.15.5:
resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==}
engines: {node: '>=4.0'}
@@ -1374,6 +1932,10 @@ packages:
universalify: 2.0.1
dev: true
+ /fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+ dev: true
+
/fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -1403,10 +1965,51 @@ packages:
is-glob: 4.0.3
dev: true
+ /glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+ dependencies:
+ is-glob: 4.0.3
+ dev: true
+
+ /glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+ dev: true
+
+ /globals@13.24.0:
+ resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ type-fest: 0.20.2
+ dev: true
+
+ /globby@11.1.0:
+ resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
+ engines: {node: '>=10'}
+ dependencies:
+ array-union: 2.1.0
+ dir-glob: 3.0.1
+ fast-glob: 3.3.2
+ ignore: 5.3.1
+ merge2: 1.4.1
+ slash: 3.0.0
+ dev: true
+
/graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
dev: true
+ /graphemer@1.4.0:
+ resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
+ dev: true
+
/hammerjs@2.0.8:
resolution: {integrity: sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==}
engines: {node: '>=0.8.0'}
@@ -1460,8 +2063,8 @@ packages:
kind-of: 4.0.0
dev: true
- /hasown@2.0.1:
- resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==}
+ /hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
dependencies:
function-bind: 1.1.2
@@ -1477,6 +2080,11 @@ packages:
engines: {node: '>=12.0.0'}
dev: false
+ /highlight.js@11.9.0:
+ resolution: {integrity: sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==}
+ engines: {node: '>=12.0.0'}
+ dev: true
+
/htm@3.1.1:
resolution: {integrity: sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ==}
dev: false
@@ -1496,6 +2104,11 @@ packages:
resolution: {integrity: sha512-XQ0yom/4KWTL29sLG+tyuycy7UmeaM/79GRtSJq6IG9cJGIPeBz5kwDCguie3TwxaMNIc3WtPi0cTa1XYHicpw==}
dev: false
+ /ignore@5.3.1:
+ resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
+ engines: {node: '>= 4'}
+ dev: true
+
/image-size@0.5.5:
resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==}
engines: {node: '>=0.10.0'}
@@ -1506,6 +2119,26 @@ packages:
resolution: {integrity: sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==}
dev: true
+ /import-fresh@3.3.0:
+ resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
+ engines: {node: '>=6'}
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+ dev: true
+
+ /imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+ dev: true
+
+ /inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+ dev: true
+
/inherits-browser@0.1.0:
resolution: {integrity: sha512-CJHHvW3jQ6q7lzsXPpapLdMx5hDpSF3FSh45pwsj6bKxJJ8Nl8v43i5yXnr3BdfOimGHKyniewQtnAIp3vyJJw==}
dev: false
@@ -1518,7 +2151,7 @@ packages:
resolution: {integrity: sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==}
engines: {node: '>= 0.10'}
dependencies:
- hasown: 2.0.1
+ hasown: 2.0.2
dev: true
/is-binary-path@2.1.0:
@@ -1535,14 +2168,14 @@ packages:
/is-core-module@2.13.1:
resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
dependencies:
- hasown: 2.0.1
+ hasown: 2.0.2
dev: true
/is-data-descriptor@1.0.1:
resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==}
engines: {node: '>= 0.4'}
dependencies:
- hasown: 2.0.1
+ hasown: 2.0.2
dev: true
/is-descriptor@0.1.7:
@@ -1597,6 +2230,11 @@ packages:
engines: {node: '>=0.12.0'}
dev: true
+ /is-path-inside@3.0.3:
+ resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
+ engines: {node: '>=8'}
+ dev: true
+
/is-plain-obj@1.1.0:
resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==}
engines: {node: '>=0.10.0'}
@@ -1618,6 +2256,10 @@ packages:
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
dev: true
+ /isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+ dev: true
+
/isobject@2.1.0:
resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==}
engines: {node: '>=0.10.0'}
@@ -1639,10 +2281,29 @@ packages:
engines: {node: '>=12'}
dev: false
+ /js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+ dependencies:
+ argparse: 2.0.1
+ dev: true
+
/jsencrypt@3.3.1:
resolution: {integrity: sha512-dVvV54GdFuJgmEKn+oBiaifDMen4p6o6j/lJh0OVMcouME8sST0bJ7bldIgKBQk4za0zyGn0/pm4vOznR25mLw==}
dev: false
+ /json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+ dev: true
+
+ /json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+ dev: true
+
+ /json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+ dev: true
+
/json5@1.0.2:
resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
hasBin: true
@@ -1662,6 +2323,12 @@ packages:
graceful-fs: 4.2.11
dev: true
+ /keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+ dependencies:
+ json-buffer: 3.0.1
+ dev: true
+
/kind-of@3.2.2:
resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==}
engines: {node: '>=0.10.0'}
@@ -1686,6 +2353,14 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
+ /levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ dev: true
+
/loader-utils@1.4.2:
resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==}
engines: {node: '>=4.0.0'}
@@ -1700,9 +2375,15 @@ packages:
engines: {node: '>=14'}
dev: true
+ /locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+ dependencies:
+ p-locate: 5.0.0
+ dev: true
+
/lodash-es@4.17.21:
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
- dev: false
/lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21):
resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==}
@@ -1716,9 +2397,19 @@ packages:
lodash-es: 4.17.21
dev: false
+ /lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+ dev: true
+
/lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
- dev: false
+
+ /lru-cache@6.0.0:
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+ engines: {node: '>=10'}
+ dependencies:
+ yallist: 4.0.0
+ dev: true
/magic-string@0.25.9:
resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
@@ -1824,10 +2515,20 @@ packages:
min-dash: 4.2.1
dev: false
+ /minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+ dependencies:
+ brace-expansion: 1.1.11
+ dev: true
+
/minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
dev: true
+ /mitt@3.0.1:
+ resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
+ dev: false
+
/mixin-deep@1.3.2:
resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==}
engines: {node: '>=0.10.0'}
@@ -1867,6 +2568,33 @@ packages:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
dev: true
+ /naive-ui@2.38.1(vue@3.2.45):
+ resolution: {integrity: sha512-AnU1FQ7K/CbhguAX++V4kCFjk7h7RvWt4nvZPRjORMpq+fUIlzD+EcQ5Cv1VqDloNF8+eMv4Akc2Ogacc9S+5A==}
+ peerDependencies:
+ vue: ^3.0.0
+ dependencies:
+ '@css-render/plugin-bem': 0.15.12(css-render@0.15.12)
+ '@css-render/vue3-ssr': 0.15.12(vue@3.2.45)
+ '@types/katex': 0.16.7
+ '@types/lodash': 4.14.202
+ '@types/lodash-es': 4.17.12
+ async-validator: 4.2.5
+ css-render: 0.15.12
+ csstype: 3.1.3
+ date-fns: 2.30.0
+ date-fns-tz: 2.0.1(date-fns@2.30.0)
+ evtd: 0.2.4
+ highlight.js: 11.9.0
+ lodash: 4.17.21
+ lodash-es: 4.17.21
+ seemly: 0.3.8
+ treemate: 0.3.11
+ vdirs: 0.1.8(vue@3.2.45)
+ vooks: 0.2.12(vue@3.2.45)
+ vue: 3.2.45
+ vueuc: 0.4.58(vue@3.2.45)
+ dev: true
+
/nanoid@3.3.7:
resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
@@ -1891,6 +2619,14 @@ packages:
- supports-color
dev: true
+ /natural-compare-lite@1.4.0:
+ resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
+ dev: true
+
+ /natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+ dev: true
+
/normalize-path@3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
@@ -1942,19 +2678,78 @@ packages:
isobject: 3.0.1
dev: true
+ /once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+ dependencies:
+ wrappy: 1.0.2
+ dev: true
+
+ /optionator@0.9.3:
+ resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ '@aashutoshrathi/word-wrap': 1.2.6
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ dev: true
+
+ /p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ yocto-queue: 0.1.0
+ dev: true
+
+ /p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+ dependencies:
+ p-limit: 3.1.0
+ dev: true
+
+ /parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+ dependencies:
+ callsites: 3.1.0
+ dev: true
+
/pascalcase@0.1.1:
resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==}
engines: {node: '>=0.10.0'}
dev: true
+ /path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+ dev: true
+
/path-intersection@2.2.1:
resolution: {integrity: sha512-9u8xvMcSfuOiStv9bPdnRJQhGQXLKurew94n4GPQCdH1nj9QKC9ObbNoIpiRq8skiOBxKkt277PgOoFgAt3/rA==}
dev: false
+ /path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+ dev: true
+
/path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
dev: true
+ /path-type@4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+ engines: {node: '>=8'}
+ dev: true
+
/pathe@0.2.0:
resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==}
dev: true
@@ -1971,7 +2766,7 @@ packages:
engines: {node: '>=8.6'}
dev: true
- /pinia@2.0.22(vue@3.2.45):
+ /pinia@2.0.22(typescript@4.9.5)(vue@3.2.45):
resolution: {integrity: sha512-u+b8/BC+tmvo3ACbYO2w5NfxHWFOjvvw9DQnyT0dW8aUMCPRQT5QnfZ5R5W2MzZBMTeZRMQI7V/QFbafmM9QHw==}
peerDependencies:
'@vue/composition-api': ^1.4.0
@@ -1984,6 +2779,7 @@ packages:
optional: true
dependencies:
'@vue/devtools-api': 6.6.1
+ typescript: 4.9.5
vue: 3.2.45
vue-demi: 0.14.7(vue@3.2.45)
dev: false
@@ -2066,6 +2862,16 @@ packages:
resolution: {integrity: sha512-gympg+T2Z1fG1unB8NH29yHJwnEaCH37Z32diPDku316OTnRPeMbiRV9kTrfZpocXjdfnWuFUl/Mj4BHaf6gnw==}
dev: false
+ /prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
+ dev: true
+
+ /punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
+ dev: true
+
/query-string@4.3.4:
resolution: {integrity: sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==}
engines: {node: '>=0.10.0'}
@@ -2096,7 +2902,6 @@ packages:
/regenerator-runtime@0.14.1:
resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
- dev: false
/regex-not@1.0.2:
resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==}
@@ -2116,6 +2921,11 @@ packages:
engines: {node: '>=0.10'}
dev: true
+ /resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+ dev: true
+
/resolve-url@0.2.1:
resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==}
deprecated: https://github.com/lydell/resolve-url#deprecated
@@ -2140,6 +2950,13 @@ packages:
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
dev: true
+ /rimraf@3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ hasBin: true
+ dependencies:
+ glob: 7.2.3
+ dev: true
+
/rollup@2.79.1:
resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==}
engines: {node: '>=10.0.0'}
@@ -2182,6 +2999,18 @@ packages:
resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==}
dev: true
+ /seemly@0.3.8:
+ resolution: {integrity: sha512-MW8Qs6vbzo0pHmDpFSYPna+lwpZ6Zk1ancbajw/7E8TKtHdV+1DfZZD+kKJEhG/cAoB/i+LiT+5msZOqj0DwRA==}
+ dev: true
+
+ /semver@7.6.0:
+ resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ lru-cache: 6.0.0
+ dev: true
+
/set-value@2.0.1:
resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==}
engines: {node: '>=0.10.0'}
@@ -2192,6 +3021,23 @@ packages:
split-string: 3.1.0
dev: true
+ /shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+ dependencies:
+ shebang-regex: 3.0.0
+ dev: true
+
+ /shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /slash@3.0.0:
+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+ engines: {node: '>=8'}
+ dev: true
+
/snapdragon-node@2.1.1:
resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==}
engines: {node: '>=0.10.0'}
@@ -2303,6 +3149,18 @@ packages:
ansi-regex: 2.1.1
dev: true
+ /strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+ dependencies:
+ ansi-regex: 5.0.1
+ dev: true
+
+ /strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+ dev: true
+
/strip-literal@1.3.0:
resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==}
dependencies:
@@ -2367,6 +3225,15 @@ packages:
stable: 0.1.8
dev: true
+ /text-table@0.2.0:
+ resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
+ dev: true
+
+ /throttle-debounce@5.0.0:
+ resolution: {integrity: sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==}
+ engines: {node: '>=12.22'}
+ dev: false
+
/tiny-emitter@2.1.0:
resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==}
dev: false
@@ -2416,10 +3283,45 @@ packages:
engines: {node: '>= 0.4'}
dev: true
+ /treemate@0.3.11:
+ resolution: {integrity: sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg==}
+ dev: true
+
+ /tslib@1.14.1:
+ resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
+ dev: true
+
/tslib@2.3.0:
resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==}
dev: false
+ /tsutils@3.21.0(typescript@4.9.5):
+ resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
+ engines: {node: '>= 6'}
+ peerDependencies:
+ typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
+ dependencies:
+ tslib: 1.14.1
+ typescript: 4.9.5
+ dev: true
+
+ /type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ prelude-ls: 1.2.1
+ dev: true
+
+ /type-fest@0.20.2:
+ resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
/ufo@1.4.0:
resolution: {integrity: sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==}
dev: true
@@ -2441,7 +3343,7 @@ packages:
pkg-types: 1.0.3
scule: 1.3.0
strip-literal: 1.3.0
- unplugin: 1.8.3
+ unplugin: 1.9.0
transitivePeerDependencies:
- rollup
dev: true
@@ -2476,13 +3378,13 @@ packages:
local-pkg: 0.4.3
magic-string: 0.26.7
unimport: 1.3.0
- unplugin: 1.8.3
+ unplugin: 1.9.0
transitivePeerDependencies:
- rollup
dev: true
- /unplugin@1.8.3:
- resolution: {integrity: sha512-ZlLteXGDcyJgsbN2g4sZ3Dw6fpX1O5rjgeaA5MmQhhA2YxnTxsh43f8nDQgFOzcir0iv8GYMjtCV8MtyNnrhEg==}
+ /unplugin@1.9.0:
+ resolution: {integrity: sha512-14PslvMY3gNbXnQtNIRB566Q057L5Fe7f5LDEamxVi0QQVxoz5hrveBwwZLcKyHtZ09ysmipxRRj5Lv+BGz2Iw==}
engines: {node: '>=14.0.0'}
dependencies:
acorn: 8.11.3
@@ -2499,6 +3401,12 @@ packages:
isobject: 3.0.1
dev: true
+ /uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ dependencies:
+ punycode: 2.3.1
+ dev: true
+
/urix@0.1.0:
resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==}
deprecated: Please see https://github.com/lydell/urix#deprecated
@@ -2518,6 +3426,15 @@ packages:
engines: {node: '>= 0.8'}
dev: true
+ /vdirs@0.1.8(vue@3.2.45):
+ resolution: {integrity: sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==}
+ peerDependencies:
+ vue: ^3.0.11
+ dependencies:
+ evtd: 0.2.4
+ vue: 3.2.45
+ dev: true
+
/vee-validate@4.5.8(vue@3.2.45):
resolution: {integrity: sha512-XZx2J93rlET49CdIIoxG9R6wQNoT3RxUUw9ar3QbIhczpzbtlm4BQ+TpCA9DoYHKFlApcXnE28WU7m4quoPsCA==}
peerDependencies:
@@ -2606,6 +3523,15 @@ packages:
resolution: {integrity: sha512-2ozZEFfmVvQcHWoHLNuiKlUfDKlhh4KGsy54U0UrlLMR1SO+XKAIDqBxtBwHgNrekurlJwE8A9K6L49T78ZQ9Q==}
dev: false
+ /vooks@0.2.12(vue@3.2.45):
+ resolution: {integrity: sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==}
+ peerDependencies:
+ vue: ^3.0.0
+ dependencies:
+ evtd: 0.2.4
+ vue: 3.2.45
+ dev: true
+
/vue-baidu-map-3x@1.0.35(vue@3.2.45):
resolution: {integrity: sha512-1FDzxgd+X7MVcG8JbyyxDOSYRDUi96qEuuNICQmwlAE/EDwf4vz1oYRhRz05s/MuDpW7aIBlubF/PlSTpBlUEw==}
peerDependencies:
@@ -2660,6 +3586,12 @@ packages:
vue: 3.2.45
dev: false
+ /vue3-seamless-scroll@2.0.1:
+ resolution: {integrity: sha512-mI3BaDU3pjcPUhVSw3/xNKdfPBDABTi/OdZaZqKysx4cSdNfGRbVvGNDzzptBbJ5S7imv5T55l6x/SqgnxKreg==}
+ dependencies:
+ throttle-debounce: 5.0.0
+ dev: false
+
/vue@3.2.45:
resolution: {integrity: sha512-9Nx/Mg2b2xWlXykmCwiTUCWHbWIj53bnkizBxKai1g61f2Xit700A1ljowpTIM11e3uipOeiPcSqnmBg6gyiaA==}
dependencies:
@@ -2675,56 +3607,71 @@ packages:
sortablejs: 1.10.2
dev: false
- /vxe-table-plugin-antd@3.3.0(vxe-table@4.5.20):
+ /vueuc@0.4.58(vue@3.2.45):
+ resolution: {integrity: sha512-Wnj/N8WbPRSxSt+9ji1jtDHPzda5h2OH/0sFBhvdxDRuyCZbjGg3/cKMaKqEoe+dErTexG2R+i6Q8S/Toq1MYg==}
+ peerDependencies:
+ vue: ^3.0.11
+ dependencies:
+ '@css-render/vue3-ssr': 0.15.12(vue@3.2.45)
+ '@juggle/resize-observer': 3.4.0
+ css-render: 0.15.12
+ evtd: 0.2.4
+ seemly: 0.3.8
+ vdirs: 0.1.8(vue@3.2.45)
+ vooks: 0.2.12(vue@3.2.45)
+ vue: 3.2.45
+ dev: true
+
+ /vxe-table-plugin-antd@3.3.0(vxe-table@4.5.21):
resolution: {integrity: sha512-6Hnxf6QvQwRO5Yi2U/tzKo2+BHyBi12xWqTQpz/65QYmjsLDN/0fx0ozn9OlWAosXwpOY26pfsD6HtOJSRCPIA==}
peerDependencies:
vxe-table: ^3.7.0
dependencies:
- vxe-table: 4.5.20(vue@3.2.45)(xe-utils@3.5.22)
+ vxe-table: 4.5.21(vue@3.2.45)(xe-utils@3.5.22)
dev: false
- /vxe-table-plugin-charts@3.3.1(vxe-table@4.5.20):
+ /vxe-table-plugin-charts@3.3.1(vxe-table@4.5.21):
resolution: {integrity: sha512-4WJ9sLYqLblIDR+zy7PR7l8FnytS79jMW8U6tYOqvymtir+9n3mhAUby78BGnEgN7bQ28kr+Xbhuo11FoMHycw==}
peerDependencies:
vxe-table: ^3.7.0
dependencies:
- vxe-table: 4.5.20(vue@3.2.45)(xe-utils@3.5.22)
+ vxe-table: 4.5.21(vue@3.2.45)(xe-utils@3.5.22)
dev: false
- /vxe-table-plugin-element@3.3.0(vxe-table@4.5.20):
+ /vxe-table-plugin-element@3.3.0(vxe-table@4.5.21):
resolution: {integrity: sha512-jfFLNGl28N/2WBM5HxP4EPaZPE7hTb6gTOYOrn+hjGSbNMimw0hu9UXXwzZbJJoz/4bl87cbrXE5dFnG81WKKQ==}
peerDependencies:
vxe-table: ^3.7.0
dependencies:
- vxe-table: 4.5.20(vue@3.2.45)(xe-utils@3.5.22)
+ vxe-table: 4.5.21(vue@3.2.45)(xe-utils@3.5.22)
dev: false
- /vxe-table-plugin-menus@3.3.0(vxe-table@4.5.20):
+ /vxe-table-plugin-menus@3.3.0(vxe-table@4.5.21):
resolution: {integrity: sha512-ZCNIpEqZuBB+fVhZgrtEONd7PYtRN8+EePx48H1w1YHH0FjMMb/3ePaldRqB1R7PwKixaKhrcVY42RREYo47Lg==}
peerDependencies:
vxe-table: ^3.7.0
dependencies:
- vxe-table: 4.5.20(vue@3.2.45)(xe-utils@3.5.22)
+ vxe-table: 4.5.21(vue@3.2.45)(xe-utils@3.5.22)
dev: false
- /vxe-table-plugin-renderer@3.3.0(vxe-table@4.5.20):
+ /vxe-table-plugin-renderer@3.3.0(vxe-table@4.5.21):
resolution: {integrity: sha512-Vv3JZyuHzJ7S34JigIj/JA/r11oPcUhgCd4AEjxKXCmHVYLn2LROlS68O7cNOgEr7X+eXwUhj5MyccOMb8cnDQ==}
peerDependencies:
vxe-table: ^3.7.0
dependencies:
- vxe-table: 4.5.20(vue@3.2.45)(xe-utils@3.5.22)
+ vxe-table: 4.5.21(vue@3.2.45)(xe-utils@3.5.22)
dev: false
- /vxe-table-plugin-validator@3.0.0(vxe-table@4.5.20):
+ /vxe-table-plugin-validator@3.0.0(vxe-table@4.5.21):
resolution: {integrity: sha512-IC7RbtxSyyLN0AAJo5CoinWW+5if7TMqDEBmz0VQ7cqCxTxDm2OEz+Ehz98XG1Bd16X3bhZErVmCd/vI5D2+/Q==}
peerDependencies:
vxe-table: ^4.5.0
dependencies:
- vxe-table: 4.5.20(vue@3.2.45)(xe-utils@3.5.22)
+ vxe-table: 4.5.21(vue@3.2.45)(xe-utils@3.5.22)
dev: false
- /vxe-table@4.5.20(vue@3.2.45)(xe-utils@3.5.22):
- resolution: {integrity: sha512-UC+z1ED3QE6Be/UN0390hSXMAseXg+com3fkX9q3tjfsCGFx7CjN9tLstuNtecn+ElkPGHqzRGtA3N5FTSv5Vw==}
+ /vxe-table@4.5.21(vue@3.2.45)(xe-utils@3.5.22):
+ resolution: {integrity: sha512-yp+BNGCy61lk7ayf0LI3UNcR2fRmipGSiIAh3lNOIdyW1nAobf/GwIx3rXghjzFb0a6NNJeYxv2NM+gwXxtmww==}
peerDependencies:
vue: ^3.2.28
xe-utils: ^3.5.0
@@ -2743,10 +3690,31 @@ packages:
resolution: {integrity: sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==}
dev: true
+ /which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+ dependencies:
+ isexe: 2.0.0
+ dev: true
+
+ /wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+ dev: true
+
/xe-utils@3.5.22:
resolution: {integrity: sha512-rhWuM2fVXsdrqUtyjRAsYTDLvVzYSSZqg/uCRyDqcw96AweB1AWsnTJZyl9g68ejnP0xhxfSoNBSrIcOeX1yxA==}
dev: false
+ /yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+ dev: true
+
+ /yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+ dev: true
+
/zrender@5.4.0:
resolution: {integrity: sha512-rOS09Z2HSVGFs2dn/TuYk5BlCaZcVe8UDLLjj1ySYF828LATKKdxuakSZMvrDz54yiKPDYVfjdKqcX8Jky3BIA==}
dependencies:
diff --git a/public/favicon.ico b/public/favicon.ico
index e263760..ea55dc1 100644
Binary files a/public/favicon.ico and b/public/favicon.ico differ
diff --git a/public/static/images/liangfaliangqu.gif b/public/static/images/liangfaliangqu.gif
new file mode 100644
index 0000000..82f7746
Binary files /dev/null and b/public/static/images/liangfaliangqu.gif differ
diff --git a/public/static/images/liangfaliangquyibeng.gif b/public/static/images/liangfaliangquyibeng.gif
new file mode 100644
index 0000000..664ffbf
Binary files /dev/null and b/public/static/images/liangfaliangquyibeng.gif differ
diff --git a/public/static/images/sanfasanqu.gif b/public/static/images/sanfasanqu.gif
new file mode 100644
index 0000000..cd45fe7
Binary files /dev/null and b/public/static/images/sanfasanqu.gif differ
diff --git a/public/static/images/sanfasanquyibeng.gif b/public/static/images/sanfasanquyibeng.gif
new file mode 100644
index 0000000..3ac1896
Binary files /dev/null and b/public/static/images/sanfasanquyibeng.gif differ
diff --git a/public/static/images/yifaliangqu.gif b/public/static/images/yifaliangqu.gif
new file mode 100644
index 0000000..328519b
Binary files /dev/null and b/public/static/images/yifaliangqu.gif differ
diff --git a/public/static/images/yifaliangquyibeng.gif b/public/static/images/yifaliangquyibeng.gif
new file mode 100644
index 0000000..89c263a
Binary files /dev/null and b/public/static/images/yifaliangquyibeng.gif differ
diff --git a/public/static/images/yifasanqu.gif b/public/static/images/yifasanqu.gif
new file mode 100644
index 0000000..1fb9251
Binary files /dev/null and b/public/static/images/yifasanqu.gif differ
diff --git a/public/static/images/yifayiqu.gif b/public/static/images/yifayiqu.gif
new file mode 100644
index 0000000..9745ad2
Binary files /dev/null and b/public/static/images/yifayiqu.gif differ
diff --git a/public/static/images/yifayiquyibeng.gif b/public/static/images/yifayiquyibeng.gif
new file mode 100644
index 0000000..22c1d9f
Binary files /dev/null and b/public/static/images/yifayiquyibeng.gif differ
diff --git a/public/static/images/yifaysanquyibeng.gif b/public/static/images/yifaysanquyibeng.gif
new file mode 100644
index 0000000..69eee2a
Binary files /dev/null and b/public/static/images/yifaysanquyibeng.gif differ
diff --git a/src/api/monitoring/static/index.js b/src/api/monitoring/static/index.js
new file mode 100644
index 0000000..6fba3c3
--- /dev/null
+++ b/src/api/monitoring/static/index.js
@@ -0,0 +1,13 @@
+import request from "@/utils/request";
+/**
+ * 获取报表统计
+ *
+ * @param queryParams
+ */
+export function dcBusiDayReport(queryParams) {
+ return request({
+ url: "/dc/dcBusiDayReport/list",
+ method: "get",
+ params: queryParams,
+ });
+}
diff --git a/src/api/monitoring/visual/index.js b/src/api/monitoring/visual/index.js
new file mode 100644
index 0000000..22df4ef
--- /dev/null
+++ b/src/api/monitoring/visual/index.js
@@ -0,0 +1,84 @@
+import request from "@/utils/request";
+
+/**
+ * 获取热源列表
+ */
+export function getDeptList(data) {
+ return request({
+ url: "/system/dept/selectList",
+ method: "post",
+ data: data,
+ });
+}
+/**
+ * 获取图表数据
+ */
+export function getrealTime(queryParams) {
+ return request({
+ url: "dc/heatSourceScreen/heatSource/realTime/data",
+ method: "get",
+ params: queryParams,
+ });
+}
+/**
+ * 温度曲线
+ */
+export function getTempChart(queryParams) {
+ return request({
+ url: "/dc/heatSourceScreen/heatExchangeStation/temperature/history/data",
+ method: "get",
+ params: queryParams,
+ });
+}
+/**
+ * 温度曲线
+ */
+export function getTempChartPolling(queryParams) {
+ return request({
+ url: "/dc/heatSourceScreen/heatExchangeStation/temperature/realTime/data",
+ method: "get",
+ params: queryParams,
+ });
+}
+
+/**
+ * 压力曲线
+ */
+export function getPressChart(queryParams) {
+ return request({
+ url: "/dc/heatSourceScreen/heatExchangeStation/stress/history/data",
+ method: "get",
+ params: queryParams,
+ });
+}
+/**
+ * 压力曲线
+ */
+export function getPressChartPolling(queryParams) {
+ return request({
+ url: "/dc/heatSourceScreen/heatExchangeStation/stress/realTime/data",
+ method: "get",
+ params: queryParams,
+ });
+}
+
+/**
+ * 获取表格header
+ */
+export function getTableHeader() {
+ return request({
+ url: "/dc/heatSourceScreen/heatSource/table/header",
+ method: "get",
+ });
+}
+
+/**
+ * 获取换热站Table列表
+ */
+export function getTableData(data) {
+ return request({
+ url: "/dc/heatSourceScreen/heatSource/table/data",
+ method: "post",
+ data: data,
+ });
+}
diff --git a/src/api/system/user.js b/src/api/system/user.js
index 637acd5..a7cb6f7 100644
--- a/src/api/system/user.js
+++ b/src/api/system/user.js
@@ -1,145 +1,153 @@
-import request from '@/utils/request'
+import request from "@/utils/request";
import { parseStrEmpty } from "@/utils/ruoyi";
// 查询用户列表
export function listUser(query) {
return request({
- url: '/system/user/list',
- method: 'get',
- params: query
- })
+ url: "/system/user/list",
+ method: "get",
+ params: query,
+ });
}
// 查询用户详细
export function getUser(userId) {
return request({
- url: '/system/user/' + parseStrEmpty(userId),
- method: 'get'
- })
+ url: "/system/user/" + parseStrEmpty(userId),
+ method: "get",
+ });
}
// 新增用户
export function addUser(data) {
return request({
- url: '/system/user',
- method: 'post',
- data: data
- })
+ url: "/system/user",
+ method: "post",
+ data: data,
+ });
}
// 修改用户
export function updateUser(data) {
return request({
- url: '/system/user',
- method: 'put',
- data: data
- })
+ url: "/system/user",
+ method: "put",
+ data: data,
+ });
}
// 删除用户
export function delUser(userId) {
return request({
- url: '/system/user/' + userId,
- method: 'delete'
- })
+ url: "/system/user/" + userId,
+ method: "delete",
+ });
}
// 用户密码重置
export function resetUserPwd(userId, password) {
const data = {
userId,
- password
- }
+ password,
+ };
return request({
- url: '/system/user/resetPwd',
- method: 'put',
- data: data
- })
+ url: "/system/user/resetPwd",
+ method: "put",
+ data: data,
+ });
}
// 用户状态修改
export function changeUserStatus(userId, status) {
const data = {
userId,
- status
- }
+ status,
+ };
return request({
- url: '/system/user/changeStatus',
- method: 'put',
- data: data
- })
+ url: "/system/user/changeStatus",
+ method: "put",
+ data: data,
+ });
}
// 查询用户个人信息
export function getUserProfile() {
return request({
- url: '/system/user/profile',
- method: 'get'
- })
+ url: "/system/user/profile",
+ method: "get",
+ });
}
// 修改用户个人信息
export function updateUserProfile(data) {
return request({
- url: '/system/user/profile',
- method: 'put',
- data: data
- })
+ url: "/system/user/profile",
+ method: "put",
+ data: data,
+ });
}
// 用户密码重置
export function updateUserPwd(oldPassword, newPassword) {
const data = {
oldPassword,
- newPassword
- }
+ newPassword,
+ };
return request({
- url: '/system/user/profile/updatePwd',
- method: 'put',
- params: data
- })
+ url: "/system/user/profile/updatePwd",
+ method: "put",
+ params: data,
+ });
}
// 用户头像上传
export function uploadAvatar(data) {
return request({
- url: '/system/user/profile/avatar',
- method: 'post',
- data: data
- })
+ url: "/system/user/profile/avatar",
+ method: "post",
+ data: data,
+ });
}
// 查询授权角色
export function getAuthRole(userId) {
return request({
- url: '/system/user/authRole/' + userId,
- method: 'get'
- })
+ url: "/system/user/authRole/" + userId,
+ method: "get",
+ });
}
// 保存授权角色
export function updateAuthRole(data) {
return request({
- url: '/system/user/authRole',
- method: 'put',
- params: data
- })
+ url: "/system/user/authRole",
+ method: "put",
+ params: data,
+ });
}
// 查询部门下拉树结构
export function deptTreeSelect() {
return request({
- url: '/system/user/deptTree',
- method: 'get'
- })
+ url: "/system/user/deptTree",
+ method: "get",
+ });
}
-
// 查询部门下拉树结构
export function deptTreeSelectNew() {
return request({
- url: '/system/user/deptTreeNew',
- method: 'get'
- })
+ url: "/system/user/deptTreeNew",
+ method: "get",
+ });
}
+/**
+ * 获取天气预报
+ */
+export function getWeather() {
+ return request({
+ url: "/model/dcBusiRealWeatherHours/oneLast",
+ method: "get",
+ });
+}
diff --git a/src/assets/fonts/AlibabaPuHuiTiBold.ttf b/src/assets/fonts/AlibabaPuHuiTiBold.ttf
new file mode 100644
index 0000000..7edd4e5
Binary files /dev/null and b/src/assets/fonts/AlibabaPuHuiTiBold.ttf differ
diff --git a/src/assets/fonts/AlibabaPuHuiTiRegular.ttf b/src/assets/fonts/AlibabaPuHuiTiRegular.ttf
new file mode 100644
index 0000000..a6eaf36
Binary files /dev/null and b/src/assets/fonts/AlibabaPuHuiTiRegular.ttf differ
diff --git a/src/assets/fonts/LixukeXingshu.ttf b/src/assets/fonts/LixukeXingshu.ttf
new file mode 100644
index 0000000..4ae7277
Binary files /dev/null and b/src/assets/fonts/LixukeXingshu.ttf differ
diff --git a/src/assets/fonts/PangMenZhengDaoBiao.ttf b/src/assets/fonts/PangMenZhengDaoBiao.ttf
new file mode 100644
index 0000000..cd65b62
Binary files /dev/null and b/src/assets/fonts/PangMenZhengDaoBiao.ttf differ
diff --git a/src/assets/fonts/SourceHanSansBold.OTF b/src/assets/fonts/SourceHanSansBold.OTF
new file mode 100644
index 0000000..886f82f
Binary files /dev/null and b/src/assets/fonts/SourceHanSansBold.OTF differ
diff --git a/src/assets/fonts/SourceHanSansBold.ttf b/src/assets/fonts/SourceHanSansBold.ttf
new file mode 100644
index 0000000..b1f65f2
Binary files /dev/null and b/src/assets/fonts/SourceHanSansBold.ttf differ
diff --git a/src/assets/fonts/YouSheBiaoTiHei.ttf b/src/assets/fonts/YouSheBiaoTiHei.ttf
new file mode 100644
index 0000000..3729151
Binary files /dev/null and b/src/assets/fonts/YouSheBiaoTiHei.ttf differ
diff --git a/src/assets/fonts/font.css b/src/assets/fonts/font.css
new file mode 100644
index 0000000..cf3dae4
--- /dev/null
+++ b/src/assets/fonts/font.css
@@ -0,0 +1,24 @@
+@font-face {
+ font-family: 'YouSheBiaoTiHei';
+ src: url('YouSheBiaoTiHei.ttf') format('truetype');
+}
+@font-face {
+ font-family: 'AlibabaPuHuiTiRegular';
+ src: url('AlibabaPuHuiTiRegular.ttf') format('truetype');
+}
+@font-face {
+ font-family: 'AlibabaPuHuiTiBold';
+ src: url('AlibabaPuHuiTiBold.ttf') format('truetype');
+}
+@font-face {
+ font-family: 'LixukeXingshu';
+ src: url('LixukeXingshu.ttf') format('truetype');
+}
+@font-face {
+ font-family: 'PangMenZhengDaoBiao';
+ src: url('PangMenZhengDaoBiao.ttf') format('truetype');
+}
+@font-face {
+ font-family: 'SourceHanSansBold';
+ src: url('SourceHanSansBold.OTF') format('OpenType');
+}
diff --git a/src/assets/iconfont/demo.css b/src/assets/iconfont/demo.css
new file mode 100644
index 0000000..a67054a
--- /dev/null
+++ b/src/assets/iconfont/demo.css
@@ -0,0 +1,539 @@
+/* Logo 字体 */
+@font-face {
+ font-family: "iconfont logo";
+ src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
+ src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
+ url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
+ url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
+ url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
+}
+
+.logo {
+ font-family: "iconfont logo";
+ font-size: 160px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+/* tabs */
+.nav-tabs {
+ position: relative;
+}
+
+.nav-tabs .nav-more {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ height: 42px;
+ line-height: 42px;
+ color: #666;
+}
+
+#tabs {
+ border-bottom: 1px solid #eee;
+}
+
+#tabs li {
+ cursor: pointer;
+ width: 100px;
+ height: 40px;
+ line-height: 40px;
+ text-align: center;
+ font-size: 16px;
+ border-bottom: 2px solid transparent;
+ position: relative;
+ z-index: 1;
+ margin-bottom: -1px;
+ color: #666;
+}
+
+
+#tabs .active {
+ border-bottom-color: #f00;
+ color: #222;
+}
+
+.tab-container .content {
+ display: none;
+}
+
+/* 页面布局 */
+.main {
+ padding: 30px 100px;
+ width: 960px;
+ margin: 0 auto;
+}
+
+.main .logo {
+ color: #333;
+ text-align: left;
+ margin-bottom: 30px;
+ line-height: 1;
+ height: 110px;
+ margin-top: -50px;
+ overflow: hidden;
+ *zoom: 1;
+}
+
+.main .logo a {
+ font-size: 160px;
+ color: #333;
+}
+
+.helps {
+ margin-top: 40px;
+}
+
+.helps pre {
+ padding: 20px;
+ margin: 10px 0;
+ border: solid 1px #e7e1cd;
+ background-color: #fffdef;
+ overflow: auto;
+}
+
+.icon_lists {
+ width: 100% !important;
+ overflow: hidden;
+ *zoom: 1;
+}
+
+.icon_lists li {
+ width: 100px;
+ margin-bottom: 10px;
+ margin-right: 20px;
+ text-align: center;
+ list-style: none !important;
+ cursor: default;
+}
+
+.icon_lists li .code-name {
+ line-height: 1.2;
+}
+
+.icon_lists .icon {
+ display: block;
+ height: 100px;
+ line-height: 100px;
+ font-size: 42px;
+ margin: 10px auto;
+ color: #333;
+ -webkit-transition: font-size 0.25s linear, width 0.25s linear;
+ -moz-transition: font-size 0.25s linear, width 0.25s linear;
+ transition: font-size 0.25s linear, width 0.25s linear;
+}
+
+.icon_lists .icon:hover {
+ font-size: 100px;
+}
+
+.icon_lists .svg-icon {
+ /* 通过设置 font-size 来改变图标大小 */
+ width: 1em;
+ /* 图标和文字相邻时,垂直对齐 */
+ vertical-align: -0.15em;
+ /* 通过设置 color 来改变 SVG 的颜色/fill */
+ fill: currentColor;
+ /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
+ normalize.css 中也包含这行 */
+ overflow: hidden;
+}
+
+.icon_lists li .name,
+.icon_lists li .code-name {
+ color: #666;
+}
+
+/* markdown 样式 */
+.markdown {
+ color: #666;
+ font-size: 14px;
+ line-height: 1.8;
+}
+
+.highlight {
+ line-height: 1.5;
+}
+
+.markdown img {
+ vertical-align: middle;
+ max-width: 100%;
+}
+
+.markdown h1 {
+ color: #404040;
+ font-weight: 500;
+ line-height: 40px;
+ margin-bottom: 24px;
+}
+
+.markdown h2,
+.markdown h3,
+.markdown h4,
+.markdown h5,
+.markdown h6 {
+ color: #404040;
+ margin: 1.6em 0 0.6em 0;
+ font-weight: 500;
+ clear: both;
+}
+
+.markdown h1 {
+ font-size: 28px;
+}
+
+.markdown h2 {
+ font-size: 22px;
+}
+
+.markdown h3 {
+ font-size: 16px;
+}
+
+.markdown h4 {
+ font-size: 14px;
+}
+
+.markdown h5 {
+ font-size: 12px;
+}
+
+.markdown h6 {
+ font-size: 12px;
+}
+
+.markdown hr {
+ height: 1px;
+ border: 0;
+ background: #e9e9e9;
+ margin: 16px 0;
+ clear: both;
+}
+
+.markdown p {
+ margin: 1em 0;
+}
+
+.markdown>p,
+.markdown>blockquote,
+.markdown>.highlight,
+.markdown>ol,
+.markdown>ul {
+ width: 80%;
+}
+
+.markdown ul>li {
+ list-style: circle;
+}
+
+.markdown>ul li,
+.markdown blockquote ul>li {
+ margin-left: 20px;
+ padding-left: 4px;
+}
+
+.markdown>ul li p,
+.markdown>ol li p {
+ margin: 0.6em 0;
+}
+
+.markdown ol>li {
+ list-style: decimal;
+}
+
+.markdown>ol li,
+.markdown blockquote ol>li {
+ margin-left: 20px;
+ padding-left: 4px;
+}
+
+.markdown code {
+ margin: 0 3px;
+ padding: 0 5px;
+ background: #eee;
+ border-radius: 3px;
+}
+
+.markdown strong,
+.markdown b {
+ font-weight: 600;
+}
+
+.markdown>table {
+ border-collapse: collapse;
+ border-spacing: 0px;
+ empty-cells: show;
+ border: 1px solid #e9e9e9;
+ width: 95%;
+ margin-bottom: 24px;
+}
+
+.markdown>table th {
+ white-space: nowrap;
+ color: #333;
+ font-weight: 600;
+}
+
+.markdown>table th,
+.markdown>table td {
+ border: 1px solid #e9e9e9;
+ padding: 8px 16px;
+ text-align: left;
+}
+
+.markdown>table th {
+ background: #F7F7F7;
+}
+
+.markdown blockquote {
+ font-size: 90%;
+ color: #999;
+ border-left: 4px solid #e9e9e9;
+ padding-left: 0.8em;
+ margin: 1em 0;
+}
+
+.markdown blockquote p {
+ margin: 0;
+}
+
+.markdown .anchor {
+ opacity: 0;
+ transition: opacity 0.3s ease;
+ margin-left: 8px;
+}
+
+.markdown .waiting {
+ color: #ccc;
+}
+
+.markdown h1:hover .anchor,
+.markdown h2:hover .anchor,
+.markdown h3:hover .anchor,
+.markdown h4:hover .anchor,
+.markdown h5:hover .anchor,
+.markdown h6:hover .anchor {
+ opacity: 1;
+ display: inline-block;
+}
+
+.markdown>br,
+.markdown>p>br {
+ clear: both;
+}
+
+
+.hljs {
+ display: block;
+ background: white;
+ padding: 0.5em;
+ color: #333333;
+ overflow-x: auto;
+}
+
+.hljs-comment,
+.hljs-meta {
+ color: #969896;
+}
+
+.hljs-string,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-strong,
+.hljs-emphasis,
+.hljs-quote {
+ color: #df5000;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-type {
+ color: #a71d5d;
+}
+
+.hljs-literal,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-attribute {
+ color: #0086b3;
+}
+
+.hljs-section,
+.hljs-name {
+ color: #63a35c;
+}
+
+.hljs-tag {
+ color: #333333;
+}
+
+.hljs-title,
+.hljs-attr,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+ color: #795da3;
+}
+
+.hljs-addition {
+ color: #55a532;
+ background-color: #eaffea;
+}
+
+.hljs-deletion {
+ color: #bd2c00;
+ background-color: #ffecec;
+}
+
+.hljs-link {
+ text-decoration: underline;
+}
+
+/* 代码高亮 */
+/* PrismJS 1.15.0
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
+/**
+ * prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+code[class*="language-"],
+pre[class*="language-"] {
+ color: black;
+ background: none;
+ text-shadow: 0 1px white;
+ font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+ text-align: left;
+ white-space: pre;
+ word-spacing: normal;
+ word-break: normal;
+ word-wrap: normal;
+ line-height: 1.5;
+
+ -moz-tab-size: 4;
+ -o-tab-size: 4;
+ tab-size: 4;
+
+ -webkit-hyphens: none;
+ -moz-hyphens: none;
+ -ms-hyphens: none;
+ hyphens: none;
+}
+
+pre[class*="language-"]::-moz-selection,
+pre[class*="language-"] ::-moz-selection,
+code[class*="language-"]::-moz-selection,
+code[class*="language-"] ::-moz-selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+
+pre[class*="language-"]::selection,
+pre[class*="language-"] ::selection,
+code[class*="language-"]::selection,
+code[class*="language-"] ::selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+
+@media print {
+
+ code[class*="language-"],
+ pre[class*="language-"] {
+ text-shadow: none;
+ }
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+ padding: 1em;
+ margin: .5em 0;
+ overflow: auto;
+}
+
+:not(pre)>code[class*="language-"],
+pre[class*="language-"] {
+ background: #f5f2f0;
+}
+
+/* Inline code */
+:not(pre)>code[class*="language-"] {
+ padding: .1em;
+ border-radius: .3em;
+ white-space: normal;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+ color: slategray;
+}
+
+.token.punctuation {
+ color: #999;
+}
+
+.namespace {
+ opacity: .7;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+ color: #905;
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+ color: #690;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+ color: #9a6e3a;
+ background: hsla(0, 0%, 100%, .5);
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+ color: #07a;
+}
+
+.token.function,
+.token.class-name {
+ color: #DD4A68;
+}
+
+.token.regex,
+.token.important,
+.token.variable {
+ color: #e90;
+}
+
+.token.important,
+.token.bold {
+ font-weight: bold;
+}
+
+.token.italic {
+ font-style: italic;
+}
+
+.token.entity {
+ cursor: help;
+}
diff --git a/src/assets/iconfont/demo_index.html b/src/assets/iconfont/demo_index.html
new file mode 100644
index 0000000..c258ae5
--- /dev/null
+++ b/src/assets/iconfont/demo_index.html
@@ -0,0 +1,1821 @@
+
+
+
+
+ iconfont Demo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ - Unicode
+ - Font class
+ - Symbol
+
+
+
查看项目
+
+
+
+
+
+
+ -
+
+
堆积面积图
+ 
+
+
+ -
+
+
air_conditioning_filter
+ 
+
+
+ -
+
+
锅炉
+ 
+
+
+ -
+
+
设备
+ 
+
+
+ -
+
+
right-换热站-c
+ 
+
+
+ -
+
+
30D上双箭头
+ 
+
+
+ -
+
+
30C下双箭头
+ 
+
+
+ -
+
+
多云
+ 
+
+
+ -
+
+
报警,警报,报警灯,危险
+ 
+
+
+ -
+
+
分屏,宫格
+ 
+
+
+ -
+
+
单图排列
+ 
+
+
+ -
+
+
homepage
+ 
+
+
+ -
+
+
历史-01
+ 
+
+
+ -
+
+
换热站
+ 
+
+
+ -
+
+
more
+ 
+
+
+ -
+
+
list
+ 
+
+
+ -
+
+
key
+ 
+
+
+ -
+
+
用户管理
+ 
+
+
+ -
+
+
首页
+ 
+
+
+ -
+
+
编辑
+ 
+
+
+ -
+
+
icon_应用管理
+ 
+
+
+ -
+
+
setting
+ 
+
+
+ -
+
+
folder-open
+ 
+
+
+ -
+
+
image
+ 
+
+
+ -
+
+
云端下载
+ 
+
+
+ -
+
+
云端上传
+ 
+
+
+ -
+
+
角色管理
+ 
+
+
+ -
+
+
访问量
+ 
+
+
+ -
+
+
总访问量
+ 
+
+
+ -
+
+
订单成交额
+ 
+
+
+ -
+
+
成交数据-01
+ 
+
+
+ -
+
+
下载数量
+ 
+
+
+ -
+
+
编辑
+ 
+
+
+ -
+
+
customer-fill
+ 
+
+
+ -
+
+
密码
+ 
+
+
+ -
+
+
中英切换
+ 
+
+
+ -
+
+
arrow-down-filling
+ 
+
+
+ -
+
+
close
+ 
+
+
+ -
+
+
filter
+ 
+
+
+ -
+
+
ashbin
+ 
+
+
+ -
+
+
code
+ 
+
+
+ -
+
+
copy
+ 
+
+
+ -
+
+
link
+ 
+
+
+ -
+
+
layers
+ 
+
+
+ -
+
+
fullscreen-expand
+ 
+
+
+ -
+
+
menu
+ 
+
+
+ -
+
+
minus
+ 
+
+
+ -
+
+
refresh
+ 
+
+
+ -
+
+
scanning
+ 
+
+
+ -
+
+
关闭其他-01
+ 
+
+
+ -
+
+
字体大小
+ 
+
+
+ -
+
+
page_first
+ 
+
+
+ -
+
+
scan
+ 
+
+
+ -
+
+
edit
+ 
+
+
+ -
+
+
camera
+ 
+
+
+ -
+
+
qr_code
+ 
+
+
+ -
+
+
delete
+ 
+
+
+ -
+
+
地址
+ 
+
+
+ -
+
+
闹钟
+ 
+
+
+ -
+
+
地址
+ 
+
+
+ -
+
+
icon_设置
+ 
+
+
+ -
+
+
重置
+ 
+
+
+ -
+
+
search
+ 
+
+
+ -
+
+
page_last
+ 
+
+
+ -
+
+
其他
+ 
+
+
+ -
+
+
安全
+ 
+
+
+ -
+
+
网商银行无线端_安全
+ 
+
+
+ -
+
+
up
+ 
+
+
+ -
+
+
angle-double-up
+ 
+
+
+ -
+
+
323向左交换
+ 
+
+
+ -
+
+
324向右交换
+ 
+
+
+
+
+
Unicode 引用
+
+
+
Unicode 是字体在网页端最原始的应用方式,特点是:
+
+ - 支持按字体的方式去动态调整图标大小,颜色等等。
+ - 默认情况下不支持多色,直接添加多色图标会自动去色。
+
+
+ 注意:新版 iconfont 支持两种方式引用多色图标:SVG symbol 引用方式和彩色字体图标模式。(使用彩色字体图标需要在「编辑项目」中开启「彩色」选项后并重新生成。)
+
+
Unicode 使用步骤如下:
+
第一步:拷贝项目下面生成的 @font-face
+
@font-face {
+ font-family: 'iconfont';
+ src: url('iconfont.woff2?t=1706149491935') format('woff2'),
+ url('iconfont.woff?t=1706149491935') format('woff'),
+ url('iconfont.ttf?t=1706149491935') format('truetype');
+}
+
+
第二步:定义使用 iconfont 的样式
+
.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+
第三步:挑选相应图标并获取字体编码,应用于页面
+
+<span class="iconfont">3</span>
+
+
+ "iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。
+
+
+
+
+
+
+
font-class 引用
+
+
+
font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。
+
与 Unicode 使用方式相比,具有如下特点:
+
+ - 相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。
+ - 因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。
+
+
使用步骤如下:
+
第一步:引入项目下面生成的 fontclass 代码:
+
<link rel="stylesheet" href="./iconfont.css">
+
+
第二步:挑选相应图标并获取类名,应用于页面:
+
<span class="iconfont icon-xxx"></span>
+
+
+ "
+ iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。
+
+
+
+
+
+
+
Symbol 引用
+
+
+
这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章
+ 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:
+
+ - 支持多色图标了,不再受单色限制。
+ - 通过一些技巧,支持像字体那样,通过
font-size
, color
来调整样式。
+ - 兼容性较差,支持 IE9+,及现代浏览器。
+ - 浏览器渲染 SVG 的性能一般,还不如 png。
+
+
使用步骤如下:
+
第一步:引入项目下面生成的 symbol 代码:
+
<script src="./iconfont.js"></script>
+
+
第二步:加入通用 CSS 代码(引入一次就行):
+
<style>
+.icon {
+ width: 1em;
+ height: 1em;
+ vertical-align: -0.15em;
+ fill: currentColor;
+ overflow: hidden;
+}
+</style>
+
+
第三步:挑选相应图标并获取类名,应用于页面:
+
<svg class="icon" aria-hidden="true">
+ <use xlink:href="#icon-xxx"></use>
+</svg>
+
+
+
+
+
+
+
+
+
diff --git a/src/assets/iconfont/iconfont.css b/src/assets/iconfont/iconfont.css
new file mode 100644
index 0000000..1bac211
--- /dev/null
+++ b/src/assets/iconfont/iconfont.css
@@ -0,0 +1,299 @@
+@font-face {
+ font-family: "iconfont"; /* Project id 4223894 */
+ src: url('iconfont.woff2?t=1706149491935') format('woff2'),
+ url('iconfont.woff?t=1706149491935') format('woff'),
+ url('iconfont.ttf?t=1706149491935') format('truetype');
+}
+
+.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-area-chart:before {
+ content: "\e612";
+}
+
+.icon-HP:before {
+ content: "\e7b1";
+}
+
+.icon-boiler:before {
+ content: "\e60d";
+}
+
+.icon-device:before {
+ content: "\e9fd";
+}
+
+.icon-heat-exchange-station:before {
+ content: "\e84a";
+}
+
+.icon-yincang:before {
+ content: "\e690";
+}
+
+.icon-xianshi:before {
+ content: "\e691";
+}
+
+.icon-weather:before {
+ content: "\e601";
+}
+
+.icon-alarm:before {
+ content: "\e871";
+}
+
+.icon-four-screen:before {
+ content: "\e86a";
+}
+
+.icon-one-screen:before {
+ content: "\e600";
+}
+
+.icon-nine-screen:before {
+ content: "\e65f";
+}
+
+.icon-history:before {
+ content: "\e611";
+}
+
+.icon-station:before {
+ content: "\e6c5";
+}
+
+.icon-more:before {
+ content: "\e83d";
+}
+
+.icon-list:before {
+ content: "\e6be";
+}
+
+.icon-key:before {
+ content: "\e775";
+}
+
+.icon-user-mgt:before {
+ content: "\e617";
+}
+
+.icon-home:before {
+ content: "\e62e";
+}
+
+.icon-set-edit:before {
+ content: "\eb61";
+}
+
+.icon-app-mgt:before {
+ content: "\eb8f";
+}
+
+.icon-setting:before {
+ content: "\e78e";
+}
+
+.icon-folder-open:before {
+ content: "\e7d1";
+}
+
+.icon-image:before {
+ content: "\e7de";
+}
+
+.icon-cloud-download:before {
+ content: "\ec1d";
+}
+
+.icon-cloud-upload:before {
+ content: "\ec1e";
+}
+
+.icon-role-mgt:before {
+ content: "\e645";
+}
+
+.icon-visits-chart:before {
+ content: "\e6a5";
+}
+
+.icon-user-visits:before {
+ content: "\e651";
+}
+
+.icon-turnover:before {
+ content: "\ec18";
+}
+
+.icon-num-transactions:before {
+ content: "\e682";
+}
+
+.icon-num-download:before {
+ content: "\e6f8";
+}
+
+.icon-edit-icon:before {
+ content: "\e621";
+}
+
+.icon-user:before {
+ content: "\e828";
+}
+
+.icon-lock:before {
+ content: "\e62a";
+}
+
+.icon-language:before {
+ content: "\e739";
+}
+
+.icon-arrow-down:before {
+ content: "\e688";
+}
+
+.icon-close:before {
+ content: "\e668";
+}
+
+.icon-filter:before {
+ content: "\e648";
+}
+
+.icon-ashbin:before {
+ content: "\e665";
+}
+
+.icon-code:before {
+ content: "\e667";
+}
+
+.icon-copy:before {
+ content: "\e66a";
+}
+
+.icon-link:before {
+ content: "\e676";
+}
+
+.icon-layers:before {
+ content: "\e675";
+}
+
+.icon-fullscreen:before {
+ content: "\e677";
+}
+
+.icon-menu:before {
+ content: "\e678";
+}
+
+.icon-minus:before {
+ content: "\e67a";
+}
+
+.icon-refresh:before {
+ content: "\e67b";
+}
+
+.icon-scanning:before {
+ content: "\e67d";
+}
+
+.icon-close-other:before {
+ content: "\e624";
+}
+
+.icon-font-size:before {
+ content: "\e689";
+}
+
+.icon-page-left:before {
+ content: "\e659";
+}
+
+.icon-scan:before {
+ content: "\e68b";
+}
+
+.icon-edit:before {
+ content: "\e6aa";
+}
+
+.icon-camera:before {
+ content: "\e666";
+}
+
+.icon-qrcode:before {
+ content: "\e6b0";
+}
+
+.icon-delete:before {
+ content: "\e6b4";
+}
+
+.icon-address:before {
+ content: "\e652";
+}
+
+.icon-clock:before {
+ content: "\e890";
+}
+
+.icon-location:before {
+ content: "\e63d";
+}
+
+.icon-setup:before {
+ content: "\eb8d";
+}
+
+.icon-reset:before {
+ content: "\e614";
+}
+
+.icon-search:before {
+ content: "\e63c";
+}
+
+.icon-page-right:before {
+ content: "\e65b";
+}
+
+.icon-other:before {
+ content: "\e60b";
+}
+
+.icon-safe:before {
+ content: "\ec4d";
+}
+
+.icon-safe-code:before {
+ content: "\e627";
+}
+
+.icon-up:before {
+ content: "\e845";
+}
+
+.icon-angle-double:before {
+ content: "\e849";
+}
+
+.icon-rise:before {
+ content: "\e8f8";
+}
+
+.icon-decline:before {
+ content: "\e8f9";
+}
+
diff --git a/src/assets/iconfont/iconfont.js b/src/assets/iconfont/iconfont.js
new file mode 100644
index 0000000..562cc5e
--- /dev/null
+++ b/src/assets/iconfont/iconfont.js
@@ -0,0 +1 @@
+window._iconfont_svg_string_4223894='',function(h){var c=(c=document.getElementsByTagName("script"))[c.length-1],l=c.getAttribute("data-injectcss"),c=c.getAttribute("data-disable-injectsvg");if(!c){var a,i,t,o,s,v=function(c,l){l.parentNode.insertBefore(c,l)};if(l&&!h.__iconfont__svg__cssinject__){h.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}a=function(){var c,l=document.createElement("div");l.innerHTML=h._iconfont_svg_string_4223894,(l=l.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",l=l,(c=document.body).firstChild?v(l,c.firstChild):c.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(a,0):(i=function(){document.removeEventListener("DOMContentLoaded",i,!1),a()},document.addEventListener("DOMContentLoaded",i,!1)):document.attachEvent&&(t=a,o=h.document,s=!1,m(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,z())})}function z(){s||(s=!0,t())}function m(){try{o.documentElement.doScroll("left")}catch(c){return void setTimeout(m,50)}z()}}(window);
\ No newline at end of file
diff --git a/src/assets/iconfont/iconfont.json b/src/assets/iconfont/iconfont.json
new file mode 100644
index 0000000..0ae11ab
--- /dev/null
+++ b/src/assets/iconfont/iconfont.json
@@ -0,0 +1,506 @@
+{
+ "id": "4223894",
+ "name": "浑南热力",
+ "font_family": "iconfont",
+ "css_prefix_text": "icon-",
+ "description": "",
+ "glyphs": [
+ {
+ "icon_id": "4781603",
+ "name": "堆积面积图",
+ "font_class": "area-chart",
+ "unicode": "e612",
+ "unicode_decimal": 58898
+ },
+ {
+ "icon_id": "15731469",
+ "name": "air_conditioning_filter",
+ "font_class": "HP",
+ "unicode": "e7b1",
+ "unicode_decimal": 59313
+ },
+ {
+ "icon_id": "5037507",
+ "name": "锅炉",
+ "font_class": "boiler",
+ "unicode": "e60d",
+ "unicode_decimal": 58893
+ },
+ {
+ "icon_id": "23060488",
+ "name": "设备",
+ "font_class": "device",
+ "unicode": "e9fd",
+ "unicode_decimal": 59901
+ },
+ {
+ "icon_id": "25873889",
+ "name": "right-换热站-c",
+ "font_class": "heat-exchange-station",
+ "unicode": "e84a",
+ "unicode_decimal": 59466
+ },
+ {
+ "icon_id": "29522767",
+ "name": "30D上双箭头",
+ "font_class": "yincang",
+ "unicode": "e690",
+ "unicode_decimal": 59024
+ },
+ {
+ "icon_id": "29522768",
+ "name": "30C下双箭头",
+ "font_class": "xianshi",
+ "unicode": "e691",
+ "unicode_decimal": 59025
+ },
+ {
+ "icon_id": "1447",
+ "name": "多云",
+ "font_class": "weather",
+ "unicode": "e601",
+ "unicode_decimal": 58881
+ },
+ {
+ "icon_id": "18164959",
+ "name": "报警,警报,报警灯,危险",
+ "font_class": "alarm",
+ "unicode": "e871",
+ "unicode_decimal": 59505
+ },
+ {
+ "icon_id": "18164825",
+ "name": "分屏,宫格",
+ "font_class": "four-screen",
+ "unicode": "e86a",
+ "unicode_decimal": 59498
+ },
+ {
+ "icon_id": "1278",
+ "name": "单图排列",
+ "font_class": "one-screen",
+ "unicode": "e600",
+ "unicode_decimal": 58880
+ },
+ {
+ "icon_id": "9773647",
+ "name": "homepage",
+ "font_class": "nine-screen",
+ "unicode": "e65f",
+ "unicode_decimal": 58975
+ },
+ {
+ "icon_id": "8821264",
+ "name": "历史-01",
+ "font_class": "history",
+ "unicode": "e611",
+ "unicode_decimal": 58897
+ },
+ {
+ "icon_id": "18911700",
+ "name": "换热站",
+ "font_class": "station",
+ "unicode": "e6c5",
+ "unicode_decimal": 59077
+ },
+ {
+ "icon_id": "34453016",
+ "name": "more",
+ "font_class": "more",
+ "unicode": "e83d",
+ "unicode_decimal": 59453
+ },
+ {
+ "icon_id": "8474293",
+ "name": "list",
+ "font_class": "list",
+ "unicode": "e6be",
+ "unicode_decimal": 59070
+ },
+ {
+ "icon_id": "6150969",
+ "name": "key",
+ "font_class": "key",
+ "unicode": "e775",
+ "unicode_decimal": 59253
+ },
+ {
+ "icon_id": "1348257",
+ "name": "用户管理",
+ "font_class": "user-mgt",
+ "unicode": "e617",
+ "unicode_decimal": 58903
+ },
+ {
+ "icon_id": "2675009",
+ "name": "首页",
+ "font_class": "home",
+ "unicode": "e62e",
+ "unicode_decimal": 58926
+ },
+ {
+ "icon_id": "3868263",
+ "name": "编辑",
+ "font_class": "set-edit",
+ "unicode": "eb61",
+ "unicode_decimal": 60257
+ },
+ {
+ "icon_id": "4347582",
+ "name": "icon_应用管理",
+ "font_class": "app-mgt",
+ "unicode": "eb8f",
+ "unicode_decimal": 60303
+ },
+ {
+ "icon_id": "4765891",
+ "name": "setting",
+ "font_class": "setting",
+ "unicode": "e78e",
+ "unicode_decimal": 59278
+ },
+ {
+ "icon_id": "4766847",
+ "name": "folder-open",
+ "font_class": "folder-open",
+ "unicode": "e7d1",
+ "unicode_decimal": 59345
+ },
+ {
+ "icon_id": "4766917",
+ "name": "image",
+ "font_class": "image",
+ "unicode": "e7de",
+ "unicode_decimal": 59358
+ },
+ {
+ "icon_id": "4932635",
+ "name": "云端下载",
+ "font_class": "cloud-download",
+ "unicode": "ec1d",
+ "unicode_decimal": 60445
+ },
+ {
+ "icon_id": "4932636",
+ "name": "云端上传",
+ "font_class": "cloud-upload",
+ "unicode": "ec1e",
+ "unicode_decimal": 60446
+ },
+ {
+ "icon_id": "6447176",
+ "name": "角色管理",
+ "font_class": "role-mgt",
+ "unicode": "e645",
+ "unicode_decimal": 58949
+ },
+ {
+ "icon_id": "6033101",
+ "name": "访问量",
+ "font_class": "visits-chart",
+ "unicode": "e6a5",
+ "unicode_decimal": 59045
+ },
+ {
+ "icon_id": "7956168",
+ "name": "总访问量",
+ "font_class": "user-visits",
+ "unicode": "e651",
+ "unicode_decimal": 58961
+ },
+ {
+ "icon_id": "26442901",
+ "name": "订单成交额",
+ "font_class": "turnover",
+ "unicode": "ec18",
+ "unicode_decimal": 60440
+ },
+ {
+ "icon_id": "26908793",
+ "name": "成交数据-01",
+ "font_class": "num-transactions",
+ "unicode": "e682",
+ "unicode_decimal": 59010
+ },
+ {
+ "icon_id": "31500093",
+ "name": "下载数量",
+ "font_class": "num-download",
+ "unicode": "e6f8",
+ "unicode_decimal": 59128
+ },
+ {
+ "icon_id": "33987167",
+ "name": "编辑",
+ "font_class": "edit-icon",
+ "unicode": "e621",
+ "unicode_decimal": 58913
+ },
+ {
+ "icon_id": "34452814",
+ "name": "customer-fill",
+ "font_class": "user",
+ "unicode": "e828",
+ "unicode_decimal": 59432
+ },
+ {
+ "icon_id": "611345",
+ "name": "密码",
+ "font_class": "lock",
+ "unicode": "e62a",
+ "unicode_decimal": 58922
+ },
+ {
+ "icon_id": "31061118",
+ "name": "中英切换",
+ "font_class": "language",
+ "unicode": "e739",
+ "unicode_decimal": 59193
+ },
+ {
+ "icon_id": "15838582",
+ "name": "arrow-down-filling",
+ "font_class": "arrow-down",
+ "unicode": "e688",
+ "unicode_decimal": 59016
+ },
+ {
+ "icon_id": "15838444",
+ "name": "close",
+ "font_class": "close",
+ "unicode": "e668",
+ "unicode_decimal": 58984
+ },
+ {
+ "icon_id": "8777080",
+ "name": "filter",
+ "font_class": "filter",
+ "unicode": "e648",
+ "unicode_decimal": 58952
+ },
+ {
+ "icon_id": "15838430",
+ "name": "ashbin",
+ "font_class": "ashbin",
+ "unicode": "e665",
+ "unicode_decimal": 58981
+ },
+ {
+ "icon_id": "15838443",
+ "name": "code",
+ "font_class": "code",
+ "unicode": "e667",
+ "unicode_decimal": 58983
+ },
+ {
+ "icon_id": "15838456",
+ "name": "copy",
+ "font_class": "copy",
+ "unicode": "e66a",
+ "unicode_decimal": 58986
+ },
+ {
+ "icon_id": "15838493",
+ "name": "link",
+ "font_class": "link",
+ "unicode": "e676",
+ "unicode_decimal": 58998
+ },
+ {
+ "icon_id": "15838496",
+ "name": "layers",
+ "font_class": "layers",
+ "unicode": "e675",
+ "unicode_decimal": 58997
+ },
+ {
+ "icon_id": "15838498",
+ "name": "fullscreen-expand",
+ "font_class": "fullscreen",
+ "unicode": "e677",
+ "unicode_decimal": 58999
+ },
+ {
+ "icon_id": "15838501",
+ "name": "menu",
+ "font_class": "menu",
+ "unicode": "e678",
+ "unicode_decimal": 59000
+ },
+ {
+ "icon_id": "15838514",
+ "name": "minus",
+ "font_class": "minus",
+ "unicode": "e67a",
+ "unicode_decimal": 59002
+ },
+ {
+ "icon_id": "15838519",
+ "name": "refresh",
+ "font_class": "refresh",
+ "unicode": "e67b",
+ "unicode_decimal": 59003
+ },
+ {
+ "icon_id": "15838527",
+ "name": "scanning",
+ "font_class": "scanning",
+ "unicode": "e67d",
+ "unicode_decimal": 59005
+ },
+ {
+ "icon_id": "33077825",
+ "name": "关闭其他-01",
+ "font_class": "close-other",
+ "unicode": "e624",
+ "unicode_decimal": 58916
+ },
+ {
+ "icon_id": "24502124",
+ "name": "字体大小",
+ "font_class": "font-size",
+ "unicode": "e689",
+ "unicode_decimal": 59017
+ },
+ {
+ "icon_id": "8777532",
+ "name": "page_first",
+ "font_class": "page-left",
+ "unicode": "e659",
+ "unicode_decimal": 58969
+ },
+ {
+ "icon_id": "16617390",
+ "name": "scan",
+ "font_class": "scan",
+ "unicode": "e68b",
+ "unicode_decimal": 59019
+ },
+ {
+ "icon_id": "16618154",
+ "name": "edit",
+ "font_class": "edit",
+ "unicode": "e6aa",
+ "unicode_decimal": 59050
+ },
+ {
+ "icon_id": "30414",
+ "name": "camera",
+ "font_class": "camera",
+ "unicode": "e666",
+ "unicode_decimal": 58982
+ },
+ {
+ "icon_id": "32472",
+ "name": "qr_code",
+ "font_class": "qrcode",
+ "unicode": "e6b0",
+ "unicode_decimal": 59056
+ },
+ {
+ "icon_id": "32477",
+ "name": "delete",
+ "font_class": "delete",
+ "unicode": "e6b4",
+ "unicode_decimal": 59060
+ },
+ {
+ "icon_id": "658000",
+ "name": "地址",
+ "font_class": "address",
+ "unicode": "e652",
+ "unicode_decimal": 58962
+ },
+ {
+ "icon_id": "2076264",
+ "name": "闹钟",
+ "font_class": "clock",
+ "unicode": "e890",
+ "unicode_decimal": 59536
+ },
+ {
+ "icon_id": "9690751",
+ "name": "地址",
+ "font_class": "location",
+ "unicode": "e63d",
+ "unicode_decimal": 58941
+ },
+ {
+ "icon_id": "4347549",
+ "name": "icon_设置",
+ "font_class": "setup",
+ "unicode": "eb8d",
+ "unicode_decimal": 60301
+ },
+ {
+ "icon_id": "27253675",
+ "name": "重置",
+ "font_class": "reset",
+ "unicode": "e614",
+ "unicode_decimal": 58900
+ },
+ {
+ "icon_id": "8776842",
+ "name": "search",
+ "font_class": "search",
+ "unicode": "e63c",
+ "unicode_decimal": 58940
+ },
+ {
+ "icon_id": "8777535",
+ "name": "page_last",
+ "font_class": "page-right",
+ "unicode": "e65b",
+ "unicode_decimal": 58971
+ },
+ {
+ "icon_id": "13106274",
+ "name": "其他",
+ "font_class": "other",
+ "unicode": "e60b",
+ "unicode_decimal": 58891
+ },
+ {
+ "icon_id": "5961299",
+ "name": "安全",
+ "font_class": "safe",
+ "unicode": "ec4d",
+ "unicode_decimal": 60493
+ },
+ {
+ "icon_id": "1599882",
+ "name": "网商银行无线端_安全",
+ "font_class": "safe-code",
+ "unicode": "e627",
+ "unicode_decimal": 58919
+ },
+ {
+ "icon_id": "34453072",
+ "name": "up",
+ "font_class": "up",
+ "unicode": "e845",
+ "unicode_decimal": 59461
+ },
+ {
+ "icon_id": "6151391",
+ "name": "angle-double-up",
+ "font_class": "angle-double",
+ "unicode": "e849",
+ "unicode_decimal": 59465
+ },
+ {
+ "icon_id": "1727559",
+ "name": "323向左交换",
+ "font_class": "rise",
+ "unicode": "e8f8",
+ "unicode_decimal": 59640
+ },
+ {
+ "icon_id": "1727561",
+ "name": "324向右交换",
+ "font_class": "decline",
+ "unicode": "e8f9",
+ "unicode_decimal": 59641
+ }
+ ]
+}
diff --git a/src/assets/iconfont/iconfont.ttf b/src/assets/iconfont/iconfont.ttf
new file mode 100644
index 0000000..dd2ced9
Binary files /dev/null and b/src/assets/iconfont/iconfont.ttf differ
diff --git a/src/assets/iconfont/iconfont.woff b/src/assets/iconfont/iconfont.woff
new file mode 100644
index 0000000..8a81478
Binary files /dev/null and b/src/assets/iconfont/iconfont.woff differ
diff --git a/src/assets/iconfont/iconfont.woff2 b/src/assets/iconfont/iconfont.woff2
new file mode 100644
index 0000000..4d7fe0e
Binary files /dev/null and b/src/assets/iconfont/iconfont.woff2 differ
diff --git a/src/assets/icons/svg/BIlogo.svg b/src/assets/icons/svg/BIlogo.svg
new file mode 100644
index 0000000..0188584
--- /dev/null
+++ b/src/assets/icons/svg/BIlogo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/advert.svg b/src/assets/icons/svg/advert.svg
new file mode 100644
index 0000000..5adcf43
--- /dev/null
+++ b/src/assets/icons/svg/advert.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/alarm.svg b/src/assets/icons/svg/alarm.svg
new file mode 100644
index 0000000..7bec76b
--- /dev/null
+++ b/src/assets/icons/svg/alarm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/api.svg b/src/assets/icons/svg/api.svg
new file mode 100644
index 0000000..2753743
--- /dev/null
+++ b/src/assets/icons/svg/api.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/icons/svg/baoxue-rijian.svg b/src/assets/icons/svg/baoxue-rijian.svg
new file mode 100644
index 0000000..f4b8d48
--- /dev/null
+++ b/src/assets/icons/svg/baoxue-rijian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/baoyu-rijian.svg b/src/assets/icons/svg/baoyu-rijian.svg
new file mode 100644
index 0000000..3dae155
--- /dev/null
+++ b/src/assets/icons/svg/baoyu-rijian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/brand.svg b/src/assets/icons/svg/brand.svg
new file mode 100644
index 0000000..e4b7cee
--- /dev/null
+++ b/src/assets/icons/svg/brand.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/client.svg b/src/assets/icons/svg/client.svg
new file mode 100644
index 0000000..ad4bc15
--- /dev/null
+++ b/src/assets/icons/svg/client.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/close.svg b/src/assets/icons/svg/close.svg
new file mode 100644
index 0000000..5b5057f
--- /dev/null
+++ b/src/assets/icons/svg/close.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/close_all.svg b/src/assets/icons/svg/close_all.svg
new file mode 100644
index 0000000..aa13cd7
--- /dev/null
+++ b/src/assets/icons/svg/close_all.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/close_left.svg b/src/assets/icons/svg/close_left.svg
new file mode 100644
index 0000000..e5708ea
--- /dev/null
+++ b/src/assets/icons/svg/close_left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/close_other.svg b/src/assets/icons/svg/close_other.svg
new file mode 100644
index 0000000..212e6c2
--- /dev/null
+++ b/src/assets/icons/svg/close_other.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/icons/svg/close_right.svg b/src/assets/icons/svg/close_right.svg
new file mode 100644
index 0000000..14d3cf3
--- /dev/null
+++ b/src/assets/icons/svg/close_right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/coupon.svg b/src/assets/icons/svg/coupon.svg
new file mode 100644
index 0000000..2f952b2
--- /dev/null
+++ b/src/assets/icons/svg/coupon.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/icons/svg/dabaoyu-rijian.svg b/src/assets/icons/svg/dabaoyu-rijian.svg
new file mode 100644
index 0000000..d1d41e6
--- /dev/null
+++ b/src/assets/icons/svg/dabaoyu-rijian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/daxue-rijian.svg b/src/assets/icons/svg/daxue-rijian.svg
new file mode 100644
index 0000000..dc29cc0
--- /dev/null
+++ b/src/assets/icons/svg/daxue-rijian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/dayu-rijian.svg b/src/assets/icons/svg/dayu-rijian.svg
new file mode 100644
index 0000000..848044e
--- /dev/null
+++ b/src/assets/icons/svg/dayu-rijian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/dict_item.svg b/src/assets/icons/svg/dict_item.svg
new file mode 100644
index 0000000..903109a
--- /dev/null
+++ b/src/assets/icons/svg/dict_item.svg
@@ -0,0 +1,12 @@
+
diff --git a/src/assets/icons/svg/document.svg b/src/assets/icons/svg/document.svg
new file mode 100644
index 0000000..918ae33
--- /dev/null
+++ b/src/assets/icons/svg/document.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/icons/svg/dongyu-rijian.svg b/src/assets/icons/svg/dongyu-rijian.svg
new file mode 100644
index 0000000..494dfb4
--- /dev/null
+++ b/src/assets/icons/svg/dongyu-rijian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/duoyun-rijian.svg b/src/assets/icons/svg/duoyun-rijian.svg
new file mode 100644
index 0000000..e124b37
--- /dev/null
+++ b/src/assets/icons/svg/duoyun-rijian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/duoyun-wanjian.svg b/src/assets/icons/svg/duoyun-wanjian.svg
new file mode 100644
index 0000000..5ef7278
--- /dev/null
+++ b/src/assets/icons/svg/duoyun-wanjian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/fuchen-rijian.svg b/src/assets/icons/svg/fuchen-rijian.svg
new file mode 100644
index 0000000..e935c50
--- /dev/null
+++ b/src/assets/icons/svg/fuchen-rijian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/goods-list.svg b/src/assets/icons/svg/goods-list.svg
new file mode 100644
index 0000000..fcb971e
--- /dev/null
+++ b/src/assets/icons/svg/goods-list.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/goods.svg b/src/assets/icons/svg/goods.svg
new file mode 100644
index 0000000..60c1c73
--- /dev/null
+++ b/src/assets/icons/svg/goods.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/homepage.svg b/src/assets/icons/svg/homepage.svg
new file mode 100644
index 0000000..48f4e24
--- /dev/null
+++ b/src/assets/icons/svg/homepage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/icon_back.svg b/src/assets/icons/svg/icon_back.svg
new file mode 100644
index 0000000..c481bc6
--- /dev/null
+++ b/src/assets/icons/svg/icon_back.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/icon_curve.svg b/src/assets/icons/svg/icon_curve.svg
new file mode 100644
index 0000000..7b65e30
--- /dev/null
+++ b/src/assets/icons/svg/icon_curve.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/icon_menu.svg b/src/assets/icons/svg/icon_menu.svg
new file mode 100644
index 0000000..b68f6f4
--- /dev/null
+++ b/src/assets/icons/svg/icon_menu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/lab.svg b/src/assets/icons/svg/lab.svg
new file mode 100644
index 0000000..d4d60aa
--- /dev/null
+++ b/src/assets/icons/svg/lab.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/leizhenyu-rijian.svg b/src/assets/icons/svg/leizhenyu-rijian.svg
new file mode 100644
index 0000000..671fdd7
--- /dev/null
+++ b/src/assets/icons/svg/leizhenyu-rijian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/leizhenyujiabingbao.svg b/src/assets/icons/svg/leizhenyujiabingbao.svg
new file mode 100644
index 0000000..b5520c7
--- /dev/null
+++ b/src/assets/icons/svg/leizhenyujiabingbao.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/menu.svg b/src/assets/icons/svg/menu.svg
new file mode 100644
index 0000000..92c364c
--- /dev/null
+++ b/src/assets/icons/svg/menu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/multi_level.svg b/src/assets/icons/svg/multi_level.svg
new file mode 100644
index 0000000..a1a2792
--- /dev/null
+++ b/src/assets/icons/svg/multi_level.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/icons/svg/order.svg b/src/assets/icons/svg/order.svg
new file mode 100644
index 0000000..8f2107e
--- /dev/null
+++ b/src/assets/icons/svg/order.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/perm.svg b/src/assets/icons/svg/perm.svg
new file mode 100644
index 0000000..b38d065
--- /dev/null
+++ b/src/assets/icons/svg/perm.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/icons/svg/publish.svg b/src/assets/icons/svg/publish.svg
new file mode 100644
index 0000000..e9b489c
--- /dev/null
+++ b/src/assets/icons/svg/publish.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/qiangshachenbao.svg b/src/assets/icons/svg/qiangshachenbao.svg
new file mode 100644
index 0000000..bfb84ab
--- /dev/null
+++ b/src/assets/icons/svg/qiangshachenbao.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/qing-rijian.svg b/src/assets/icons/svg/qing-rijian.svg
new file mode 100644
index 0000000..5c931e5
--- /dev/null
+++ b/src/assets/icons/svg/qing-rijian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/qing-wanjian.svg b/src/assets/icons/svg/qing-wanjian.svg
new file mode 100644
index 0000000..3f63689
--- /dev/null
+++ b/src/assets/icons/svg/qing-wanjian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/rabbitmq.svg b/src/assets/icons/svg/rabbitmq.svg
new file mode 100644
index 0000000..65aa198
--- /dev/null
+++ b/src/assets/icons/svg/rabbitmq.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/refresh.svg b/src/assets/icons/svg/refresh.svg
new file mode 100644
index 0000000..1f549f1
--- /dev/null
+++ b/src/assets/icons/svg/refresh.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/role.svg b/src/assets/icons/svg/role.svg
new file mode 100644
index 0000000..c484b13
--- /dev/null
+++ b/src/assets/icons/svg/role.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/security.svg b/src/assets/icons/svg/security.svg
new file mode 100644
index 0000000..bcd9d2e
--- /dev/null
+++ b/src/assets/icons/svg/security.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/shachenbao-rijian.svg b/src/assets/icons/svg/shachenbao-rijian.svg
new file mode 100644
index 0000000..8bb8f8b
--- /dev/null
+++ b/src/assets/icons/svg/shachenbao-rijian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/tedabaoyu.svg b/src/assets/icons/svg/tedabaoyu.svg
new file mode 100644
index 0000000..212908e
--- /dev/null
+++ b/src/assets/icons/svg/tedabaoyu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/uv.svg b/src/assets/icons/svg/uv.svg
new file mode 100644
index 0000000..ca4c301
--- /dev/null
+++ b/src/assets/icons/svg/uv.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/valid_code.svg b/src/assets/icons/svg/valid_code.svg
new file mode 100644
index 0000000..39bf478
--- /dev/null
+++ b/src/assets/icons/svg/valid_code.svg
@@ -0,0 +1,9 @@
+
diff --git a/src/assets/icons/svg/verify_code.svg b/src/assets/icons/svg/verify_code.svg
new file mode 100644
index 0000000..39bf478
--- /dev/null
+++ b/src/assets/icons/svg/verify_code.svg
@@ -0,0 +1,9 @@
+
diff --git a/src/assets/icons/svg/warning_lights.svg b/src/assets/icons/svg/warning_lights.svg
new file mode 100644
index 0000000..e8fc9a7
--- /dev/null
+++ b/src/assets/icons/svg/warning_lights.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/wu-rijian.svg b/src/assets/icons/svg/wu-rijian.svg
new file mode 100644
index 0000000..2f930ee
--- /dev/null
+++ b/src/assets/icons/svg/wu-rijian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/xiaoxue-rijian.svg b/src/assets/icons/svg/xiaoxue-rijian.svg
new file mode 100644
index 0000000..21e4e3c
--- /dev/null
+++ b/src/assets/icons/svg/xiaoxue-rijian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/xiaoyu-rijian.svg b/src/assets/icons/svg/xiaoyu-rijian.svg
new file mode 100644
index 0000000..36b9046
--- /dev/null
+++ b/src/assets/icons/svg/xiaoyu-rijian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/yangsha-rijian.svg b/src/assets/icons/svg/yangsha-rijian.svg
new file mode 100644
index 0000000..8723fa8
--- /dev/null
+++ b/src/assets/icons/svg/yangsha-rijian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/yin-rijian.svg b/src/assets/icons/svg/yin-rijian.svg
new file mode 100644
index 0000000..0e2fa38
--- /dev/null
+++ b/src/assets/icons/svg/yin-rijian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/yujiaxue-rijian.svg b/src/assets/icons/svg/yujiaxue-rijian.svg
new file mode 100644
index 0000000..12fb413
--- /dev/null
+++ b/src/assets/icons/svg/yujiaxue-rijian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/zhenxue-rijian.svg b/src/assets/icons/svg/zhenxue-rijian.svg
new file mode 100644
index 0000000..8495765
--- /dev/null
+++ b/src/assets/icons/svg/zhenxue-rijian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/zhenxue-wanjian.svg b/src/assets/icons/svg/zhenxue-wanjian.svg
new file mode 100644
index 0000000..000747d
--- /dev/null
+++ b/src/assets/icons/svg/zhenxue-wanjian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/zhenyu-rijian.svg b/src/assets/icons/svg/zhenyu-rijian.svg
new file mode 100644
index 0000000..07caf8e
--- /dev/null
+++ b/src/assets/icons/svg/zhenyu-rijian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/zhenyu-wanjian.svg b/src/assets/icons/svg/zhenyu-wanjian.svg
new file mode 100644
index 0000000..15c9622
--- /dev/null
+++ b/src/assets/icons/svg/zhenyu-wanjian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/zhongxue-rijian.svg b/src/assets/icons/svg/zhongxue-rijian.svg
new file mode 100644
index 0000000..a3b882b
--- /dev/null
+++ b/src/assets/icons/svg/zhongxue-rijian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/zhongyu-rijian.svg b/src/assets/icons/svg/zhongyu-rijian.svg
new file mode 100644
index 0000000..af8b553
--- /dev/null
+++ b/src/assets/icons/svg/zhongyu-rijian.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/images/avatar.png b/src/assets/images/avatar.png
new file mode 100644
index 0000000..592d266
Binary files /dev/null and b/src/assets/images/avatar.png differ
diff --git a/src/assets/images/col_icon.png b/src/assets/images/col_icon.png
new file mode 100644
index 0000000..78ee7a1
Binary files /dev/null and b/src/assets/images/col_icon.png differ
diff --git a/src/assets/images/dataVisual/header_bg.png b/src/assets/images/dataVisual/header_bg.png
new file mode 100644
index 0000000..42c7c13
Binary files /dev/null and b/src/assets/images/dataVisual/header_bg.png differ
diff --git a/src/assets/images/dataVisual/icon_curve.svg b/src/assets/images/dataVisual/icon_curve.svg
new file mode 100644
index 0000000..1f856af
--- /dev/null
+++ b/src/assets/images/dataVisual/icon_curve.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/images/dataVisual/icon_list.svg b/src/assets/images/dataVisual/icon_list.svg
new file mode 100644
index 0000000..18f0d95
--- /dev/null
+++ b/src/assets/images/dataVisual/icon_list.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/images/dataVisual/icon_search.svg b/src/assets/images/dataVisual/icon_search.svg
new file mode 100644
index 0000000..a11b9a9
--- /dev/null
+++ b/src/assets/images/dataVisual/icon_search.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/images/dataVisual/title_bg.png b/src/assets/images/dataVisual/title_bg.png
new file mode 100644
index 0000000..4c7f9ef
Binary files /dev/null and b/src/assets/images/dataVisual/title_bg.png differ
diff --git a/src/assets/images/dataVisual/title_bg_l.png b/src/assets/images/dataVisual/title_bg_l.png
new file mode 100644
index 0000000..d7e751d
Binary files /dev/null and b/src/assets/images/dataVisual/title_bg_l.png differ
diff --git a/src/assets/images/data_c/background.png b/src/assets/images/data_c/background.png
new file mode 100644
index 0000000..b8396ca
Binary files /dev/null and b/src/assets/images/data_c/background.png differ
diff --git a/src/assets/images/data_c/background_16.png b/src/assets/images/data_c/background_16.png
new file mode 100644
index 0000000..20a63d6
Binary files /dev/null and b/src/assets/images/data_c/background_16.png differ
diff --git a/src/assets/images/data_c/background_16_copy.png b/src/assets/images/data_c/background_16_copy.png
new file mode 100644
index 0000000..1d89799
Binary files /dev/null and b/src/assets/images/data_c/background_16_copy.png differ
diff --git a/src/assets/images/data_c/bg_block.png b/src/assets/images/data_c/bg_block.png
new file mode 100644
index 0000000..cbefa49
Binary files /dev/null and b/src/assets/images/data_c/bg_block.png differ
diff --git a/src/assets/images/data_c/bg_title.png b/src/assets/images/data_c/bg_title.png
new file mode 100644
index 0000000..0bc4c17
Binary files /dev/null and b/src/assets/images/data_c/bg_title.png differ
diff --git a/src/assets/images/data_c/content_bg_16.png b/src/assets/images/data_c/content_bg_16.png
new file mode 100644
index 0000000..6d3dba6
Binary files /dev/null and b/src/assets/images/data_c/content_bg_16.png differ
diff --git a/src/assets/images/data_c/header_bg_16.png b/src/assets/images/data_c/header_bg_16.png
new file mode 100644
index 0000000..a8ee5a4
Binary files /dev/null and b/src/assets/images/data_c/header_bg_16.png differ
diff --git a/src/assets/images/data_c/rendering.png b/src/assets/images/data_c/rendering.png
new file mode 100644
index 0000000..5a71b99
Binary files /dev/null and b/src/assets/images/data_c/rendering.png differ
diff --git a/src/assets/images/data_c/title_bg.png b/src/assets/images/data_c/title_bg.png
new file mode 100644
index 0000000..465b5df
Binary files /dev/null and b/src/assets/images/data_c/title_bg.png differ
diff --git a/src/assets/images/data_c/title_bg_l.png b/src/assets/images/data_c/title_bg_l.png
new file mode 100644
index 0000000..d3c8772
Binary files /dev/null and b/src/assets/images/data_c/title_bg_l.png differ
diff --git a/src/assets/images/data_c/title_short.png b/src/assets/images/data_c/title_short.png
new file mode 100644
index 0000000..43d15fb
Binary files /dev/null and b/src/assets/images/data_c/title_short.png differ
diff --git a/src/assets/images/device/liangfaliangqu.gif b/src/assets/images/device/liangfaliangqu.gif
new file mode 100644
index 0000000..82f7746
Binary files /dev/null and b/src/assets/images/device/liangfaliangqu.gif differ
diff --git a/src/assets/images/device/liangfaliangquyibeng.gif b/src/assets/images/device/liangfaliangquyibeng.gif
new file mode 100644
index 0000000..664ffbf
Binary files /dev/null and b/src/assets/images/device/liangfaliangquyibeng.gif differ
diff --git a/src/assets/images/device/sanfasanqu.gif b/src/assets/images/device/sanfasanqu.gif
new file mode 100644
index 0000000..73d4586
Binary files /dev/null and b/src/assets/images/device/sanfasanqu.gif differ
diff --git a/src/assets/images/device/sanfasanquyibeng.gif b/src/assets/images/device/sanfasanquyibeng.gif
new file mode 100644
index 0000000..46b18e4
Binary files /dev/null and b/src/assets/images/device/sanfasanquyibeng.gif differ
diff --git a/src/assets/images/device/yifaliangqu.gif b/src/assets/images/device/yifaliangqu.gif
new file mode 100644
index 0000000..328519b
Binary files /dev/null and b/src/assets/images/device/yifaliangqu.gif differ
diff --git a/src/assets/images/device/yifaliangquyibeng.gif b/src/assets/images/device/yifaliangquyibeng.gif
new file mode 100644
index 0000000..89c263a
Binary files /dev/null and b/src/assets/images/device/yifaliangquyibeng.gif differ
diff --git a/src/assets/images/device/yifasanqu.gif b/src/assets/images/device/yifasanqu.gif
new file mode 100644
index 0000000..1fb9251
Binary files /dev/null and b/src/assets/images/device/yifasanqu.gif differ
diff --git a/src/assets/images/device/yifayiqu.gif b/src/assets/images/device/yifayiqu.gif
new file mode 100644
index 0000000..9745ad2
Binary files /dev/null and b/src/assets/images/device/yifayiqu.gif differ
diff --git a/src/assets/images/device/yifayiquyibeng.gif b/src/assets/images/device/yifayiquyibeng.gif
new file mode 100644
index 0000000..22c1d9f
Binary files /dev/null and b/src/assets/images/device/yifayiquyibeng.gif differ
diff --git a/src/assets/images/device/yifaysanquyibeng.gif b/src/assets/images/device/yifaysanquyibeng.gif
new file mode 100644
index 0000000..f2b8b71
Binary files /dev/null and b/src/assets/images/device/yifaysanquyibeng.gif differ
diff --git a/src/assets/images/device01.gif b/src/assets/images/device01.gif
new file mode 100644
index 0000000..22c1d9f
Binary files /dev/null and b/src/assets/images/device01.gif differ
diff --git a/src/assets/images/device02.gif b/src/assets/images/device02.gif
new file mode 100644
index 0000000..89c263a
Binary files /dev/null and b/src/assets/images/device02.gif differ
diff --git a/src/assets/images/device03.gif b/src/assets/images/device03.gif
new file mode 100644
index 0000000..1fb9251
Binary files /dev/null and b/src/assets/images/device03.gif differ
diff --git a/src/assets/images/info_bg.png b/src/assets/images/info_bg.png
new file mode 100644
index 0000000..8a27ead
Binary files /dev/null and b/src/assets/images/info_bg.png differ
diff --git a/src/assets/images/login-bg.mp4 b/src/assets/images/login-bg.mp4
new file mode 100644
index 0000000..ae43f45
Binary files /dev/null and b/src/assets/images/login-bg.mp4 differ
diff --git a/src/assets/images/login-bg.png b/src/assets/images/login-bg.png
new file mode 100644
index 0000000..187fdf2
Binary files /dev/null and b/src/assets/images/login-bg.png differ
diff --git a/src/assets/images/logo.png b/src/assets/images/logo.png
new file mode 100644
index 0000000..33039f2
Binary files /dev/null and b/src/assets/images/logo.png differ
diff --git a/src/assets/images/menu_bg.png b/src/assets/images/menu_bg.png
new file mode 100644
index 0000000..f783fcb
Binary files /dev/null and b/src/assets/images/menu_bg.png differ
diff --git a/src/assets/images/panelBtn_bg.png b/src/assets/images/panelBtn_bg.png
new file mode 100644
index 0000000..13ebed1
Binary files /dev/null and b/src/assets/images/panelBtn_bg.png differ
diff --git a/src/assets/images/panel_icon.png b/src/assets/images/panel_icon.png
new file mode 100644
index 0000000..96c6750
Binary files /dev/null and b/src/assets/images/panel_icon.png differ
diff --git a/src/assets/images/screen.png b/src/assets/images/screen.png
new file mode 100644
index 0000000..819c22e
Binary files /dev/null and b/src/assets/images/screen.png differ
diff --git a/src/assets/images/taps.png b/src/assets/images/taps.png
new file mode 100644
index 0000000..3e04ada
Binary files /dev/null and b/src/assets/images/taps.png differ
diff --git a/src/assets/images/title-bg.png b/src/assets/images/title-bg.png
new file mode 100644
index 0000000..adf7875
Binary files /dev/null and b/src/assets/images/title-bg.png differ
diff --git a/src/assets/images/waring_bg.png b/src/assets/images/waring_bg.png
new file mode 100644
index 0000000..73560b3
Binary files /dev/null and b/src/assets/images/waring_bg.png differ
diff --git a/src/assets/images/weather/duoyun.png b/src/assets/images/weather/duoyun.png
new file mode 100644
index 0000000..079d1e3
Binary files /dev/null and b/src/assets/images/weather/duoyun.png differ
diff --git a/src/assets/media/alarm.mp3 b/src/assets/media/alarm.mp3
new file mode 100644
index 0000000..ef00043
Binary files /dev/null and b/src/assets/media/alarm.mp3 differ
diff --git a/src/assets/media/alarm1.mp3 b/src/assets/media/alarm1.mp3
new file mode 100644
index 0000000..cbc41a1
Binary files /dev/null and b/src/assets/media/alarm1.mp3 differ
diff --git a/src/assets/media/alarm2.mp3 b/src/assets/media/alarm2.mp3
new file mode 100644
index 0000000..c81fcc6
Binary files /dev/null and b/src/assets/media/alarm2.mp3 differ
diff --git a/src/main.js b/src/main.js
index a9b6818..977bb00 100644
--- a/src/main.js
+++ b/src/main.js
@@ -1,102 +1,112 @@
-import { createApp } from 'vue'
+import { createApp } from "vue";
-import Cookies from 'js-cookie'
+import Cookies from "js-cookie";
-import ElementPlus from 'element-plus'
-import locale from 'element-plus/lib/locale/lang/zh-cn' // 中文语言
+import ElementPlus from "element-plus";
+import locale from "element-plus/lib/locale/lang/zh-cn"; // 中文语言
import { useTable } from "./plugins/vxe-table";
-import '@/assets/styles/index.scss' // global css
+import "@/assets/styles/index.scss"; // global css
import "vxe-table/lib/style.css";
-import App from './App'
-import store from './store'
-import router from './router'
-import directive from './directive' // directive
-
+import App from "./App";
+import store from "./store";
+import router from "./router";
+import directive from "./directive"; // directive
// 注册指令
-import plugins from './plugins' // plugins
-import { download,newDownload } from '@/utils/request'
+import plugins from "./plugins"; // plugins
+import { download, newDownload } from "@/utils/request";
// svg图标
-import 'virtual:svg-icons-register'
-import SvgIcon from '@/components/SvgIcon'
-import elementIcons from '@/components/SvgIcon/svgicon'
+import "virtual:svg-icons-register";
+import SvgIcon from "@/components/SvgIcon";
+import elementIcons from "@/components/SvgIcon/svgicon";
+
+import DataVVue3 from "@kjgl77/datav-vue3";
-import DataVVue3 from '@kjgl77/datav-vue3'
+import "./utils/rem"; //引入px和rem适配方案
+import "./permission"; // permission control
-import './permission' // permission control
+import "@/styles/index.scss";
+import "@/assets/iconfont/iconfont.css";
+import "animate.css/animate.min.css";
-import { useDict } from '@/utils/dict'
-import { parseTime, resetForm, addDateRange, handleTree, selectDictLabel, selectDictLabels } from '@/utils/ruoyi'
+import { useDict } from "@/utils/dict";
+import {
+ parseTime,
+ resetForm,
+ addDateRange,
+ handleTree,
+ selectDictLabel,
+ selectDictLabels,
+} from "@/utils/ruoyi";
// 分页组件
-import Pagination from '@/components/Pagination'
+import Pagination from "@/components/Pagination";
// 自定义表格工具组件
-import RightToolbar from '@/components/RightToolbar'
+import RightToolbar from "@/components/RightToolbar";
// 文件上传组件
-import FileUpload from "@/components/FileUpload"
+import FileUpload from "@/components/FileUpload";
// 图片上传组件
-import ImageUpload from "@/components/ImageUpload"
+import ImageUpload from "@/components/ImageUpload";
// 图片预览组件
-import ImagePreview from "@/components/ImagePreview"
+import ImagePreview from "@/components/ImagePreview";
// 自定义树选择组件
-import TreeSelect from '@/components/TreeSelect'
+import TreeSelect from "@/components/TreeSelect";
// 字典标签组件
-import DictTag from '@/components/DictTag'
+import DictTag from "@/components/DictTag";
// Vue3表单组件
-import VForm3 from '@/components/vform/designer.umd.js'
-import '@/components/vform/designer.style.css'
+import VForm3 from "@/components/vform/designer.umd.js";
+import "@/components/vform/designer.style.css";
// 引入百度地图
-import BaiduMap from 'vue-baidu-map-3x'
+import BaiduMap from "vue-baidu-map-3x";
-const app = createApp(App)
-app.config.warnHandler = () => null
+const app = createApp(App);
+app.config.warnHandler = () => null;
// 全局方法挂载
-app.config.globalProperties.useDict = useDict
-app.config.globalProperties.download = download
-app.config.globalProperties.newDownload = newDownload
-app.config.globalProperties.parseTime = parseTime
-app.config.globalProperties.resetForm = resetForm
-app.config.globalProperties.handleTree = handleTree
-app.config.globalProperties.addDateRange = addDateRange
-app.config.globalProperties.selectDictLabel = selectDictLabel
-app.config.globalProperties.selectDictLabels = selectDictLabels
+app.config.globalProperties.useDict = useDict;
+app.config.globalProperties.download = download;
+app.config.globalProperties.newDownload = newDownload;
+app.config.globalProperties.parseTime = parseTime;
+app.config.globalProperties.resetForm = resetForm;
+app.config.globalProperties.handleTree = handleTree;
+app.config.globalProperties.addDateRange = addDateRange;
+app.config.globalProperties.selectDictLabel = selectDictLabel;
+app.config.globalProperties.selectDictLabels = selectDictLabels;
// 全局组件挂载
-app.component('DictTag', DictTag)
-app.component('Pagination', Pagination)
-app.component('TreeSelect', TreeSelect)
-app.component('FileUpload', FileUpload)
-app.component('ImageUpload', ImageUpload)
-app.component('ImagePreview', ImagePreview)
-app.component('RightToolbar', RightToolbar)
-
-app.use(router)
-app.use(store)
-app.use(plugins)
-app.use(elementIcons)
+app.component("DictTag", DictTag);
+app.component("Pagination", Pagination);
+app.component("TreeSelect", TreeSelect);
+app.component("FileUpload", FileUpload);
+app.component("ImageUpload", ImageUpload);
+app.component("ImagePreview", ImagePreview);
+app.component("RightToolbar", RightToolbar);
+
+app.use(router);
+app.use(store);
+app.use(plugins);
+app.use(elementIcons);
// 全局注册VForm3,同时注册了v-form-designer、v-form-render等组件
-app.use(VForm3)
-app.component('svg-icon', SvgIcon)
-app.use(DataVVue3)
+app.use(VForm3);
+app.component("svg-icon", SvgIcon);
+app.use(DataVVue3);
app.use(BaiduMap, {
// ak 是在百度地图开发者平台申请的密钥 详见 http://lbsyun.baidu.com/apiconsole/key */
- ak: 'RLTSC51O7n2UPbwGbXKu2hZK',
+ ak: "RLTSC51O7n2UPbwGbXKu2hZK",
// v:'2.0', // 默认使用3.0
// type: 'WebGL' // ||API 默认API (使用此模式 BMap=BMapGL)
-})
+});
-directive(app)
+directive(app);
// 使用element-plus 并且设置全局的大小
app.use(ElementPlus, {
locale: locale,
// 支持 large、default、small
- size: Cookies.get('size') || 'default'
-})
-
+ size: Cookies.get("size") || "default",
+});
app.use(useTable);
-app.mount('#app')
+app.mount("#app");
diff --git a/src/router/index.js b/src/router/index.js
index f6da8b3..26a57db 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -1,6 +1,6 @@
-import { createWebHistory, createRouter } from 'vue-router'
+import { createWebHistory, createRouter } from "vue-router";
/* Layout */
-import Layout from '@/layout'
+import Layout from "@/layout";
/**
* Note: 路由配置项
@@ -27,230 +27,235 @@ import Layout from '@/layout'
// 公共路由
export const constantRoutes = [
{
- path: '/redirect',
+ path: "/redirect",
component: Layout,
hidden: true,
children: [
{
- path: '/redirect/:path(.*)',
- component: () => import('@/views/redirect/index.vue')
- }
- ]
+ path: "/redirect/:path(.*)",
+ component: () => import("@/views/redirect/index.vue"),
+ },
+ ],
},
{
- path: '/login',
- component: () => import('@/views/login'),
- hidden: true
+ path: "/login",
+ component: () => import("@/views/login"),
+ hidden: true,
},
{
- path: '/register',
- component: () => import('@/views/register'),
- hidden: true
+ path: "/register",
+ component: () => import("@/views/register"),
+ hidden: true,
+ },
+ {
+ path: "/monitoring/station",
+ component: () => import("@/views/monitoring/station/index"),
+ hidden: true,
},
{
- path: '/index1',
- component: () => import('@/views/index1'),
- hidden: true
+ path: "/index1",
+ component: () => import("@/views/index1"),
+ hidden: true,
},
{
path: "/:pathMatch(.*)*",
- component: () => import('@/views/error/404'),
- hidden: true
+ component: () => import("@/views/error/404"),
+ hidden: true,
},
{
- path: '/401',
- component: () => import('@/views/error/401'),
- hidden: true
+ path: "/401",
+ component: () => import("@/views/error/401"),
+ hidden: true,
},
{
- path: '',
+ path: "",
component: Layout,
- redirect: '/index',
+ redirect: "/index",
children: [
{
- path: '/index',
- component: () => import('@/views/index'),
- name: 'Index',
- meta: { title: '首页', icon: 'dashboard', affix: true }
- }
- ]
+ path: "/index",
+ component: () => import("@/views/index"),
+ name: "Index",
+ meta: { title: "首页", icon: "dashboard", affix: true },
+ },
+ ],
},
{
- path: '/user',
+ path: "/user",
component: Layout,
hidden: true,
- redirect: 'noredirect',
+ redirect: "noredirect",
children: [
{
- path: 'profile',
- component: () => import('@/views/system/user/profile/index'),
- name: 'Profile',
- meta: { title: '个人中心', icon: 'user' }
- }
- ]
+ path: "profile",
+ component: () => import("@/views/system/user/profile/index"),
+ name: "Profile",
+ meta: { title: "个人中心", icon: "user" },
+ },
+ ],
},
{
- path: '/flowable',
+ path: "/flowable",
component: Layout,
hidden: true,
children: [
{
- path: 'definition/model',
- component: () => import('@/views/flowable/definition/model'),
- name: 'FlowModel',
- meta: { title: '流程设计', icon: '' }
- }
- ]
+ path: "definition/model",
+ component: () => import("@/views/flowable/definition/model"),
+ name: "FlowModel",
+ meta: { title: "流程设计", icon: "" },
+ },
+ ],
},
{
- path: '/flowable',
+ path: "/flowable",
component: Layout,
hidden: true,
children: [
{
- path: 'task/finished/detail/index',
- component: () => import('@/views/flowable/task/finished/detail/index'),
- name: 'FinishedDetail',
- meta: { title: '已办任务', icon: '' }
- }
- ]
+ path: "task/finished/detail/index",
+ component: () => import("@/views/flowable/task/finished/detail/index"),
+ name: "FinishedDetail",
+ meta: { title: "已办任务", icon: "" },
+ },
+ ],
},
{
- path: '/flowable',
+ path: "/flowable",
component: Layout,
hidden: true,
children: [
{
- path: 'task/myProcess/detail/index',
- component: () => import('@/views/flowable/task/myProcess/detail/index'),
- name: 'ProcessDetail',
- meta: { title: '已发任务', icon: '' }
- }
- ]
+ path: "task/myProcess/detail/index",
+ component: () => import("@/views/flowable/task/myProcess/detail/index"),
+ name: "ProcessDetail",
+ meta: { title: "已发任务", icon: "" },
+ },
+ ],
},
{
- path: '/flowable',
+ path: "/flowable",
component: Layout,
hidden: true,
children: [
{
- path: 'task/myProcess/send/index',
- component: () => import('@/views/flowable/task/myProcess/send/index'),
- name: 'ProcessSend',
- meta: { title: '流程发起', icon: '' }
- }
- ]
+ path: "task/myProcess/send/index",
+ component: () => import("@/views/flowable/task/myProcess/send/index"),
+ name: "ProcessSend",
+ meta: { title: "流程发起", icon: "" },
+ },
+ ],
},
{
- path: '/flowable',
+ path: "/flowable",
component: Layout,
hidden: true,
children: [
{
- path: 'task/todo/detail/index',
- component: () => import('@/views/flowable/task/todo/detail/index'),
- name: 'TodoDetail',
- meta: { title: '流程处理', icon: '' }
- }
- ]
+ path: "task/todo/detail/index",
+ component: () => import("@/views/flowable/task/todo/detail/index"),
+ name: "TodoDetail",
+ meta: { title: "流程处理", icon: "" },
+ },
+ ],
},
{
- path: '/flowable',
+ path: "/flowable",
component: Layout,
hidden: true,
children: [
{
- path: 'task/flowForm/index',
- component: () => import('@/views/flowable/task/flowForm/index'),
- name: 'FlowForm',
- meta: { title: '流程表单', icon: '' }
- }
- ]
+ path: "task/flowForm/index",
+ component: () => import("@/views/flowable/task/flowForm/index"),
+ name: "FlowForm",
+ meta: { title: "流程表单", icon: "" },
+ },
+ ],
},
-]
+];
// 动态路由,基于用户权限动态去加载
export const dynamicRoutes = [
{
- path: '/system/user-auth',
+ path: "/system/user-auth",
component: Layout,
hidden: true,
- permissions: ['system:user:edit'],
+ permissions: ["system:user:edit"],
children: [
{
- path: 'role/:userId(\\d+)',
- component: () => import('@/views/system/user/authRole'),
- name: 'AuthRole',
- meta: { title: '分配角色', activeMenu: '/system/user' }
- }
- ]
+ path: "role/:userId(\\d+)",
+ component: () => import("@/views/system/user/authRole"),
+ name: "AuthRole",
+ meta: { title: "分配角色", activeMenu: "/system/user" },
+ },
+ ],
},
{
- path: '/system/role-auth',
+ path: "/system/role-auth",
component: Layout,
hidden: true,
- permissions: ['system:role:edit'],
+ permissions: ["system:role:edit"],
children: [
{
- path: 'user/:roleId(\\d+)',
- component: () => import('@/views/system/role/authUser'),
- name: 'AuthUser',
- meta: { title: '分配用户', activeMenu: '/system/role' }
- }
- ]
+ path: "user/:roleId(\\d+)",
+ component: () => import("@/views/system/role/authUser"),
+ name: "AuthUser",
+ meta: { title: "分配用户", activeMenu: "/system/role" },
+ },
+ ],
},
{
- path: '/system/dict-data',
+ path: "/system/dict-data",
component: Layout,
hidden: true,
- permissions: ['system:dict:list'],
+ permissions: ["system:dict:list"],
children: [
{
- path: 'index/:dictId(\\d+)',
- component: () => import('@/views/system/dict/data'),
- name: 'Data',
- meta: { title: '字典数据', activeMenu: '/system/dict' }
- }
- ]
+ path: "index/:dictId(\\d+)",
+ component: () => import("@/views/system/dict/data"),
+ name: "Data",
+ meta: { title: "字典数据", activeMenu: "/system/dict" },
+ },
+ ],
},
{
- path: '/monitor/job-log',
+ path: "/monitor/job-log",
component: Layout,
hidden: true,
- permissions: ['monitor:job:list'],
+ permissions: ["monitor:job:list"],
children: [
{
- path: 'index/:jobId(\\d+)',
- component: () => import('@/views/monitor/job/log'),
- name: 'JobLog',
- meta: { title: '调度日志', activeMenu: '/monitor/job' }
- }
- ]
+ path: "index/:jobId(\\d+)",
+ component: () => import("@/views/monitor/job/log"),
+ name: "JobLog",
+ meta: { title: "调度日志", activeMenu: "/monitor/job" },
+ },
+ ],
},
{
- path: '/tool/gen-edit',
+ path: "/tool/gen-edit",
component: Layout,
hidden: true,
- permissions: ['tool:gen:edit'],
+ permissions: ["tool:gen:edit"],
children: [
{
- path: 'index/:tableId(\\d+)',
- component: () => import('@/views/tool/gen/editTable'),
- name: 'GenEdit',
- meta: { title: '修改生成配置', activeMenu: '/tool/gen' }
- }
- ]
- }
-]
+ path: "index/:tableId(\\d+)",
+ component: () => import("@/views/tool/gen/editTable"),
+ name: "GenEdit",
+ meta: { title: "修改生成配置", activeMenu: "/tool/gen" },
+ },
+ ],
+ },
+];
const router = createRouter({
history: createWebHistory(),
routes: constantRoutes,
scrollBehavior(to, from, savedPosition) {
if (savedPosition) {
- return savedPosition
+ return savedPosition;
} else {
- return { top: 0 }
+ return { top: 0 };
}
},
});
diff --git a/src/store/modules/date.js b/src/store/modules/date.js
new file mode 100644
index 0000000..aeb8cdc
--- /dev/null
+++ b/src/store/modules/date.js
@@ -0,0 +1,38 @@
+const useCounter = defineStore("date", {
+ /**
+ * 存储全局状态
+ */
+ state: () => ({
+ deptIdStr: "",
+ dateStr: "",
+ noticeStr: {},
+ orgStr: {
+ title: "",
+ assetCode: "",
+ },
+ }),
+
+ /**
+ * 用来封装计算属性 有缓存功能 类似于computed
+ */
+ getters: {},
+
+ /**
+ * 编辑业务逻辑 类似于methods
+ */
+ actions: {
+ deptStore(val) {
+ this.deptIdStr = val;
+ },
+ dateStore(val) {
+ this.dateStr = val;
+ },
+ noticeStore(val) {
+ this.noticeStr = val;
+ },
+ orgStore(val) {
+ this.orgStr = val;
+ },
+ },
+});
+export default useCounter;
diff --git a/src/store/modules/table.js b/src/store/modules/table.js
new file mode 100644
index 0000000..cc43f44
--- /dev/null
+++ b/src/store/modules/table.js
@@ -0,0 +1,31 @@
+const useTableStore = defineStore("table", {
+ /**
+ * 存储全局状态
+ */
+ state: () => ({
+ tableMenuStory: [],
+ tableDataStore: [],
+ tableNewDataStore: [],
+ }),
+
+ /**
+ * 用来封装计算属性 有缓存功能 类似于computed
+ */
+ getters: {},
+
+ /**
+ * 编辑业务逻辑 类似于methods
+ */
+ actions: {
+ tableMenuAction(val) {
+ this.tableMenuStory = val;
+ },
+ tableDataAction(val) {
+ this.tableDataStore = val;
+ },
+ tableNewDataAction(val) {
+ this.tableNewDataStore = val;
+ },
+ },
+});
+export default useTableStore;
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index 6d8c05f..c9719bb 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -1,70 +1,78 @@
-import { login, logout, getInfo } from '@/api/login'
-import { getToken, setToken, removeToken } from '@/utils/auth'
-import defAva from '@/assets/images/profile.jpg'
+import { login, logout, getInfo } from "@/api/login";
+import { getToken, setToken, removeToken } from "@/utils/auth";
+import defAva from "@/assets/images/avatar.png";
-const useUserStore = defineStore(
- 'user',
- {
- state: () => ({
- token: getToken(),
- name: '',
- avatar: '',
- roles: [],
- permissions: []
- }),
- actions: {
- // 登录
- login(userInfo) {
- const username = userInfo.username.trim()
- const password = userInfo.password
- const code = userInfo.code
- const uuid = userInfo.uuid
- return new Promise((resolve, reject) => {
- login(username, password, code, uuid).then(res => {
- setToken(res.token)
- this.token = res.token
- resolve()
- }).catch(error => {
- reject(error)
+const useUserStore = defineStore("user", {
+ state: () => ({
+ token: getToken(),
+ name: "",
+ avatar: "",
+ roles: [],
+ permissions: [],
+ }),
+ actions: {
+ // 登录
+ login(userInfo) {
+ const username = userInfo.username.trim();
+ const password = userInfo.password;
+ const code = userInfo.code;
+ const uuid = userInfo.uuid;
+ return new Promise((resolve, reject) => {
+ login(username, password, code, uuid)
+ .then((res) => {
+ setToken(res.token);
+ this.token = res.token;
+ resolve();
})
- })
- },
- // 获取用户信息
- getInfo() {
- return new Promise((resolve, reject) => {
- getInfo().then(res => {
- const user = res.user
- const avatar = (user.avatar == "" || user.avatar == null) ? defAva : import.meta.env.VITE_APP_BASE_API + user.avatar;
+ .catch((error) => {
+ reject(error);
+ });
+ });
+ },
+ // 获取用户信息
+ getInfo() {
+ return new Promise((resolve, reject) => {
+ getInfo()
+ .then((res) => {
+ const user = res.user;
+ const avatar =
+ user.avatar == "" || user.avatar == null
+ ? defAva
+ : import.meta.env.VITE_APP_BASE_API + user.avatar;
- if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组
- this.roles = res.roles
- this.permissions = res.permissions
+ if (res.roles && res.roles.length > 0) {
+ // 验证返回的roles是否是一个非空数组
+ this.roles = res.roles;
+ this.permissions = res.permissions;
} else {
- this.roles = ['ROLE_DEFAULT']
+ this.roles = ["ROLE_DEFAULT"];
}
- this.name = user.userName
+ this.name = user.userName;
this.avatar = avatar;
- resolve(res)
- }).catch(error => {
- reject(error)
+ resolve(res);
})
- })
- },
- // 退出系统
- logOut() {
- return new Promise((resolve, reject) => {
- logout(this.token).then(() => {
- this.token = ''
- this.roles = []
- this.permissions = []
- removeToken()
- resolve()
- }).catch(error => {
- reject(error)
+ .catch((error) => {
+ reject(error);
+ });
+ });
+ },
+ // 退出系统
+ logOut() {
+ return new Promise((resolve, reject) => {
+ logout(this.token)
+ .then(() => {
+ this.token = "";
+ this.roles = [];
+ this.permissions = [];
+ removeToken();
+ resolve();
})
- })
- }
- }
- })
+ .catch((error) => {
+ reject(error);
+ });
+ });
+ },
+ },
+});
-export default useUserStore
+export default useUserStore;
diff --git a/src/styles/dark.scss b/src/styles/dark.scss
new file mode 100644
index 0000000..d198335
--- /dev/null
+++ b/src/styles/dark.scss
@@ -0,0 +1,26 @@
+html.dark{
+ --menuBg:var(--el-bg-color-overlay);
+ --menuText:#fff;
+ --menuActiveText:var(--el-menu-active-color);
+ --menuActiveBg:var(--el-bg-color-overlay);
+ --menuHover:rgba(0,0,0,.2);
+
+ --subMenuBg: var(--el-menu-bg-color);
+ --subMenuActiveText:var(--el-menu-active-color);
+ --subMenuHover: rgba(0,0,0,.2);
+
+ --tableBg:#1d1e1f;
+
+
+ .navbar {
+ background-color: var(--el-bg-color);
+ color: var(--el-text-color-regular);
+ }
+
+ .right-panel-btn{
+ background-color: var(--el-color-primary-dark);
+ }
+ .svg-icon,svg{
+ fill: var(--el-text-color-regular);
+ }
+}
diff --git a/src/styles/index.scss b/src/styles/index.scss
new file mode 100644
index 0000000..354571c
--- /dev/null
+++ b/src/styles/index.scss
@@ -0,0 +1,228 @@
+@import "./style.scss";
+
+.app-container {
+ padding: 20px;
+
+ .search {
+ padding: 18px 0 0 10px;
+ margin-bottom: 10px;
+ border-radius: 4px;
+ border: 1px solid var(--el-border-color-light);
+ box-shadow: var(--el-box-shadow-light);
+ background-color: var(--el-bg-color-overlay);
+ }
+}
+
+.n-drawer-container {
+ .waringDrawer {
+ // color: #fff;
+ // background: #0f2856;
+ // backdrop-filter: blur(10px);
+ overflow: hidden;
+
+ .n-drawer-header {
+ // color: #fff;
+ // border-bottom: 1px solid #1a3960;
+
+ .n-drawer-header__main {
+ flex: 1;
+
+ .title {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ cursor: pointer;
+
+ .button {
+ font-size: 14px;
+ // color: #b1e3ff;
+ padding-right: 20px;
+ }
+ }
+ }
+
+ .n-base-close {
+ color: #fff;
+ }
+ }
+
+ .waringList {
+ padding: 10px;
+ // background: #08173e;
+
+ .item {
+ padding-bottom: 10px;
+ // border-bottom: 1px solid #1a3960;
+ margin-bottom: 10px;
+
+ .name {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 10px;
+ .title {
+ display: flex;
+ align-items: center;
+ .svg-icon {
+ width: 16px !important;
+ height: 16px !important;
+ margin-right: 5px;
+ }
+ }
+
+ span {
+ font-size: 16px;
+ }
+
+ span.time {
+ font-size: 14px;
+ // color: #b1e3ff;
+ }
+ }
+
+ .info {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+
+ // span {
+ // color: #b1e3ff;
+ // }
+
+ // .n-button {
+ // background-color: #022a5a !important;
+ // border: 1px solid #114073;
+ // }
+ }
+ }
+
+ .item:last-child {
+ border-bottom: none;
+ margin-bottom: 0;
+ }
+ }
+ }
+}
+
+.n-modal-container {
+ .waringModal {
+ width: 70%;
+ height: 500px;
+ background: url(@/assets/images/waring_bg.png) no-repeat;
+ background-size: 100% 100%;
+
+ .n-card__content {
+ position: relative;
+ padding-top: 0;
+ padding: 80px;
+
+ .waringTable {
+ --el-table-border-color: none;
+ background-color: transparent;
+ border: 1px solid #053872;
+
+ .el-table__inner-wrapper::before {
+ content: none;
+ }
+
+ .headerRowClass {
+ .headerCellClass {
+ color: #fff;
+ background-color: #001d40;
+ border-bottom: none;
+ }
+ }
+
+ .rowClass {
+ background-color: transparent;
+
+ .cellClass {
+ color: #b1e3ff;
+ border-bottom: none;
+ background-color: #01153a;
+
+ .confirm {
+ background-color: #022a5a !important;
+ border: 1px solid #114073;
+ margin-left: 10px;
+ }
+ }
+ }
+
+ .rowClass.el-table__row--striped {
+ .cellClass {
+ background-color: #001d40;
+ }
+ }
+ }
+
+ .warClose {
+ width: 50px;
+ cursor: pointer;
+ color: #b1e3ff;
+ margin: 100px auto 0 auto;
+ }
+ }
+ }
+}
+
+.n-modal-container {
+ .modalClass {
+ .n-card-header {
+ padding: 1.5rem;
+ }
+ .n-card__content {
+ padding: 0 1.5rem;
+ }
+ .n-card__footer {
+ text-align: right;
+ padding: 1.5rem;
+ button {
+ margin-left: 2rem;
+ }
+ }
+ }
+}
+
+.el-overlay {
+ z-index: 99999 !important;
+}
+
+.el-notification {
+ border: none !important;
+ background-color: #0f2856 !important;
+ .el-notification__content {
+ color: #eee !important;
+ }
+}
+.el-notification.notice {
+ border: none !important;
+ background-color: #fff !important;
+ .el-notification__content {
+ color: #000 !important;
+ }
+}
+
+.menuPopover {
+ border-radius: 10px !important;
+ background: rgba(255, 255, 255, 0) !important;
+ backdrop-filter: blur(10px) !important;
+ border: 2px solid rgba(255, 255, 255, 0.1) !important;
+ box-shadow: 0 0 80px rgba(0, 0, 0, 0.25) !important;
+ --el-bg-color-overlay: transparent !important;
+ --el-border-color-light: #535352 !important;
+ .menuList {
+ .el-tree {
+ background: transparent !important;
+ --el-tree-node-hover-bg-color: transparent !important;
+ --el-color-primary-light-9: transparent !important;
+ --el-tree-text-color: #fff;
+ --el-tree-expand-icon-color: #fff;
+ }
+ .el-tree--highlight-current
+ .el-tree-node.is-current
+ > .el-tree-node__content {
+ color: #b7cffc;
+ }
+ }
+}
diff --git a/src/styles/reset.scss b/src/styles/reset.scss
new file mode 100644
index 0000000..cd586c3
--- /dev/null
+++ b/src/styles/reset.scss
@@ -0,0 +1,81 @@
+*,
+::before,
+::after {
+ box-sizing: border-box;
+ border-width: 0;
+ border-style: solid;
+ border-color: currentColor;
+}
+
+#app {
+ width: 100%;
+ height: 100%;
+}
+
+html {
+ line-height: 1.5;
+ -webkit-text-size-adjust: 100%;
+ -moz-tab-size: 4;
+ tab-size: 4;
+ width: 100%;
+ height: 100%;
+ box-sizing: border-box;
+}
+
+body {
+ margin: 0;
+ line-height: inherit;
+ width: 100%;
+ height: 100%;
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-font-smoothing: antialiased;
+ text-rendering: optimizelegibility;
+ font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB",
+ "Microsoft YaHei", "微软雅黑", Arial, sans-serif;
+}
+
+
+a {
+ color: inherit;
+ text-decoration: inherit;
+}
+
+
+img,
+svg
+ {
+ display: inline-block;
+}
+svg {
+ vertical-align: -0.15em; //因icon大小被设置为和字体大小一致,而span等标签的下边缘会和字体的基线对齐,故需设置一个往下的偏移比例,来纠正视觉上的未对齐效果
+}
+
+
+ul,li{
+ margin: 0;
+ padding: 0;
+ list-style: none;
+}
+
+
+*,
+*::before,
+*::after {
+ box-sizing: inherit;
+}
+
+a:focus,
+a:active ,
+div:focus
+{
+ outline: none;
+}
+
+a,
+a:focus,
+a:hover {
+ cursor: pointer;
+ color: inherit;
+ text-decoration: none;
+}
+
diff --git a/src/styles/sidebar.scss b/src/styles/sidebar.scss
new file mode 100644
index 0000000..ff01684
--- /dev/null
+++ b/src/styles/sidebar.scss
@@ -0,0 +1,227 @@
+#app {
+ .mainContainer {
+ min-height: 100%;
+ transition: margin-left 0.28s;
+ margin-left: $sideBarWidth;
+ position: relative;
+ }
+
+ .sidebarContainer {
+ transition: width 0.28s;
+ width: $sideBarWidth !important;
+ background-color: $menuBg;
+ box-shadow: 2px 0 8px #1d23290d;
+ height: 100%;
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1001;
+ overflow: hidden;
+
+ // reset element-ui css
+ .horizontal-collapse-transition {
+ transition: 0s width ease-in-out, 0s padding-left ease-in-out,
+ 0s padding-right ease-in-out;
+ }
+
+ .scrollbar-wrapper {
+ overflow-x: hidden !important;
+ }
+
+ .el-scrollbar__bar.is-vertical {
+ right: 0px;
+ }
+
+ .el-scrollbar {
+ height: 100%;
+ }
+
+ &.sidebarLogo {
+ .el-scrollbar {
+ height: calc(100% - 50px);
+ }
+ }
+
+ .is-horizontal {
+ display: none;
+ }
+
+
+ .svg-icon {
+ display: inline-flex;
+ margin-right: 16px;
+ }
+
+ .sub-el-icon {
+ margin-right: 12px;
+ margin-left: -2px;
+ }
+
+ .el-menu {
+ border: none;
+ height: 100%;
+ width: 100% !important;
+
+ .menuItem {
+ .el-menu-item,.el-sub-menu__title {
+ display: grid;
+ grid-template-columns: auto 1fr auto;
+ align-items: center;
+
+ span {
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ }
+ }
+ }
+ }
+
+ // menu hover
+ .el-sub-menu__title {
+ &:hover {
+ background-color: $menuHover !important;
+ }
+ }
+
+ .is-active>.el-sub-menu__title {
+ color: $subMenuActiveText !important;
+ }
+
+ & .nest-menu .el-sub-menu>.el-sub-menu__title,
+ & .el-sub-menu .el-menu-item {
+ min-width: $sideBarWidth !important;
+ // background-color: $subMenuBg !important;
+
+ &:hover {
+ background-color: $subMenuHover !important;
+ }
+ }
+
+ .el-menu-item.is-active,.el-sub-menu .el-menu-item.is-active {
+ background-color: $menuActiveBg !important;
+ }
+ }
+
+ .hideSidebar {
+ .sidebarContainer {
+ width: 54px !important;
+
+ .svg-icon {
+ margin-right: 0px;
+ }
+ }
+
+ .mainContainer {
+ margin-left: 54px;
+ }
+
+ .el-sub-menu {
+ overflow: hidden;
+
+ &>.el-sub-menu__title {
+ padding: 0 !important;
+
+ .svg-icon {
+ margin-left: 20px;
+ }
+
+ .sub-el-icon {
+ margin-left: 19px;
+ }
+
+ .el-sub-menu__icon-arrow {
+ display: none;
+ }
+ }
+ }
+
+ .el-menu--collapse {
+ .el-sub-menu {
+ &>.el-sub-menu__title {
+ &>span {
+ height: 0;
+ width: 0;
+ overflow: hidden;
+ visibility: hidden;
+ display: inline-block;
+ }
+ }
+ }
+ }
+ }
+
+ .el-menu--collapse .el-menu .el-sub-menu {
+ min-width: $sideBarWidth !important;
+ }
+
+ // mobile responsive
+ .mobile {
+ .mainContainer {
+ margin-left: 0px;
+ }
+
+ .sidebarContainer {
+ transition: transform 0.28s;
+ width: $sideBarWidth !important;
+ }
+
+ &.hideSidebar {
+ .sidebarContainer {
+ pointer-events: none;
+ transition-duration: 0.3s;
+ transform: translate3d(-$sideBarWidth, 0, 0);
+ }
+ }
+ }
+
+ .withoutAnimation {
+
+ .mainContainer,
+ .sidebarContainer {
+ // transition: none;
+ }
+ }
+}
+
+// when menu collapsed
+.el-menu--vertical {
+ &>.el-menu {
+ .svg-icon {
+ margin-right: 16px;
+ }
+
+ .sub-el-icon {
+ margin-right: 12px;
+ margin-left: -2px;
+ }
+ }
+
+ .nest-menu .el-sub-menu>.el-sub-menu__title,
+ .el-menu-item {
+ &:hover {
+ // you can use $subMenuHover
+ background-color: $menuHover !important;
+ }
+ }
+
+ // the scroll bar appears when the subMenu is too long
+ >.el-menu--popup {
+ max-height: 100vh;
+ overflow-y: auto;
+
+ &::-webkit-scrollbar-track-piece {
+ background: #d3dce6;
+ }
+
+ &::-webkit-scrollbar {
+ width: 6px;
+ }
+
+ &::-webkit-scrollbar-thumb {
+ background: #99a9bf;
+ border-radius: 20px;
+ }
+ }
+}
diff --git a/src/styles/style.scss b/src/styles/style.scss
new file mode 100644
index 0000000..8155852
--- /dev/null
+++ b/src/styles/style.scss
@@ -0,0 +1,31 @@
+.flex {
+ display: flex;
+}
+.justify-center {
+ justify-content: center;
+}
+.justify-between {
+ justify-content: space-between;
+}
+.items-center {
+ align-items: center;
+}
+.items-end{
+ align-items: flex-end;
+}
+.column {
+ flex-direction: column;
+}
+.flex-1 {
+ flex: 1 1 0%;
+}
+
+.text-center {
+ text-align: center;
+}
+.width-100 {
+ width: 100%;
+}
+.height-100 {
+ height: 100%;
+}
diff --git a/src/styles/variables.module.scss b/src/styles/variables.module.scss
new file mode 100644
index 0000000..2aae6fd
--- /dev/null
+++ b/src/styles/variables.module.scss
@@ -0,0 +1,7 @@
+// 导出 variables.module.scss 变量提供给TypeScript使用
+:export {
+ menuBg: $menuBg;
+ menuText: $menuText;
+ menuActiveText: $menuActiveText;
+ menuActiveBg: $menuActiveBg
+}
\ No newline at end of file
diff --git a/src/styles/variables.scss b/src/styles/variables.scss
new file mode 100644
index 0000000..1f59629
--- /dev/null
+++ b/src/styles/variables.scss
@@ -0,0 +1,38 @@
+// 全局SCSS变量
+
+:root{
+ --menuBg:#ffffff;
+ --menuText:#333639;
+ --menuActiveText:#409eff;
+ --menuActiveBg:#eff0ff;
+ --menuHover:#d9d9d9;
+
+ --subMenuBg: #ffffff;
+ --subMenuActiveText: #409eff;
+ --subMenuHover: #d9d9d9;
+
+ --menuDarkBg:#304156;
+ --menuDarkText:#bfcbd9;
+ --menuDarkActiveText:#409eff;
+ --menuDarkActiveBg:rgba(0, 0, 0, 0.12);
+ --menuDarkHover:#263445;
+
+ --subMenuDarkBg: #1f2d3d;
+ --subMenuDarkActiveText: #f4f4f5;
+ --subMenuDarkHover: #001528;
+
+ --tableBg:#020B3E;
+}
+
+
+$menuBg: var(--menuBg);
+$menuText: var(--menuText);
+$menuActiveText: var(--menuActiveText);
+$menuActiveBg: var(--menuActiveBg);
+$menuHover: var(--menuHover);
+
+$subMenuBg:var(--subMenuBg);
+$subMenuActiveText:var(--subMenuActiveText);
+$subMenuHover:var(--subMenuHover);
+
+$sideBarWidth: 210px;
diff --git a/src/styles/variablesDark.scss b/src/styles/variablesDark.scss
new file mode 100644
index 0000000..b1f2d9d
--- /dev/null
+++ b/src/styles/variablesDark.scss
@@ -0,0 +1,28 @@
+// 侧边栏深色主题变量
+
+.layoutContainer {
+ .sidebarDark {
+ --menuBg: var(--menuDarkBg);
+ --menuText: var(--menuDarkText);
+ --menuActiveText: var(--menuDarkActiveText);
+ --menuActiveBg: var(--menuDarkActiveBg);
+ --menuHover: var(--menuDarkHover);
+
+ --subMenuBg: var(--subMenuDarkBg);
+ --subMenuActiveText: var(--subMenuDarkActiveText);
+ --subMenuHover: var(--subMenuDarkHover);
+ }
+}
+.dark {
+ .sidebarDark {
+ --menuBg: var(--el-bg-color-overlay);
+ --menuText: #fff;
+ --menuActiveText: var(--el-menu-active-color);
+ --menuActiveBg: var(--el-bg-color-overlay);
+ --menuHover: rgba(0, 0, 0, 0.2);
+
+ --subMenuBg: var(--el-menu-bg-color);
+ --subMenuActiveText: var(--el-menu-active-color);
+ --subMenuHover: rgba(0, 0, 0, 0.2);
+ }
+}
diff --git a/src/utils/countTo.ts b/src/utils/countTo.ts
new file mode 100644
index 0000000..f0a07f4
--- /dev/null
+++ b/src/utils/countTo.ts
@@ -0,0 +1,192 @@
+import { defineComponent, reactive, computed, onMounted, watch, onUnmounted } from 'vue';
+const props = {
+ start: {
+ type: Number,
+ required: false,
+ default: 0
+ },
+ end: {
+ type: Number,
+ required: false,
+ default: 0
+ },
+ duration: {
+ type: Number,
+ required: false,
+ default: 5000
+ },
+ autoPlay: {
+ type: Boolean,
+ required: false,
+ default: true
+ },
+ decimals: {
+ type: Number,
+ required: false,
+ default: 0,
+ validator(value: any) {
+ return value >= 0;
+ }
+ },
+ decimal: {
+ //十进制
+ type: String,
+ required: false,
+ default: '.'
+ },
+ separator: {
+ //分割器
+ type: String,
+ required: false,
+ default: ','
+ },
+ prefix: {
+ //前缀
+ type: String,
+ required: false,
+ default: ''
+ },
+ suffix: {
+ //后缀
+ type: String,
+ required: false,
+ default: ''
+ },
+ useEasing: {
+ //使用缓和
+ type: Boolean,
+ required: false,
+ default: true
+ },
+ easingFn: {
+ type: Function,
+ default(t: any, b: any, c: any, d: any) {
+ return (c * (-Math.pow(2, (-10 * t) / d) + 1) * 1024) / 1023 + b;
+ }
+ }
+};
+export default defineComponent({
+ name: 'CountTo',
+ props: props,
+ emits: ['onMountedcallback', 'callback'],
+ setup(props, { emit }) {
+ const isNumber = (val: any) => {
+ return !isNaN(parseFloat(val));
+ };
+ // 格式化数据,返回想要展示的数据格式
+ const formatNumber = (val: any) => {
+ val = val.toFixed(props.decimals);
+ val += '';
+ const x = val.split('.');
+ let x1 = x[0];
+ const x2 = x.length > 1 ? props.decimal + x[1] : '';
+ const rgx = /(\d+)(\d{3})/;
+ if (props.separator && !isNumber(props.separator)) {
+ while (rgx.test(x1)) {
+ x1 = x1.replace(rgx, '$1' + props.separator + '$2');
+ }
+ }
+ return props.prefix + x1 + x2 + props.suffix;
+ };
+ const state = reactive<{
+ localStart: number;
+ displayValue: number | string;
+ printVal: any;
+ paused: boolean;
+ localDuration: any;
+ startTime: any;
+ timestamp: any;
+ remaining: any;
+ rAF: any;
+ }>({
+ localStart: props.start,
+ displayValue: formatNumber(props.start),
+ printVal: null,
+ paused: false,
+ localDuration: props.duration,
+ startTime: null,
+ timestamp: null,
+ remaining: null,
+ rAF: null
+ });
+ // 定义一个计算属性,当开始数字大于结束数字时返回true
+ const stopCount = computed(() => {
+ return props.start > props.end;
+ });
+ const startCount = () => {
+ state.localStart = props.start;
+ state.startTime = null;
+ state.localDuration = props.duration;
+ state.paused = false;
+ state.rAF = requestAnimationFrame(count);
+ };
+
+ watch(
+ () => props.start,
+ () => {
+ if (props.autoPlay) {
+ startCount();
+ }
+ }
+ );
+
+ watch(
+ () => props.end,
+ () => {
+ if (props.autoPlay) {
+ startCount();
+ }
+ }
+ );
+ // dom挂在完成后执行一些操作
+ onMounted(() => {
+ if (props.autoPlay) {
+ startCount();
+ }
+ emit('onMountedcallback');
+ });
+ const count = (timestamp: any) => {
+ if (!state.startTime) state.startTime = timestamp;
+ state.timestamp = timestamp;
+ const progress = timestamp - state.startTime;
+ state.remaining = state.localDuration - progress;
+ // 是否使用速度变化曲线
+ if (props.useEasing) {
+ if (stopCount.value) {
+ state.printVal =
+ state.localStart - props.easingFn(progress, 0, state.localStart - props.end, state.localDuration);
+ } else {
+ state.printVal = props.easingFn(
+ progress,
+ state.localStart,
+ props.end - state.localStart,
+ state.localDuration
+ );
+ }
+ } else {
+ if (stopCount.value) {
+ state.printVal = state.localStart - (state.localStart - props.end) * (progress / state.localDuration);
+ } else {
+ state.printVal = state.localStart + (props.end - state.localStart) * (progress / state.localDuration);
+ }
+ }
+ if (stopCount.value) {
+ state.printVal = state.printVal < props.end ? props.end : state.printVal;
+ } else {
+ state.printVal = state.printVal > props.end ? props.end : state.printVal;
+ }
+
+ state.displayValue = formatNumber(state.printVal);
+ if (progress < state.localDuration) {
+ state.rAF = requestAnimationFrame(count);
+ } else {
+ emit('callback');
+ }
+ };
+ // 组件销毁时取消动画
+ onUnmounted(() => {
+ cancelAnimationFrame(state.rAF);
+ });
+ return () => state.displayValue;
+ }
+});
diff --git a/src/utils/crypto.js b/src/utils/crypto.js
new file mode 100644
index 0000000..04bd9b3
--- /dev/null
+++ b/src/utils/crypto.js
@@ -0,0 +1,20 @@
+import CryptoJS from 'crypto-js';
+
+const key = CryptoJS.enc.Utf8.parse('1C1389D55E4522B2'); //十六位十六进制数作为密钥
+const iv = CryptoJS.enc.Utf8.parse('1C1389E43F01C1B2'); //十六位十六进制数作为密钥偏移量
+
+//解密方法
+export function decryption(word) {
+ let encryptedHexStr = CryptoJS.enc.Hex.parse(word);
+ let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
+ let decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
+ let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
+ return decryptedStr.toString();
+}
+
+//加密方法
+export function encryption(word) {
+ let srcs = CryptoJS.enc.Utf8.parse(word);
+ let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
+ return encrypted.ciphertext.toString().toUpperCase();
+}
diff --git a/src/utils/index.js b/src/utils/index.js
index 4e65504..544403d 100644
--- a/src/utils/index.js
+++ b/src/utils/index.js
@@ -1,18 +1,25 @@
-import { parseTime } from './ruoyi'
+import { parseTime } from "./ruoyi";
/**
* 表格时间格式化
*/
export function formatDate(cellValue) {
if (cellValue == null || cellValue == "") return "";
- var date = new Date(cellValue)
- var year = date.getFullYear()
- var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
- var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
- var hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours()
- var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
- var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
- return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds
+ var date = new Date(cellValue);
+ var year = date.getFullYear();
+ var month =
+ date.getMonth() + 1 < 10
+ ? "0" + (date.getMonth() + 1)
+ : date.getMonth() + 1;
+ var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
+ var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
+ var minutes =
+ date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
+ var seconds =
+ date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+ return (
+ year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds
+ );
}
/**
@@ -21,40 +28,40 @@ export function formatDate(cellValue) {
* @returns {string}
*/
export function formatTime(time, option) {
- if (('' + time).length === 10) {
- time = parseInt(time) * 1000
+ if (("" + time).length === 10) {
+ time = parseInt(time) * 1000;
} else {
- time = +time
+ time = +time;
}
- const d = new Date(time)
- const now = Date.now()
+ const d = new Date(time);
+ const now = Date.now();
- const diff = (now - d) / 1000
+ const diff = (now - d) / 1000;
if (diff < 30) {
- return '刚刚'
+ return "刚刚";
} else if (diff < 3600) {
// less 1 hour
- return Math.ceil(diff / 60) + '分钟前'
+ return Math.ceil(diff / 60) + "分钟前";
} else if (diff < 3600 * 24) {
- return Math.ceil(diff / 3600) + '小时前'
+ return Math.ceil(diff / 3600) + "小时前";
} else if (diff < 3600 * 24 * 2) {
- return '1天前'
+ return "1天前";
}
if (option) {
- return parseTime(time, option)
+ return parseTime(time, option);
} else {
return (
d.getMonth() +
1 +
- '月' +
+ "月" +
d.getDate() +
- '日' +
+ "日" +
d.getHours() +
- '时' +
+ "时" +
d.getMinutes() +
- '分'
- )
+ "分"
+ );
}
}
@@ -63,18 +70,18 @@ export function formatTime(time, option) {
* @returns {Object}
*/
export function getQueryObject(url) {
- url = url == null ? window.location.href : url
- const search = url.substring(url.lastIndexOf('?') + 1)
- const obj = {}
- const reg = /([^?&=]+)=([^?&=]*)/g
+ url = url == null ? window.location.href : url;
+ const search = url.substring(url.lastIndexOf("?") + 1);
+ const obj = {};
+ const reg = /([^?&=]+)=([^?&=]*)/g;
search.replace(reg, (rs, $1, $2) => {
- const name = decodeURIComponent($1)
- let val = decodeURIComponent($2)
- val = String(val)
- obj[name] = val
- return rs
- })
- return obj
+ const name = decodeURIComponent($1);
+ let val = decodeURIComponent($2);
+ val = String(val);
+ obj[name] = val;
+ return rs;
+ });
+ return obj;
}
/**
@@ -83,14 +90,14 @@ export function getQueryObject(url) {
*/
export function byteLength(str) {
// returns the byte length of an utf8 string
- let s = str.length
+ let s = str.length;
for (var i = str.length - 1; i >= 0; i--) {
- const code = str.charCodeAt(i)
- if (code > 0x7f && code <= 0x7ff) s++
- else if (code > 0x7ff && code <= 0xffff) s += 2
- if (code >= 0xDC00 && code <= 0xDFFF) i--
+ const code = str.charCodeAt(i);
+ if (code > 0x7f && code <= 0x7ff) s++;
+ else if (code > 0x7ff && code <= 0xffff) s += 2;
+ if (code >= 0xdc00 && code <= 0xdfff) i--;
}
- return s
+ return s;
}
/**
@@ -98,13 +105,13 @@ export function byteLength(str) {
* @returns {Array}
*/
export function cleanArray(actual) {
- const newArray = []
+ const newArray = [];
for (let i = 0; i < actual.length; i++) {
if (actual[i]) {
- newArray.push(actual[i])
+ newArray.push(actual[i]);
}
}
- return newArray
+ return newArray;
}
/**
@@ -112,13 +119,13 @@ export function cleanArray(actual) {
* @returns {Array}
*/
export function param(json) {
- if (!json) return ''
+ if (!json) return "";
return cleanArray(
- Object.keys(json).map(key => {
- if (json[key] === undefined) return ''
- return encodeURIComponent(key) + '=' + encodeURIComponent(json[key])
+ Object.keys(json).map((key) => {
+ if (json[key] === undefined) return "";
+ return encodeURIComponent(key) + "=" + encodeURIComponent(json[key]);
})
- ).join('&')
+ ).join("&");
}
/**
@@ -126,21 +133,21 @@ export function param(json) {
* @returns {Object}
*/
export function param2Obj(url) {
- const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ')
+ const search = decodeURIComponent(url.split("?")[1]).replace(/\+/g, " ");
if (!search) {
- return {}
+ return {};
}
- const obj = {}
- const searchArr = search.split('&')
- searchArr.forEach(v => {
- const index = v.indexOf('=')
+ const obj = {};
+ const searchArr = search.split("&");
+ searchArr.forEach((v) => {
+ const index = v.indexOf("=");
if (index !== -1) {
- const name = v.substring(0, index)
- const val = v.substring(index + 1, v.length)
- obj[name] = val
+ const name = v.substring(0, index);
+ const val = v.substring(index + 1, v.length);
+ obj[name] = val;
}
- })
- return obj
+ });
+ return obj;
}
/**
@@ -148,9 +155,9 @@ export function param2Obj(url) {
* @returns {string}
*/
export function html2Text(val) {
- const div = document.createElement('div')
- div.innerHTML = val
- return div.textContent || div.innerText
+ const div = document.createElement("div");
+ div.innerHTML = val;
+ return div.textContent || div.innerText;
}
/**
@@ -160,21 +167,21 @@ export function html2Text(val) {
* @returns {Object}
*/
export function objectMerge(target, source) {
- if (typeof target !== 'object') {
- target = {}
+ if (typeof target !== "object") {
+ target = {};
}
if (Array.isArray(source)) {
- return source.slice()
+ return source.slice();
}
- Object.keys(source).forEach(property => {
- const sourceProperty = source[property]
- if (typeof sourceProperty === 'object') {
- target[property] = objectMerge(target[property], sourceProperty)
+ Object.keys(source).forEach((property) => {
+ const sourceProperty = source[property];
+ if (typeof sourceProperty === "object") {
+ target[property] = objectMerge(target[property], sourceProperty);
} else {
- target[property] = sourceProperty
+ target[property] = sourceProperty;
}
- })
- return target
+ });
+ return target;
}
/**
@@ -183,18 +190,18 @@ export function objectMerge(target, source) {
*/
export function toggleClass(element, className) {
if (!element || !className) {
- return
+ return;
}
- let classString = element.className
- const nameIndex = classString.indexOf(className)
+ let classString = element.className;
+ const nameIndex = classString.indexOf(className);
if (nameIndex === -1) {
- classString += '' + className
+ classString += "" + className;
} else {
classString =
classString.substr(0, nameIndex) +
- classString.substr(nameIndex + className.length)
+ classString.substr(nameIndex + className.length);
}
- element.className = classString
+ element.className = classString;
}
/**
@@ -202,10 +209,10 @@ export function toggleClass(element, className) {
* @returns {Date}
*/
export function getTime(type) {
- if (type === 'start') {
- return new Date().getTime() - 3600 * 1000 * 24 * 90
+ if (type === "start") {
+ return new Date().getTime() - 3600 * 1000 * 24 * 90;
} else {
- return new Date(new Date().toDateString())
+ return new Date(new Date().toDateString());
}
}
@@ -216,38 +223,38 @@ export function getTime(type) {
* @return {*}
*/
export function debounce(func, wait, immediate) {
- let timeout, args, context, timestamp, result
+ let timeout, args, context, timestamp, result;
- const later = function() {
+ const later = function () {
// 据上一次触发时间间隔
- const last = +new Date() - timestamp
+ const last = +new Date() - timestamp;
// 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait
if (last < wait && last > 0) {
- timeout = setTimeout(later, wait - last)
+ timeout = setTimeout(later, wait - last);
} else {
- timeout = null
+ timeout = null;
// 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用
if (!immediate) {
- result = func.apply(context, args)
- if (!timeout) context = args = null
+ result = func.apply(context, args);
+ if (!timeout) context = args = null;
}
}
- }
+ };
- return function(...args) {
- context = this
- timestamp = +new Date()
- const callNow = immediate && !timeout
+ return function (...args) {
+ context = this;
+ timestamp = +new Date();
+ const callNow = immediate && !timeout;
// 如果延时不存在,重新设定延时
- if (!timeout) timeout = setTimeout(later, wait)
+ if (!timeout) timeout = setTimeout(later, wait);
if (callNow) {
- result = func.apply(context, args)
- context = args = null
+ result = func.apply(context, args);
+ context = args = null;
}
- return result
- }
+ return result;
+ };
}
/**
@@ -258,18 +265,18 @@ export function debounce(func, wait, immediate) {
* @returns {Object}
*/
export function deepClone(source) {
- if (!source && typeof source !== 'object') {
- throw new Error('error arguments', 'deepClone')
+ if (!source && typeof source !== "object") {
+ throw new Error("error arguments", "deepClone");
}
- const targetObj = source.constructor === Array ? [] : {}
- Object.keys(source).forEach(keys => {
- if (source[keys] && typeof source[keys] === 'object') {
- targetObj[keys] = deepClone(source[keys])
+ const targetObj = source.constructor === Array ? [] : {};
+ Object.keys(source).forEach((keys) => {
+ if (source[keys] && typeof source[keys] === "object") {
+ targetObj[keys] = deepClone(source[keys]);
} else {
- targetObj[keys] = source[keys]
+ targetObj[keys] = source[keys];
}
- })
- return targetObj
+ });
+ return targetObj;
}
/**
@@ -277,16 +284,16 @@ export function deepClone(source) {
* @returns {Array}
*/
export function uniqueArr(arr) {
- return Array.from(new Set(arr))
+ return Array.from(new Set(arr));
}
/**
* @returns {string}
*/
export function createUniqueString() {
- const timestamp = +new Date() + ''
- const randomNum = parseInt((1 + Math.random()) * 65536) + ''
- return (+(randomNum + timestamp)).toString(32)
+ const timestamp = +new Date() + "";
+ const randomNum = parseInt((1 + Math.random()) * 65536) + "";
+ return (+(randomNum + timestamp)).toString(32);
}
/**
@@ -296,7 +303,7 @@ export function createUniqueString() {
* @returns {boolean}
*/
export function hasClass(ele, cls) {
- return !!ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'))
+ return !!ele.className.match(new RegExp("(\\s|^)" + cls + "(\\s|$)"));
}
/**
@@ -305,7 +312,7 @@ export function hasClass(ele, cls) {
* @param {string} cls
*/
export function addClass(ele, cls) {
- if (!hasClass(ele, cls)) ele.className += ' ' + cls
+ if (!hasClass(ele, cls)) ele.className += " " + cls;
}
/**
@@ -315,76 +322,152 @@ export function addClass(ele, cls) {
*/
export function removeClass(ele, cls) {
if (hasClass(ele, cls)) {
- const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)')
- ele.className = ele.className.replace(reg, ' ')
+ const reg = new RegExp("(\\s|^)" + cls + "(\\s|$)");
+ ele.className = ele.className.replace(reg, " ");
}
}
export function makeMap(str, expectsLowerCase) {
- const map = Object.create(null)
- const list = str.split(',')
+ const map = Object.create(null);
+ const list = str.split(",");
for (let i = 0; i < list.length; i++) {
- map[list[i]] = true
+ map[list[i]] = true;
}
- return expectsLowerCase
- ? val => map[val.toLowerCase()]
- : val => map[val]
+ return expectsLowerCase ? (val) => map[val.toLowerCase()] : (val) => map[val];
}
-
-export const exportDefault = 'export default '
+
+export const exportDefault = "export default ";
export const beautifierConf = {
html: {
- indent_size: '2',
- indent_char: ' ',
- max_preserve_newlines: '-1',
+ indent_size: "2",
+ indent_char: " ",
+ max_preserve_newlines: "-1",
preserve_newlines: false,
keep_array_indentation: false,
break_chained_methods: false,
- indent_scripts: 'separate',
- brace_style: 'end-expand',
+ indent_scripts: "separate",
+ brace_style: "end-expand",
space_before_conditional: true,
unescape_strings: false,
jslint_happy: false,
end_with_newline: true,
- wrap_line_length: '110',
+ wrap_line_length: "110",
indent_inner_html: true,
comma_first: false,
e4x: true,
- indent_empty_lines: true
+ indent_empty_lines: true,
},
js: {
- indent_size: '2',
- indent_char: ' ',
- max_preserve_newlines: '-1',
+ indent_size: "2",
+ indent_char: " ",
+ max_preserve_newlines: "-1",
preserve_newlines: false,
keep_array_indentation: false,
break_chained_methods: false,
- indent_scripts: 'normal',
- brace_style: 'end-expand',
+ indent_scripts: "normal",
+ brace_style: "end-expand",
space_before_conditional: true,
unescape_strings: false,
jslint_happy: true,
end_with_newline: true,
- wrap_line_length: '110',
+ wrap_line_length: "110",
indent_inner_html: true,
comma_first: false,
e4x: true,
- indent_empty_lines: true
- }
-}
+ indent_empty_lines: true,
+ },
+};
// 首字母大小
export function titleCase(str) {
- return str.replace(/( |^)[a-z]/g, L => L.toUpperCase())
+ return str.replace(/( |^)[a-z]/g, (L) => L.toUpperCase());
}
// 下划转驼峰
export function camelCase(str) {
- return str.replace(/_[a-z]/g, str1 => str1.substr(-1).toUpperCase())
+ return str.replace(/_[a-z]/g, (str1) => str1.substr(-1).toUpperCase());
}
export function isNumberStr(str) {
- return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str)
+ return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str);
+}
+
+/**
+ * 防抖
+ */
+// export function debounce(handle, delay) {
+// var timer = null;
+// return function () {
+// var _self = this,
+// _args = arguments;
+// clearTimeout(timer);
+// timer = setTimeout(function () {
+// handle.apply(_self, _args);
+// }, delay);
+// };
+// }
+
+/**
+ * 节流
+ */
+export function throttle(handler, wait) {
+ var lastTime = 0;
+ return function (e) {
+ var nowTime = new Date().getTime();
+ if (nowTime - lastTime > wait) {
+ handler.apply(this, arguments);
+ lastTime = nowTime;
+ }
+ };
+}
+/**
+ * 值之间的过度
+ * @param {number} num 需要过度的数值
+ * @param {number} duration 过渡时间
+ */
+export function transitionNum(num, duration) {
+ const initial = ref(0);
+ const initialNum = useTransition(initial, {
+ duration: duration,
+ transition: TransitionPresets.easeInOutCubic,
+ });
+ initial.value = num;
+ return initialNum;
+}
+/**
+ * 获取一个随机的颜色值
+ */
+export function randomColor() {
+ return `#${Math.random().toString(16).slice(2, 8).padEnd(6, "0")}`;
+}
+/**
+ * 时间段
+ * @param hours
+ * @returns
+ */
+export function timePeriod(hours) {
+ if (hours >= 3 && hours < 8) {
+ return "早安!";
+ } else if (hours >= 8 && hours < 11) {
+ return "上午好!";
+ } else if (hours >= 11 && hours < 13) {
+ return "中午好!";
+ } else if (hours >= 13 && hours < 17) {
+ return "下午好!";
+ } else if (hours >= 17 && hours < 23) {
+ return "晚上好!";
+ } else if (hours >= 23 && hours < 3) {
+ return "晚安!";
+ }
+}
+
+/**
+ * 获取路由
+ */
+export function getUrlRouter() {
+ var sHref = window.location.href;
+ var args = sHref.split("#");
+ var hrefarr = args[1].split("/")[1].split("?");
+ return hrefarr;
}
-
diff --git a/src/utils/lunar.js b/src/utils/lunar.js
new file mode 100644
index 0000000..d143553
--- /dev/null
+++ b/src/utils/lunar.js
@@ -0,0 +1,1126 @@
+/**
+ * Author: Fu Guobin
+ * Date: 2020/06/28
+ * Last Modified by: Fu Guobin
+ * Last Modified time: 2023/05/26
+ * Copyright:Daniel(Fu Guobin)
+ * Description:农历函数封装
+ */
+/**
+ * @1900-2100区间内的公历、农历互转
+ * @charset UTF-8
+ * @Author Daniel
+ * @Time 2022-07-26
+ * @Version 1.0.3
+ * @公历转农历:calendar.solarToLunar(1987,11,01); //[you can ignore params of prefix 0]
+ * @农历转公历:calendar.lunarToSolar(1987,09,10); //[you can ignore params of prefix 0]
+ */
+const calendar = {
+ /**
+ * 农历1900-2100的润大小信息表
+ * @Array Of Property
+ * @return Hex
+ */
+ lunarInfo: [
+ 0x04bd8,
+ 0x04ae0,
+ 0x0a570,
+ 0x054d5,
+ 0x0d260,
+ 0x0d950,
+ 0x16554,
+ 0x056a0,
+ 0x09ad0,
+ 0x055d2, //1900-1909
+ 0x04ae0,
+ 0x0a5b6,
+ 0x0a4d0,
+ 0x0d250,
+ 0x1d255,
+ 0x0b540,
+ 0x0d6a0,
+ 0x0ada2,
+ 0x095b0,
+ 0x14977, //1910-1919
+ 0x04970,
+ 0x0a4b0,
+ 0x0b4b5,
+ 0x06a50,
+ 0x06d40,
+ 0x1ab54,
+ 0x02b60,
+ 0x09570,
+ 0x052f2,
+ 0x04970, //1920-1929
+ 0x06566,
+ 0x0d4a0,
+ 0x0ea50,
+ 0x16a95,
+ 0x05ad0,
+ 0x02b60,
+ 0x186e3,
+ 0x092e0,
+ 0x1c8d7,
+ 0x0c950, //1930-1939
+ 0x0d4a0,
+ 0x1d8a6,
+ 0x0b550,
+ 0x056a0,
+ 0x1a5b4,
+ 0x025d0,
+ 0x092d0,
+ 0x0d2b2,
+ 0x0a950,
+ 0x0b557, //1940-1949
+ 0x06ca0,
+ 0x0b550,
+ 0x15355,
+ 0x04da0,
+ 0x0a5b0,
+ 0x14573,
+ 0x052b0,
+ 0x0a9a8,
+ 0x0e950,
+ 0x06aa0, //1950-1959
+ 0x0aea6,
+ 0x0ab50,
+ 0x04b60,
+ 0x0aae4,
+ 0x0a570,
+ 0x05260,
+ 0x0f263,
+ 0x0d950,
+ 0x05b57,
+ 0x056a0, //1960-1969
+ 0x096d0,
+ 0x04dd5,
+ 0x04ad0,
+ 0x0a4d0,
+ 0x0d4d4,
+ 0x0d250,
+ 0x0d558,
+ 0x0b540,
+ 0x0b6a0,
+ 0x195a6, //1970-1979
+ 0x095b0,
+ 0x049b0,
+ 0x0a974,
+ 0x0a4b0,
+ 0x0b27a,
+ 0x06a50,
+ 0x06d40,
+ 0x0af46,
+ 0x0ab60,
+ 0x09570, //1980-1989
+ 0x04af5,
+ 0x04970,
+ 0x064b0,
+ 0x074a3,
+ 0x0ea50,
+ 0x06b58,
+ 0x05ac0,
+ 0x0ab60,
+ 0x096d5,
+ 0x092e0, //1990-1999
+ 0x0c960,
+ 0x0d954,
+ 0x0d4a0,
+ 0x0da50,
+ 0x07552,
+ 0x056a0,
+ 0x0abb7,
+ 0x025d0,
+ 0x092d0,
+ 0x0cab5, //2000-2009
+ 0x0a950,
+ 0x0b4a0,
+ 0x0baa4,
+ 0x0ad50,
+ 0x055d9,
+ 0x04ba0,
+ 0x0a5b0,
+ 0x15176,
+ 0x052b0,
+ 0x0a930, //2010-2019
+ 0x07954,
+ 0x06aa0,
+ 0x0ad50,
+ 0x05b52,
+ 0x04b60,
+ 0x0a6e6,
+ 0x0a4e0,
+ 0x0d260,
+ 0x0ea65,
+ 0x0d530, //2020-2029
+ 0x05aa0,
+ 0x076a3,
+ 0x096d0,
+ 0x04afb,
+ 0x04ad0,
+ 0x0a4d0,
+ 0x1d0b6,
+ 0x0d250,
+ 0x0d520,
+ 0x0dd45, //2030-2039
+ 0x0b5a0,
+ 0x056d0,
+ 0x055b2,
+ 0x049b0,
+ 0x0a577,
+ 0x0a4b0,
+ 0x0aa50,
+ 0x1b255,
+ 0x06d20,
+ 0x0ada0, //2040-2049
+ /**Add By JJonline@JJonline.Cn**/
+ 0x14b63,
+ 0x09370,
+ 0x049f8,
+ 0x04970,
+ 0x064b0,
+ 0x168a6,
+ 0x0ea50,
+ 0x06b20,
+ 0x1a6c4,
+ 0x0aae0, //2050-2059
+ 0x092e0,
+ 0x0d2e3,
+ 0x0c960,
+ 0x0d557,
+ 0x0d4a0,
+ 0x0da50,
+ 0x05d55,
+ 0x056a0,
+ 0x0a6d0,
+ 0x055d4, //2060-2069
+ 0x052d0,
+ 0x0a9b8,
+ 0x0a950,
+ 0x0b4a0,
+ 0x0b6a6,
+ 0x0ad50,
+ 0x055a0,
+ 0x0aba4,
+ 0x0a5b0,
+ 0x052b0, //2070-2079
+ 0x0b273,
+ 0x06930,
+ 0x07337,
+ 0x06aa0,
+ 0x0ad50,
+ 0x14b55,
+ 0x04b60,
+ 0x0a570,
+ 0x054e4,
+ 0x0d160, //2080-2089
+ 0x0e968,
+ 0x0d520,
+ 0x0daa0,
+ 0x16aa6,
+ 0x056d0,
+ 0x04ae0,
+ 0x0a9d4,
+ 0x0a2d0,
+ 0x0d150,
+ 0x0f252, //2090-2099
+ 0x0d520
+ ], //2100
+
+ /**
+ * 公历每个月份的天数普通表
+ * @Array Of Property
+ * @return Number
+ */
+ solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
+
+ /**
+ * 天干地支之天干速查表
+ * @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"]
+ * @return Cn string
+ */
+ Gan: [
+ "\u7532",
+ "\u4e59",
+ "\u4e19",
+ "\u4e01",
+ "\u620a",
+ "\u5df1",
+ "\u5e9a",
+ "\u8f9b",
+ "\u58ec",
+ "\u7678"
+ ],
+
+ /**
+ * 天干地支之地支速查表
+ * @Array Of Property
+ * @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"]
+ * @return Cn string
+ */
+ Zhi: [
+ "\u5b50",
+ "\u4e11",
+ "\u5bc5",
+ "\u536f",
+ "\u8fb0",
+ "\u5df3",
+ "\u5348",
+ "\u672a",
+ "\u7533",
+ "\u9149",
+ "\u620c",
+ "\u4ea5"
+ ],
+
+ /**
+ * 天干地支之地支速查表<=>生肖
+ * @Array Of Property
+ * @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"]
+ * @return Cn string
+ */
+ Animals: [
+ "\u9f20",
+ "\u725b",
+ "\u864e",
+ "\u5154",
+ "\u9f99",
+ "\u86c7",
+ "\u9a6c",
+ "\u7f8a",
+ "\u7334",
+ "\u9e21",
+ "\u72d7",
+ "\u732a"
+ ],
+
+ /**
+ * 阳历节日
+ */
+ festival: {
+ "1-1": { title: "元旦节" },
+ "2-14": { title: "情人节" },
+ "5-1": { title: "劳动节" },
+ "5-4": { title: "青年节" },
+ "6-1": { title: "儿童节" },
+ "9-10": { title: "教师节" },
+ "10-1": { title: "国庆节" },
+ "12-25": { title: "圣诞节" },
+
+ "3-8": { title: "妇女节" },
+ "3-12": { title: "植树节" },
+ "4-1": { title: "愚人节" },
+ "5-12": { title: "护士节" },
+ "7-1": { title: "建党节" },
+ "8-1": { title: "建军节" },
+ "12-24": { title: "平安夜" }
+ },
+
+ /**
+ * 农历节日
+ */
+ lFestival: {
+ "12-30": { title: "除夕" },
+ "1-1": { title: "春节" },
+ "1-15": { title: "元宵节" },
+ "2-2": { title: "龙抬头" },
+ "5-5": { title: "端午节" },
+ "7-7": { title: "七夕节" },
+ "7-15": { title: "中元节" },
+ "8-15": { title: "中秋节" },
+ "9-9": { title: "重阳节" },
+ "10-1": { title: "寒衣节" },
+ "10-15": { title: "下元节" },
+ "12-8": { title: "腊八节" },
+ "12-23": { title: "北方小年" },
+ "12-24": { title: "南方小年" }
+ },
+
+ /**
+ * 返回默认定义的阳历节日
+ */
+ getFestival() {
+ return this.festival;
+ },
+
+ /**
+ * 返回默认定义的内容里节日
+ */
+ getLunarFestival() {
+ return this.lFestival;
+ },
+
+ /**
+ *
+ * @param param {Object} 按照festival的格式输入数据,设置阳历节日
+ */
+ setFestival(param = {}) {
+ this.festival = param;
+ },
+
+ /**
+ *
+ * @param param {Object} 按照lFestival的格式输入数据,设置农历节日
+ */
+ setLunarFestival(param = {}) {
+ this.lFestival = param;
+ },
+
+ /**
+ * 24节气速查表
+ * @Array Of Property
+ * @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"]
+ * @return Cn string
+ */
+ solarTerm: [
+ "\u5c0f\u5bd2",
+ "\u5927\u5bd2",
+ "\u7acb\u6625",
+ "\u96e8\u6c34",
+ "\u60ca\u86f0",
+ "\u6625\u5206",
+ "\u6e05\u660e",
+ "\u8c37\u96e8",
+ "\u7acb\u590f",
+ "\u5c0f\u6ee1",
+ "\u8292\u79cd",
+ "\u590f\u81f3",
+ "\u5c0f\u6691",
+ "\u5927\u6691",
+ "\u7acb\u79cb",
+ "\u5904\u6691",
+ "\u767d\u9732",
+ "\u79cb\u5206",
+ "\u5bd2\u9732",
+ "\u971c\u964d",
+ "\u7acb\u51ac",
+ "\u5c0f\u96ea",
+ "\u5927\u96ea",
+ "\u51ac\u81f3"
+ ],
+
+ /**
+ * 1900-2100各年的24节气日期速查表
+ * @Array Of Property
+ * @return 0x string For splice
+ */
+ sTermInfo: [
+ "9778397bd097c36b0b6fc9274c91aa",
+ "97b6b97bd19801ec9210c965cc920e",
+ "97bcf97c3598082c95f8c965cc920f",
+ "97bd0b06bdb0722c965ce1cfcc920f",
+ "b027097bd097c36b0b6fc9274c91aa",
+ "97b6b97bd19801ec9210c965cc920e",
+ "97bcf97c359801ec95f8c965cc920f",
+ "97bd0b06bdb0722c965ce1cfcc920f",
+ "b027097bd097c36b0b6fc9274c91aa",
+ "97b6b97bd19801ec9210c965cc920e",
+ "97bcf97c359801ec95f8c965cc920f",
+ "97bd0b06bdb0722c965ce1cfcc920f",
+ "b027097bd097c36b0b6fc9274c91aa",
+ "9778397bd19801ec9210c965cc920e",
+ "97b6b97bd19801ec95f8c965cc920f",
+ "97bd09801d98082c95f8e1cfcc920f",
+ "97bd097bd097c36b0b6fc9210c8dc2",
+ "9778397bd197c36c9210c9274c91aa",
+ "97b6b97bd19801ec95f8c965cc920e",
+ "97bd09801d98082c95f8e1cfcc920f",
+ "97bd097bd097c36b0b6fc9210c8dc2",
+ "9778397bd097c36c9210c9274c91aa",
+ "97b6b97bd19801ec95f8c965cc920e",
+ "97bcf97c3598082c95f8e1cfcc920f",
+ "97bd097bd097c36b0b6fc9210c8dc2",
+ "9778397bd097c36c9210c9274c91aa",
+ "97b6b97bd19801ec9210c965cc920e",
+ "97bcf97c3598082c95f8c965cc920f",
+ "97bd097bd097c35b0b6fc920fb0722",
+ "9778397bd097c36b0b6fc9274c91aa",
+ "97b6b97bd19801ec9210c965cc920e",
+ "97bcf97c3598082c95f8c965cc920f",
+ "97bd097bd097c35b0b6fc920fb0722",
+ "9778397bd097c36b0b6fc9274c91aa",
+ "97b6b97bd19801ec9210c965cc920e",
+ "97bcf97c359801ec95f8c965cc920f",
+ "97bd097bd097c35b0b6fc920fb0722",
+ "9778397bd097c36b0b6fc9274c91aa",
+ "97b6b97bd19801ec9210c965cc920e",
+ "97bcf97c359801ec95f8c965cc920f",
+ "97bd097bd097c35b0b6fc920fb0722",
+ "9778397bd097c36b0b6fc9274c91aa",
+ "97b6b97bd19801ec9210c965cc920e",
+ "97bcf97c359801ec95f8c965cc920f",
+ "97bd097bd07f595b0b6fc920fb0722",
+ "9778397bd097c36b0b6fc9210c8dc2",
+ "9778397bd19801ec9210c9274c920e",
+ "97b6b97bd19801ec95f8c965cc920f",
+ "97bd07f5307f595b0b0bc920fb0722",
+ "7f0e397bd097c36b0b6fc9210c8dc2",
+ "9778397bd097c36c9210c9274c920e",
+ "97b6b97bd19801ec95f8c965cc920f",
+ "97bd07f5307f595b0b0bc920fb0722",
+ "7f0e397bd097c36b0b6fc9210c8dc2",
+ "9778397bd097c36c9210c9274c91aa",
+ "97b6b97bd19801ec9210c965cc920e",
+ "97bd07f1487f595b0b0bc920fb0722",
+ "7f0e397bd097c36b0b6fc9210c8dc2",
+ "9778397bd097c36b0b6fc9274c91aa",
+ "97b6b97bd19801ec9210c965cc920e",
+ "97bcf7f1487f595b0b0bb0b6fb0722",
+ "7f0e397bd097c35b0b6fc920fb0722",
+ "9778397bd097c36b0b6fc9274c91aa",
+ "97b6b97bd19801ec9210c965cc920e",
+ "97bcf7f1487f595b0b0bb0b6fb0722",
+ "7f0e397bd097c35b0b6fc920fb0722",
+ "9778397bd097c36b0b6fc9274c91aa",
+ "97b6b97bd19801ec9210c965cc920e",
+ "97bcf7f1487f531b0b0bb0b6fb0722",
+ "7f0e397bd097c35b0b6fc920fb0722",
+ "9778397bd097c36b0b6fc9274c91aa",
+ "97b6b97bd19801ec9210c965cc920e",
+ "97bcf7f1487f531b0b0bb0b6fb0722",
+ "7f0e397bd07f595b0b6fc920fb0722",
+ "9778397bd097c36b0b6fc9274c91aa",
+ "97b6b97bd19801ec9210c9274c920e",
+ "97bcf7f0e47f531b0b0bb0b6fb0722",
+ "7f0e397bd07f595b0b0bc920fb0722",
+ "9778397bd097c36b0b6fc9210c91aa",
+ "97b6b97bd197c36c9210c9274c920e",
+ "97bcf7f0e47f531b0b0bb0b6fb0722",
+ "7f0e397bd07f595b0b0bc920fb0722",
+ "9778397bd097c36b0b6fc9210c8dc2",
+ "9778397bd097c36c9210c9274c920e",
+ "97b6b7f0e47f531b0723b0b6fb0722",
+ "7f0e37f5307f595b0b0bc920fb0722",
+ "7f0e397bd097c36b0b6fc9210c8dc2",
+ "9778397bd097c36b0b70c9274c91aa",
+ "97b6b7f0e47f531b0723b0b6fb0721",
+ "7f0e37f1487f595b0b0bb0b6fb0722",
+ "7f0e397bd097c35b0b6fc9210c8dc2",
+ "9778397bd097c36b0b6fc9274c91aa",
+ "97b6b7f0e47f531b0723b0b6fb0721",
+ "7f0e27f1487f595b0b0bb0b6fb0722",
+ "7f0e397bd097c35b0b6fc920fb0722",
+ "9778397bd097c36b0b6fc9274c91aa",
+ "97b6b7f0e47f531b0723b0b6fb0721",
+ "7f0e27f1487f531b0b0bb0b6fb0722",
+ "7f0e397bd097c35b0b6fc920fb0722",
+ "9778397bd097c36b0b6fc9274c91aa",
+ "97b6b7f0e47f531b0723b0b6fb0721",
+ "7f0e27f1487f531b0b0bb0b6fb0722",
+ "7f0e397bd097c35b0b6fc920fb0722",
+ "9778397bd097c36b0b6fc9274c91aa",
+ "97b6b7f0e47f531b0723b0b6fb0721",
+ "7f0e27f1487f531b0b0bb0b6fb0722",
+ "7f0e397bd07f595b0b0bc920fb0722",
+ "9778397bd097c36b0b6fc9274c91aa",
+ "97b6b7f0e47f531b0723b0787b0721",
+ "7f0e27f0e47f531b0b0bb0b6fb0722",
+ "7f0e397bd07f595b0b0bc920fb0722",
+ "9778397bd097c36b0b6fc9210c91aa",
+ "97b6b7f0e47f149b0723b0787b0721",
+ "7f0e27f0e47f531b0723b0b6fb0722",
+ "7f0e397bd07f595b0b0bc920fb0722",
+ "9778397bd097c36b0b6fc9210c8dc2",
+ "977837f0e37f149b0723b0787b0721",
+ "7f07e7f0e47f531b0723b0b6fb0722",
+ "7f0e37f5307f595b0b0bc920fb0722",
+ "7f0e397bd097c35b0b6fc9210c8dc2",
+ "977837f0e37f14998082b0787b0721",
+ "7f07e7f0e47f531b0723b0b6fb0721",
+ "7f0e37f1487f595b0b0bb0b6fb0722",
+ "7f0e397bd097c35b0b6fc9210c8dc2",
+ "977837f0e37f14998082b0787b06bd",
+ "7f07e7f0e47f531b0723b0b6fb0721",
+ "7f0e27f1487f531b0b0bb0b6fb0722",
+ "7f0e397bd097c35b0b6fc920fb0722",
+ "977837f0e37f14998082b0787b06bd",
+ "7f07e7f0e47f531b0723b0b6fb0721",
+ "7f0e27f1487f531b0b0bb0b6fb0722",
+ "7f0e397bd097c35b0b6fc920fb0722",
+ "977837f0e37f14998082b0787b06bd",
+ "7f07e7f0e47f531b0723b0b6fb0721",
+ "7f0e27f1487f531b0b0bb0b6fb0722",
+ "7f0e397bd07f595b0b0bc920fb0722",
+ "977837f0e37f14998082b0787b06bd",
+ "7f07e7f0e47f531b0723b0b6fb0721",
+ "7f0e27f1487f531b0b0bb0b6fb0722",
+ "7f0e397bd07f595b0b0bc920fb0722",
+ "977837f0e37f14998082b0787b06bd",
+ "7f07e7f0e47f149b0723b0787b0721",
+ "7f0e27f0e47f531b0b0bb0b6fb0722",
+ "7f0e397bd07f595b0b0bc920fb0722",
+ "977837f0e37f14998082b0723b06bd",
+ "7f07e7f0e37f149b0723b0787b0721",
+ "7f0e27f0e47f531b0723b0b6fb0722",
+ "7f0e397bd07f595b0b0bc920fb0722",
+ "977837f0e37f14898082b0723b02d5",
+ "7ec967f0e37f14998082b0787b0721",
+ "7f07e7f0e47f531b0723b0b6fb0722",
+ "7f0e37f1487f595b0b0bb0b6fb0722",
+ "7f0e37f0e37f14898082b0723b02d5",
+ "7ec967f0e37f14998082b0787b0721",
+ "7f07e7f0e47f531b0723b0b6fb0722",
+ "7f0e37f1487f531b0b0bb0b6fb0722",
+ "7f0e37f0e37f14898082b0723b02d5",
+ "7ec967f0e37f14998082b0787b06bd",
+ "7f07e7f0e47f531b0723b0b6fb0721",
+ "7f0e37f1487f531b0b0bb0b6fb0722",
+ "7f0e37f0e37f14898082b072297c35",
+ "7ec967f0e37f14998082b0787b06bd",
+ "7f07e7f0e47f531b0723b0b6fb0721",
+ "7f0e27f1487f531b0b0bb0b6fb0722",
+ "7f0e37f0e37f14898082b072297c35",
+ "7ec967f0e37f14998082b0787b06bd",
+ "7f07e7f0e47f531b0723b0b6fb0721",
+ "7f0e27f1487f531b0b0bb0b6fb0722",
+ "7f0e37f0e366aa89801eb072297c35",
+ "7ec967f0e37f14998082b0787b06bd",
+ "7f07e7f0e47f149b0723b0787b0721",
+ "7f0e27f1487f531b0b0bb0b6fb0722",
+ "7f0e37f0e366aa89801eb072297c35",
+ "7ec967f0e37f14998082b0723b06bd",
+ "7f07e7f0e47f149b0723b0787b0721",
+ "7f0e27f0e47f531b0723b0b6fb0722",
+ "7f0e37f0e366aa89801eb072297c35",
+ "7ec967f0e37f14998082b0723b06bd",
+ "7f07e7f0e37f14998083b0787b0721",
+ "7f0e27f0e47f531b0723b0b6fb0722",
+ "7f0e37f0e366aa89801eb072297c35",
+ "7ec967f0e37f14898082b0723b02d5",
+ "7f07e7f0e37f14998082b0787b0721",
+ "7f07e7f0e47f531b0723b0b6fb0722",
+ "7f0e36665b66aa89801e9808297c35",
+ "665f67f0e37f14898082b0723b02d5",
+ "7ec967f0e37f14998082b0787b0721",
+ "7f07e7f0e47f531b0723b0b6fb0722",
+ "7f0e36665b66a449801e9808297c35",
+ "665f67f0e37f14898082b0723b02d5",
+ "7ec967f0e37f14998082b0787b06bd",
+ "7f07e7f0e47f531b0723b0b6fb0721",
+ "7f0e36665b66a449801e9808297c35",
+ "665f67f0e37f14898082b072297c35",
+ "7ec967f0e37f14998082b0787b06bd",
+ "7f07e7f0e47f531b0723b0b6fb0721",
+ "7f0e26665b66a449801e9808297c35",
+ "665f67f0e37f1489801eb072297c35",
+ "7ec967f0e37f14998082b0787b06bd",
+ "7f07e7f0e47f531b0723b0b6fb0721",
+ "7f0e27f1487f531b0b0bb0b6fb0722"
+ ],
+
+ /**
+ * 数字转中文速查表
+ * @Array Of Property
+ * @trans ['日','一','二','三','四','五','六','七','八','九','十']
+ * @return Cn string
+ */
+ nStr1: [
+ "\u65e5",
+ "\u4e00",
+ "\u4e8c",
+ "\u4e09",
+ "\u56db",
+ "\u4e94",
+ "\u516d",
+ "\u4e03",
+ "\u516b",
+ "\u4e5d",
+ "\u5341"
+ ],
+
+ /**
+ * 日期转农历称呼速查表
+ * @Array Of Property
+ * @trans ['初','十','廿','卅']
+ * @return Cn string
+ */
+ nStr2: ["\u521d", "\u5341", "\u5eff", "\u5345"],
+
+ /**
+ * 月份转农历称呼速查表
+ * @Array Of Property
+ * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊']
+ * @return Cn string
+ */
+ nStr3: [
+ "\u6b63",
+ "\u4e8c",
+ "\u4e09",
+ "\u56db",
+ "\u4e94",
+ "\u516d",
+ "\u4e03",
+ "\u516b",
+ "\u4e5d",
+ "\u5341",
+ "\u51ac",
+ "\u814a"
+ ],
+
+ /**
+ * 返回农历y年一整年的总天数
+ * @param y lunar Year
+ * @return Number
+ * @eg:var count = calendar.lYearDays(1987) ;//count=387
+ */
+ lYearDays: function (y) {
+ let i,
+ sum = 348;
+ for (i = 0x8000; i > 0x8; i >>= 1) {
+ sum += this.lunarInfo[y - 1900] & i ? 1 : 0;
+ }
+ return sum + this.leapDays(y);
+ },
+
+ /**
+ * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0
+ * @param y lunar Year
+ * @return Number (0-12)
+ * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6
+ */
+ leapMonth: function (y) {
+ //闰字编码 \u95f0
+ return this.lunarInfo[y - 1900] & 0xf;
+ },
+
+ /**
+ * 返回农历y年闰月的天数 若该年没有闰月则返回0
+ * @param y lunar Year
+ * @return Number (0、29、30)
+ * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29
+ */
+ leapDays: function (y) {
+ if (this.leapMonth(y)) {
+ return this.lunarInfo[y - 1900] & 0x10000 ? 30 : 29;
+ }
+ return 0;
+ },
+
+ /**
+ * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法
+ * @param y lunar Year
+ * @param m lunar Month
+ * @return Number (-1、29、30)
+ * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29
+ */
+ monthDays: function (y, m) {
+ if (m > 12 || m < 1) {
+ return -1;
+ } //月份参数从1至12,参数错误返回-1
+ return this.lunarInfo[y - 1900] & (0x10000 >> m) ? 30 : 29;
+ },
+
+ /**
+ * 返回公历(!)y年m月的天数
+ * @param y solar Year
+ * @param m solar Month
+ * @return Number (-1、28、29、30、31)
+ * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30
+ */
+ solarDays: function (y, m) {
+ if (m > 12 || m < 1) {
+ return -1;
+ } //若参数错误 返回-1
+ const ms = m - 1;
+ if (ms === 1) {
+ //2月份的闰平规律测算后确认返回28或29
+ return (y % 4 === 0 && y % 100 !== 0) || y % 400 === 0 ? 29 : 28;
+ } else {
+ return this.solarMonth[ms];
+ }
+ },
+
+ /**
+ * 农历年份转换为干支纪年
+ * @param lYear 农历年的年份数
+ * @return Cn string
+ */
+ toGanZhiYear: function (lYear) {
+ let ganKey = (lYear - 3) % 10;
+ let zhiKey = (lYear - 3) % 12;
+ if (ganKey === 0) ganKey = 10; //如果余数为0则为最后一个天干
+ if (zhiKey === 0) zhiKey = 12; //如果余数为0则为最后一个地支
+ return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1];
+ },
+
+ /**
+ * 公历月、日判断所属星座
+ * @param cMonth [description]
+ * @param cDay [description]
+ * @return Cn string
+ */
+ toAstro: function (cMonth, cDay) {
+ const s =
+ "\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf";
+ const arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22];
+ return (
+ s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + "\u5ea7"
+ ); //座
+ },
+
+ /**
+ * 传入offset偏移量返回干支
+ * @param offset 相对甲子的偏移量
+ * @return Cn string
+ */
+ toGanZhi: function (offset) {
+ return this.Gan[offset % 10] + this.Zhi[offset % 12];
+ },
+
+ /**
+ * 传入公历(!)y年获得该年第n个节气的公历日期
+ * @param y y公历年(1900-2100)
+ * @param n n二十四节气中的第几个节气(1~24);从n=1(小寒)算起
+ * @return day Number
+ * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春
+ */
+ getTerm: function (y, n) {
+ if (y < 1900 || y > 2100) {
+ return -1;
+ }
+ if (n < 1 || n > 24) {
+ return -1;
+ }
+ const _table = this.sTermInfo[y - 1900];
+ const _info = [
+ parseInt("0x" + _table.substr(0, 5)).toString(),
+ parseInt("0x" + _table.substr(5, 5)).toString(),
+ parseInt("0x" + _table.substr(10, 5)).toString(),
+ parseInt("0x" + _table.substr(15, 5)).toString(),
+ parseInt("0x" + _table.substr(20, 5)).toString(),
+ parseInt("0x" + _table.substr(25, 5)).toString()
+ ];
+ const _calcDay = [
+ _info[0].substr(0, 1),
+ _info[0].substr(1, 2),
+ _info[0].substr(3, 1),
+ _info[0].substr(4, 2),
+
+ _info[1].substr(0, 1),
+ _info[1].substr(1, 2),
+ _info[1].substr(3, 1),
+ _info[1].substr(4, 2),
+
+ _info[2].substr(0, 1),
+ _info[2].substr(1, 2),
+ _info[2].substr(3, 1),
+ _info[2].substr(4, 2),
+
+ _info[3].substr(0, 1),
+ _info[3].substr(1, 2),
+ _info[3].substr(3, 1),
+ _info[3].substr(4, 2),
+
+ _info[4].substr(0, 1),
+ _info[4].substr(1, 2),
+ _info[4].substr(3, 1),
+ _info[4].substr(4, 2),
+
+ _info[5].substr(0, 1),
+ _info[5].substr(1, 2),
+ _info[5].substr(3, 1),
+ _info[5].substr(4, 2)
+ ];
+ return parseInt(_calcDay[n - 1]);
+ },
+
+ /**
+ * 传入农历数字月份返回汉语通俗表示法
+ * @param m lunar month
+ * @return Cn string
+ * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月'
+ */
+ toChinaMonth: function (m) {
+ // 月 => \u6708
+ if (m > 12 || m < 1) {
+ return -1;
+ } //若参数错误 返回-1
+ let s = this.nStr3[m - 1];
+ s += "\u6708"; //加上月字
+ return s;
+ },
+
+ /**
+ * 传入农历日期数字返回汉字表示法
+ * @param d lunar day
+ * @return Cn string
+ * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一'
+ */
+ toChinaDay: function (d) {
+ //日 => \u65e5
+ let s;
+ switch (d) {
+ case 10:
+ s = "\u521d\u5341";
+ break;
+ case 20:
+ s = "\u4e8c\u5341";
+ break;
+ case 30:
+ s = "\u4e09\u5341";
+ break;
+ default:
+ s = this.nStr2[Math.floor(d / 10)];
+ s += this.nStr1[d % 10];
+ }
+ return s;
+ },
+
+ /**
+ * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春”
+ * @param y year
+ * @return Cn string
+ * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔'
+ */
+ getAnimal: function (y) {
+ return this.Animals[(y - 4) % 12];
+ },
+
+ /**
+ * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON
+ * !important! 公历参数区间1900.1.31~2100.12.31
+ * @param yPara solar year
+ * @param mPara solar month
+ * @param dPara solar day
+ * @return JSON object
+ * @eg:console.log(calendar.solarToLunar(1987,11,01));
+ */
+ solarToLunar: function (yPara, mPara, dPara) {
+ let y = parseInt(yPara);
+ let m = parseInt(mPara);
+ let d = parseInt(dPara);
+ //年份限定、上限
+ if (y < 1900 || y > 2100) {
+ return -1; // undefined转换为数字变为NaN
+ }
+ //公历传参最下限
+ if (y === 1900 && m === 1 && d < 31) {
+ return -1;
+ }
+
+ //未传参 获得当天
+ let objDate;
+ if (!y) {
+ objDate = new Date();
+ } else {
+ objDate = new Date(y, parseInt(m.toString()) - 1, d);
+ }
+ let i,
+ leap = 0,
+ temp = 0;
+ //修正ymd参数
+ y = objDate.getFullYear();
+ m = objDate.getMonth() + 1;
+ d = objDate.getDate();
+ let offset =
+ (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) -
+ Date.UTC(1900, 0, 31)) /
+ 86400000;
+ for (i = 1900; i < 2101 && offset > 0; i++) {
+ temp = this.lYearDays(i);
+ offset -= temp;
+ }
+ if (offset < 0) {
+ offset += temp;
+ i--;
+ }
+
+ //是否今天
+ // eslint-disable-next-line prefer-const
+ let isTodayObj = new Date(),
+ isToday = false;
+ if (
+ isTodayObj.getFullYear() === y &&
+ isTodayObj.getMonth() + 1 === m &&
+ isTodayObj.getDate() === d
+ ) {
+ isToday = true;
+ }
+ //星期几
+ let nWeek = objDate.getDay(),
+ // eslint-disable-next-line prefer-const
+ cWeek = this.nStr1[nWeek];
+ //数字表示周几顺应天朝周一开始的惯例
+ if (nWeek === 0) {
+ nWeek = 7;
+ }
+ //农历年
+ const year = i;
+ leap = this.leapMonth(i); //闰哪个月
+ let isLeap = false;
+
+ //效验闰月
+ for (i = 1; i < 13 && offset > 0; i++) {
+ //闰月
+ if (leap > 0 && i === leap + 1 && isLeap === false) {
+ --i;
+ isLeap = true;
+ temp = this.leapDays(year); //计算农历闰月天数
+ } else {
+ temp = this.monthDays(year, i); //计算农历普通月天数
+ }
+ //解除闰月
+ if (isLeap === true && i === leap + 1) {
+ isLeap = false;
+ }
+ offset -= temp;
+ }
+ // 闰月导致数组下标重叠取反
+ if (offset === 0 && leap > 0 && i === leap + 1) {
+ if (isLeap) {
+ isLeap = false;
+ } else {
+ isLeap = true;
+ --i;
+ }
+ }
+ if (offset < 0) {
+ offset += temp;
+ --i;
+ }
+ //农历月
+ const month = i;
+ //农历日
+ const day = offset + 1;
+ //天干地支处理
+ const sm = m - 1;
+ const cnY = this.toGanZhiYear(year);
+
+ // 当月的两个节气
+ // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year`
+ const firstNode = this.getTerm(y, m * 2 - 1); //返回当月「节」为几日开始
+ const secondNode = this.getTerm(y, m * 2); //返回当月「节」为几日开始
+
+ // 依据12节气修正干支月
+ let cnM = this.toGanZhi((y - 1900) * 12 + m + 11);
+ if (d >= firstNode) {
+ cnM = this.toGanZhi((y - 1900) * 12 + m + 12);
+ }
+
+ //传入的日期的节气与否
+ let isTerm = false;
+ let Term = null;
+ if (firstNode === d) {
+ isTerm = true;
+ Term = this.solarTerm[m * 2 - 2];
+ }
+ if (secondNode === d) {
+ isTerm = true;
+ Term = this.solarTerm[m * 2 - 1];
+ }
+ //日柱 当月一日与 1900/1/1 相差天数
+ const dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10;
+ const cnD = this.toGanZhi(dayCyclical + d - 1);
+ //该日期所属的星座
+ const astro = this.toAstro(m, d);
+
+ const solarDate = y + "-" + m + "-" + d;
+ const lunarDate = year + "-" + month + "-" + day;
+
+ const festival = this.festival;
+ const lFestival = this.lFestival;
+
+ const festivalDate = m + "-" + d;
+ const lunarFestivalDate = month + "-" + day;
+
+ return {
+ date: solarDate,
+ lunarDate: lunarDate,
+ festival: festival[festivalDate] ? festival[festivalDate].title : null,
+ lunarFestival: lFestival[lunarFestivalDate]
+ ? lFestival[lunarFestivalDate].title
+ : null,
+ lYear: year,
+ lMonth: month,
+ lDay: day,
+ Animal: this.getAnimal(year),
+ IMonthCn: (isLeap ? "\u95f0" : "") + this.toChinaMonth(month),
+ IDayCn: this.toChinaDay(day),
+ cYear: y,
+ cMonth: m,
+ cDay: d,
+ cnYear: cnY,
+ cnMonth: cnM,
+ cnDay: cnD,
+ isToday: isToday,
+ isLeap: isLeap,
+ nWeek: nWeek,
+ ncWeek: "\u661f\u671f" + cWeek,
+ isTerm: isTerm,
+ Term: Term,
+ astro: astro
+ };
+ },
+
+ /**
+ * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON
+ * !important! 参数区间1900.1.31~2100.12.1
+ * @param y lunar year
+ * @param m lunar month
+ * @param d lunar day
+ * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可]
+ * @return JSON object
+ * @eg:console.log(calendar.lunarToSolar(1987,9,10));
+ */
+ lunarToSolar: function (y, m, d, isLeapMonth) {
+ y = parseInt(y);
+ m = parseInt(m);
+ d = parseInt(d);
+ isLeapMonth = !!isLeapMonth;
+ // const leapOffset = 0;
+ const leapMonth = this.leapMonth(y);
+ // const leapDay = this.leapDays(y);
+ if (isLeapMonth && leapMonth !== m) {
+ return -1;
+ } //传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同
+ if (
+ (y === 2100 && m === 12 && d > 1) ||
+ (y === 1900 && m === 1 && d < 31)
+ ) {
+ return -1;
+ } //超出了最大极限值
+ const day = this.monthDays(y, m);
+ let _day = day;
+ //bugFix 2016-9-25
+ //if month is leap, _day use leapDays method
+ if (isLeapMonth) {
+ _day = this.leapDays(y, m);
+ }
+ if (y < 1900 || y > 2100 || d > _day) {
+ return -1;
+ } //参数合法性效验
+
+ //计算农历的时间差
+ let offset = 0;
+ let i;
+ for (i = 1900; i < y; i++) {
+ offset += this.lYearDays(i);
+ }
+ let leap = 0,
+ isAdd = false;
+ for (i = 1; i < m; i++) {
+ leap = this.leapMonth(y);
+ if (!isAdd) {
+ //处理闰月
+ if (leap <= i && leap > 0) {
+ offset += this.leapDays(y);
+ isAdd = true;
+ }
+ }
+ offset += this.monthDays(y, i);
+ }
+ //转换闰月农历 需补充该年闰月的前一个月的时差
+ if (isLeapMonth) {
+ offset += day;
+ }
+ //1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点)
+ const strap = Date.UTC(1900, 1, 30, 0, 0, 0);
+ const calObj = new Date((offset + d - 31) * 86400000 + strap);
+ const cY = calObj.getUTCFullYear();
+ const cM = calObj.getUTCMonth() + 1;
+ const cD = calObj.getUTCDate();
+
+ return this.solarToLunar(cY, cM, cD);
+ }
+};
+
+export default calendar;
\ No newline at end of file
diff --git a/src/utils/rem.js b/src/utils/rem.js
new file mode 100644
index 0000000..e4871e2
--- /dev/null
+++ b/src/utils/rem.js
@@ -0,0 +1,21 @@
+
+/**
+ * Author: Fu Guobin
+ * Date: 2020/06/28
+ * Last Modified by: Fu Guobin
+ * Last Modified time: 2023/08/28
+ * Copyright:Daniel(Fu Guobin)
+ * Description:封装一个根据屏幕尺寸自动改变 html 的 font-size 大小的函数
+ */
+const init = function () {
+ let clientWidth =
+ document.documentElement.clientWidth || document.body.clientWidth
+ // 设计图尺寸是 1920px,这样 *10 之后,1rem 就等于 10px;
+ const fontSize = (clientWidth / 1920 * 10)
+ document.documentElement.style.fontSize = fontSize + "px"
+}
+
+init()
+
+window.addEventListener("resize", init)
+export default init
\ No newline at end of file
diff --git a/src/utils/request.js b/src/utils/request.js
index 8cca458..0bbf79b 100644
--- a/src/utils/request.js
+++ b/src/utils/request.js
@@ -1,110 +1,155 @@
-import axios from 'axios'
-import { ElNotification , ElMessageBox, ElMessage, ElLoading } from 'element-plus'
-import { getToken } from '@/utils/auth'
-import errorCode from '@/utils/errorCode'
-import { tansParams, blobValidate } from '@/utils/ruoyi'
-import cache from '@/plugins/cache'
-import { saveAs } from 'file-saver'
-import useUserStore from '@/store/modules/user'
-import router from '@/router'
+import axios from "axios";
+import {
+ ElNotification,
+ ElMessageBox,
+ ElMessage,
+ ElLoading,
+} from "element-plus";
+import { getToken } from "@/utils/auth";
+import errorCode from "@/utils/errorCode";
+import { tansParams, blobValidate } from "@/utils/ruoyi";
+import cache from "@/plugins/cache";
+import { saveAs } from "file-saver";
+import useUserStore from "@/store/modules/user";
+import router from "@/router";
let downloadLoadingInstance;
// 是否显示重新登录
export let isRelogin = { show: false };
-axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
+axios.defaults.headers["Content-Type"] = "application/json;charset=utf-8";
// 创建axios实例
const service = axios.create({
// axios中请求配置有baseURL选项,表示请求URL公共部分
baseURL: import.meta.env.VITE_APP_BASE_API,
// 超时
- timeout: 120000
-})
+ timeout: 120000,
+});
// request拦截器
-service.interceptors.request.use(config => {
- config.headers['Referer1'] = router.currentRoute.value.fullPath.split('?')[0]
- // 是否需要设置 token
- const isToken = (config.headers || {}).isToken === false
- // 是否需要防止数据重复提交
- const isRepeatSubmit = (config.headers || {}).repeatSubmit === false
- if (getToken() && !isToken) {
- config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
- }
- // get请求映射params参数
- if (config.method === 'get' && config.params) {
- let url = config.url + '?' + tansParams(config.params);
- url = url.slice(0, -1);
- config.params = {};
- config.url = url;
- }
- if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
- const requestObj = {
- url: config.url,
- data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
- time: new Date().getTime()
+service.interceptors.request.use(
+ (config) => {
+ config.headers["Referer1"] =
+ router.currentRoute.value.fullPath.split("?")[0];
+ // 是否需要设置 token
+ const isToken = (config.headers || {}).isToken === false;
+ // 是否需要防止数据重复提交
+ const isRepeatSubmit = (config.headers || {}).repeatSubmit === false;
+ if (getToken() && !isToken) {
+ config.headers["Authorization"] = "Bearer " + getToken(); // 让每个请求携带自定义token 请根据实际情况自行修改
}
- const sessionObj = cache.session.getJSON('sessionObj')
- if (sessionObj === undefined || sessionObj === null || sessionObj === '') {
- cache.session.setJSON('sessionObj', requestObj)
- } else {
- const s_url = sessionObj.url; // 请求地址
- const s_data = sessionObj.data; // 请求数据
- const s_time = sessionObj.time; // 请求时间
- const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交
- if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
- const message = '数据正在处理,请勿重复提交';
- console.warn(`[${s_url}]: ` + message)
- return Promise.reject(new Error(message))
+ // get请求映射params参数
+ if (config.method === "get" && config.params) {
+ let url = config.url + "?" + tansParams(config.params);
+ url = url.slice(0, -1);
+ config.params = {};
+ config.url = url;
+ }
+ if (
+ !isRepeatSubmit &&
+ (config.method === "post" || config.method === "put")
+ ) {
+ const requestObj = {
+ url: config.url,
+ data:
+ typeof config.data === "object"
+ ? JSON.stringify(config.data)
+ : config.data,
+ time: new Date().getTime(),
+ };
+ const sessionObj = cache.session.getJSON("sessionObj");
+ if (
+ sessionObj === undefined ||
+ sessionObj === null ||
+ sessionObj === ""
+ ) {
+ cache.session.setJSON("sessionObj", requestObj);
} else {
- cache.session.setJSON('sessionObj', requestObj)
+ const s_url = sessionObj.url; // 请求地址
+ const s_data = sessionObj.data; // 请求数据
+ const s_time = sessionObj.time; // 请求时间
+ const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交
+ console.log(
+ "s_data:",
+ s_data === requestObj.data && requestObj.time - s_time
+ );
+ console.log("interval:", interval);
+ console.log("s_url:", s_url === requestObj.url);
+ if (
+ s_data === requestObj.data &&
+ requestObj.time - s_time < interval &&
+ s_url === requestObj.url
+ ) {
+ const message = "数据正在处理,请勿重复提交";
+ console.warn(`[${s_url}]: ` + message);
+ return Promise.reject(new Error(message));
+ } else {
+ cache.session.setJSON("sessionObj", requestObj);
+ }
}
}
+ return config;
+ },
+ (error) => {
+ console.log(error);
+ Promise.reject(error);
}
- return config
-}, error => {
- console.log(error)
- Promise.reject(error)
-})
+);
// 响应拦截器
-service.interceptors.response.use(res => {
+service.interceptors.response.use(
+ (res) => {
// 未设置状态码则默认成功状态
const code = res.data.code || 200;
// 获取错误信息
- const msg = errorCode[code] || res.data.msg || errorCode['default']
+ const msg = errorCode[code] || res.data.msg || errorCode["default"];
// 二进制数据则直接返回
- if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
- return res.data
+ if (
+ res.request.responseType === "blob" ||
+ res.request.responseType === "arraybuffer"
+ ) {
+ return res.data;
}
if (code === 401) {
if (!isRelogin.show) {
isRelogin.show = true;
- ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => {
- isRelogin.show = false;
- useUserStore().logOut().then(() => {
- location.href = '/index';
+ ElMessageBox.confirm(
+ "登录状态已过期,您可以继续留在该页面,或者重新登录",
+ "系统提示",
+ {
+ confirmButtonText: "重新登录",
+ cancelButtonText: "取消",
+ type: "warning",
+ }
+ )
+ .then(() => {
+ isRelogin.show = false;
+ useUserStore()
+ .logOut()
+ .then(() => {
+ location.href = "/index";
+ });
})
- }).catch(() => {
- isRelogin.show = false;
- });
- }
- return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
+ .catch(() => {
+ isRelogin.show = false;
+ });
+ }
+ return Promise.reject("无效的会话,或者会话已过期,请重新登录。");
} else if (code === 500) {
- ElMessage({ message: msg, type: 'error' })
- return Promise.reject(new Error(msg))
+ ElMessage({ message: msg, type: "error" });
+ return Promise.reject(new Error(msg));
} else if (code === 601) {
- ElMessage({ message: msg, type: 'warning' })
- return Promise.reject(new Error(msg))
+ ElMessage({ message: msg, type: "warning" });
+ return Promise.reject(new Error(msg));
} else if (code !== 200) {
- ElNotification.error({ title: msg })
- return Promise.reject('error')
+ ElNotification.error({ title: msg });
+ return Promise.reject("error");
} else {
- return Promise.resolve(res.data)
+ return Promise.resolve(res.data);
}
},
- error => {
- console.log('err' + error)
+ (error) => {
+ console.log("err" + error);
let { message } = error;
if (message == "Network Error") {
message = "后端接口连接异常";
@@ -113,65 +158,80 @@ service.interceptors.response.use(res => {
} else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常";
}
- ElMessage({ message: message, type: 'error', duration: 5 * 1000 })
- return Promise.reject(error)
+ ElMessage({ message: message, type: "error", duration: 5 * 1000 });
+ return Promise.reject(error);
}
-)
+);
// 通用下载方法
export function download(url, params, filename, config) {
- downloadLoadingInstance = ElLoading.service({ text: "正在下载数据,请稍候", background: "rgba(0, 0, 0, 0.7)", })
- return service.post(url, params, {
- transformRequest: [(params) => { return tansParams(params) }],
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
- responseType: 'blob',
- ...config
- }).then(async (data) => {
- const isBlob = blobValidate(data);
- if (isBlob) {
- const blob = new Blob([data])
- saveAs(blob, filename)
- } else {
- const resText = await data.text();
- const rspObj = JSON.parse(resText);
- const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
- ElMessage.error(errMsg);
- }
- downloadLoadingInstance.close();
- }).catch((r) => {
- console.error(r)
- ElMessage.error('下载文件出现错误,请联系管理员!')
- downloadLoadingInstance.close();
- })
+ downloadLoadingInstance = ElLoading.service({
+ text: "正在下载数据,请稍候",
+ background: "rgba(0, 0, 0, 0.7)",
+ });
+ return service
+ .post(url, params, {
+ transformRequest: [
+ (params) => {
+ return tansParams(params);
+ },
+ ],
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
+ responseType: "blob",
+ ...config,
+ })
+ .then(async (data) => {
+ const isBlob = blobValidate(data);
+ if (isBlob) {
+ const blob = new Blob([data]);
+ saveAs(blob, filename);
+ } else {
+ const resText = await data.text();
+ const rspObj = JSON.parse(resText);
+ const errMsg =
+ errorCode[rspObj.code] || rspObj.msg || errorCode["default"];
+ ElMessage.error(errMsg);
+ }
+ downloadLoadingInstance.close();
+ })
+ .catch((r) => {
+ console.error(r);
+ ElMessage.error("下载文件出现错误,请联系管理员!");
+ downloadLoadingInstance.close();
+ });
}
-
// 新通用下载方法
export function newDownload(url, params, filename, config) {
- downloadLoadingInstance = ElLoading.service({ text: "正在下载数据,请稍候", background: "rgba(0, 0, 0, 0.7)", })
- return service.post(url, JSON.stringify(params), {
- headers: { 'Content-Type': 'application/json' },
- responseType: 'blob',
- ...config
- }).then(async (data) => {
- const isBlob = blobValidate(data);
- if (isBlob) {
- const blob = new Blob([data])
- saveAs(blob, filename)
- } else {
- const resText = await data.text();
- const rspObj = JSON.parse(resText);
- const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
- ElMessage.error(errMsg);
- }
- downloadLoadingInstance.close();
- }).catch((r) => {
- console.error(r)
- ElMessage.error('下载文件出现错误,请联系管理员!')
- downloadLoadingInstance.close();
- })
+ downloadLoadingInstance = ElLoading.service({
+ text: "正在下载数据,请稍候",
+ background: "rgba(0, 0, 0, 0.7)",
+ });
+ return service
+ .post(url, JSON.stringify(params), {
+ headers: { "Content-Type": "application/json" },
+ responseType: "blob",
+ ...config,
+ })
+ .then(async (data) => {
+ const isBlob = blobValidate(data);
+ if (isBlob) {
+ const blob = new Blob([data]);
+ saveAs(blob, filename);
+ } else {
+ const resText = await data.text();
+ const rspObj = JSON.parse(resText);
+ const errMsg =
+ errorCode[rspObj.code] || rspObj.msg || errorCode["default"];
+ ElMessage.error(errMsg);
+ }
+ downloadLoadingInstance.close();
+ })
+ .catch((r) => {
+ console.error(r);
+ ElMessage.error("下载文件出现错误,请联系管理员!");
+ downloadLoadingInstance.close();
+ });
}
-
-
-export default service
+export default service;
diff --git a/src/utils/socket.ts b/src/utils/socket.ts
new file mode 100644
index 0000000..82c91cf
--- /dev/null
+++ b/src/utils/socket.ts
@@ -0,0 +1,183 @@
+/**
+ * Author: Fu Guobin
+ * Date: 2022/08/02
+ * Last Modified by: Fu Guobin
+ * Last Modified time: 2023/09/21
+ * Copyright:Daniel(Fu Guobin)
+ * Description:websocket方法封装
+ */
+import type { Action } from 'element-plus';
+import { useSessionStorage } from '@vueuse/core';
+import mitt from '@/plugins/bus';
+class WebSocketService {
+ url: string;
+ websocket: WebSocket | null;
+ isInitialized: boolean;
+ isConnected: boolean;
+ heartTimer: number | null;
+ heartbeatInterval: number;
+ reconnectInterval: number;
+ maxReconnectAttempts: number;
+ reconnectAttempts: number;
+ data: any;
+
+ constructor() {
+ this.url = '';
+ this.websocket = null;
+ this.isInitialized = false;
+ this.isConnected = false; //连接状态
+ this.heartTimer = null; //心跳计时
+ this.heartbeatInterval = 30000; // 默认心跳30秒
+ this.reconnectInterval = 10000; // 默认重连10秒
+ this.maxReconnectAttempts = 5; // 默认尝试重连5次
+ this.reconnectAttempts = 0; //重连次数
+ this.data = null;
+ }
+
+ initialize(url: string): void {
+ //初始化
+ console.log('websocket初始化');
+ this.url = url;
+ this.websocket = new WebSocket(url);
+ console.log('readyState1--', this.websocket?.readyState);
+ this.websocket.onopen = e => {
+ console.log('readyState--', this.websocket?.readyState);
+ console.log('websocket onopen--', e);
+ };
+ this.websocket.onopen = this.onOpen.bind(this);
+ this.websocket.onclose = this.onClose.bind(this);
+ this.websocket.onerror = this.onError.bind(this);
+ this.websocket.onmessage = this.onMessage.bind(this);
+ this.isInitialized = true;
+ }
+
+ onOpen(): void {
+ console.log('readyState2--', this.websocket?.readyState);
+ console.log('websocket onOpen');
+ this.isConnected = true; // 连接状态
+ this.reconnectAttempts = 0; // 重置重连次数
+ this.startHeartbeat();
+ }
+
+ onSend(data: any): void {
+ //发送消息处理
+ console.log('websocketSend:', JSON.stringify(data));
+ if (this.isConnected) {
+ this.websocket?.send(JSON.stringify(data));
+ }
+ }
+
+ onMessage(event: MessageEvent): void {
+ //获取消息处理
+ if (event.data != '连接成功') {
+ const response = JSON.parse(event.data);
+ console.log('response:', response);
+ this.data = response;
+ // 处理返回的数据
+ if (response.code === 'datareal') {
+ console.log('table');
+ mitt.emit('tableMessage', response);
+ } else if (response.code === 'alertDev') {
+ console.log('waring');
+ mitt.emit('waringMessage', response);
+ } else if (response.code === 'respMsg') {
+ if (response.data[0].code === -1 || response.data[0].code === 1) {
+ this.close(false);
+ ElMessageBox.alert(response.msg, '提示', {
+ // if you want to disable its autofocus
+ // autofocus: false,
+ confirmButtonText: 'OK',
+ callback: (action: Action) => {
+ localStorage.clear();
+ window.location.href = '/';
+ }
+ });
+ }
+ console.log(response.msg);
+ } else if (response.code === 'notice') {
+ mitt.emit('noticeMessage', response);
+ }
+ }
+ }
+
+ onClose(): void {
+ // 关闭WebSocket连接的处理逻辑
+ console.log('websocket关闭');
+ // this.isInitialized = status === false ? false : true;
+ this.isConnected = false; //关闭连接
+ this.stopHeartbeat(); //关闭心跳
+ if (this.isInitialized) {
+ console.log('WebSocke尝试重连1');
+ this.tryReconnect();
+ }
+ }
+
+ onError(error: Event): void {
+ // 错误处理的逻辑
+ console.error('WebSocket连接错误:', error);
+ ElNotification({
+ message: 'webSocket连接发生错误,正在尝试重连…',
+ type: 'error'
+ });
+ this.isConnected = false; //关闭连接
+ this.stopHeartbeat(); //关闭心跳
+ if (this.isInitialized) {
+ console.log('WebSocke尝试重连2');
+ this.tryReconnect();
+ }
+ }
+
+ tryReconnect() {
+ //尝试重连
+ console.log('WebSocket尝试重连:', this.reconnectAttempts);
+ if (this.reconnectAttempts < this.maxReconnectAttempts) {
+ setTimeout(() => {
+ this.reconnectAttempts++;
+ this.initialize(this.url);
+ }, this.reconnectInterval);
+ } else {
+ this.close(false);
+ }
+ }
+
+ startHeartbeat() {
+ // 发送心跳
+ console.log('websocket发送心跳');
+ this.heartTimer = setInterval(() => {
+ console.log('websocket心跳计时--', this.heartTimer);
+ if (this.websocket?.readyState === WebSocket.OPEN) {
+ const userStorageInfo = sessionStorage.getItem('userInfo');
+ const userInfo = JSON.parse(userStorageInfo === null ? '' : userStorageInfo);
+ const hearData = {
+ code: 'heart',
+ data: {
+ username: userInfo.userName
+ }
+ };
+ console.log(hearData);
+ this.websocket.send(JSON.stringify(hearData)); //心跳消息
+ }
+ }, this.heartbeatInterval);
+ }
+
+ stopHeartbeat() {
+ // 停止心跳
+ console.log('websocket停止心跳');
+ if (this.heartTimer != null) {
+ clearInterval(this.heartTimer);
+ this.heartTimer = null;
+ }
+ console.log('websocket停止心跳--', this.heartTimer);
+ }
+
+ close(status: any): void {
+ console.log('close--', status);
+ this.isInitialized = status;
+ this.websocket?.close();
+ console.log('websocket连接已关闭');
+ }
+}
+
+const webSocketService = new WebSocketService();
+
+export default webSocketService;
diff --git a/src/utils/storage.ts b/src/utils/storage.ts
new file mode 100644
index 0000000..05f76d6
--- /dev/null
+++ b/src/utils/storage.ts
@@ -0,0 +1,108 @@
+/**
+ * * 存储本地会话数据
+ * @param k 键名
+ * @param v 键值(无需stringiiy)
+ * @returns RemovableRef
+ */
+export const setLocalStorage = (k: string, v: T) => {
+ try {
+ window.localStorage.setItem(k, JSON.stringify(v))
+ } catch (error) {
+ return false
+ }
+}
+
+/**
+ * * 获取本地会话数据
+ * @param k 键名
+ * @returns any
+ */
+export const getLocalStorage = (k: string) => {
+ const item = window.localStorage.getItem(k)
+ try {
+ return item ? JSON.parse(item) : item
+ } catch (err) {
+ return item
+ }
+}
+
+/**
+ * * 清除本地会话数据
+ * @param name
+ */
+export const clearLocalStorage = (name: string) => {
+ window.localStorage.removeItem(name)
+}
+
+/**
+ * * 存储临时会话数据
+ * @param k 键名
+ * @param v 键值
+ * @returns RemovableRef
+ */
+export const setSessionStorage = (k: string, v: T) => {
+ try {
+ window.sessionStorage.setItem(k, JSON.stringify(v))
+ } catch (error) {
+ return false
+ }
+}
+
+/**
+ * * 获取临时会话数据
+ * @returns any
+ */
+export const getSessionStorage: (k: string) => any = (k: string) => {
+ const item = window.sessionStorage.getItem(k)
+ try {
+ return item ? JSON.parse(item) : item
+ } catch (err) {
+ return item
+ }
+}
+
+/**
+ * * 清除本地会话数据
+ * @param name
+ */
+export const clearSessioStorage = (name: string) => {
+ window.sessionStorage.removeItem(name)
+}
+
+/**
+ * * 设置 cookie
+ * @param name 键名
+ * @param cvalue 键值
+ * @param exdays 过期时间
+ */
+export const setCookie = (name: string, cvalue: string, exdays: number) => {
+ const d = new Date();
+ d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
+ const expires = "expires=" + d.toUTCString();
+ document.cookie = name + "=" + cvalue + "; " + expires;
+}
+
+/**
+ * * 获取 cookie
+ * @param cname 键名
+ * @returns string
+ */
+export const getCookie = (cname: string) => {
+ const name = cname + "=";
+ const ca = document.cookie.split(';');
+ for (let i = 0; i < ca.length; i++) {
+ let c = ca[i];
+ while (c.charAt(0) == ' ') c = c.substring(1);
+ if (c.indexOf(name) != -1) return c.substring(name.length, c.length);
+ }
+ return "";
+}
+
+/**
+ * * 清除 cookie
+ * @param name 键名
+ * @returns string
+ */
+export const clearCookie = (name: string) => {
+ setCookie(name, "", -1);
+}
\ No newline at end of file
diff --git a/src/utils/useStorage.ts b/src/utils/useStorage.ts
new file mode 100644
index 0000000..f609033
--- /dev/null
+++ b/src/utils/useStorage.ts
@@ -0,0 +1,110 @@
+/**
+ * Author: Fu Guobin
+ * Date: 2022/08/22
+ * Last Modified by: Fu Guobin
+ * Last Modified time: 2023/08/28
+ * Copyright:Daniel(Fu Guobin)
+ * Description:storage方法封装
+ */
+
+import { ref, computed } from 'vue';
+
+type StorageData = {
+ key: string;
+ value: any;
+};
+
+type StorageType = 'localStorage' | 'sessionStorage';
+
+const getItem = (key: string, storageType: StorageType): any => {
+ try {
+ const storage = getStorage(storageType);
+ const item = storage.getItem(key);
+ if (item) {
+ return JSON.parse(item);
+ }
+ return null;
+ } catch (error) {
+ console.error(`Error getting item from ${storageType}: ${error}`);
+ return null;
+ }
+};
+
+const setItem = (key: string, value: any, storageType: StorageType): void => {
+ try {
+ const storage = getStorage(storageType);
+ const stringValue = JSON.stringify(value);
+ storage.setItem(key, stringValue);
+ } catch (error) {
+ console.error(`Error setting item in ${storageType}: ${error}`);
+ }
+};
+
+const removeItem = (key: string, storageType: StorageType): void => {
+ try {
+ const storage = getStorage(storageType);
+ storage.removeItem(key);
+ } catch (error) {
+ console.error(`Error removing item from ${storageType}: ${error}`);
+ }
+};
+
+const clearStorage = (storageType: StorageType): void => {
+ try {
+ const storage = getStorage(storageType);
+ storage.clear();
+ } catch (error) {
+ console.error(`Error clearing ${storageType}: ${error}`);
+ }
+};
+
+const getStorage = (storageType: StorageType): Storage => {
+ return storageType === 'localStorage' ? localStorage : sessionStorage;
+};
+
+const storageData = ref>([]);
+
+const initializeStorage = (storageType: StorageType): void => {
+ const storage = getStorage(storageType);
+ const keys = Object.keys(storage);
+
+ storageData.value = keys.map(key => ({
+ key,
+ value: getItem(key, storageType)
+ }));
+};
+
+const useStorage = (storageType: StorageType) => {
+ const getUseStorage = (key: string) => {
+ getItem(key, storageType);
+ // return computed(() => storageData.value);
+ };
+
+ const setUseStorage = (key: string, value: any) => {
+ setItem(key, value, storageType);
+ const newData = { key, value };
+ storageData.value.push(newData);
+ };
+
+ const removeUseStorage = (key: string) => {
+ removeItem(key, storageType);
+ const index = storageData.value.findIndex(item => item.key === key);
+ if (index !== -1) {
+ storageData.value.splice(index, 1);
+ }
+ };
+
+ const clearUseStorage = () => {
+ clearStorage(storageType);
+ storageData.value = [];
+ };
+
+ return {
+ getUseStorage,
+ setUseStorage,
+ removeUseStorage,
+ clearUseStorage
+ };
+};
+
+export default useStorage;
diff --git a/src/views/login.vue b/src/views/login.vue
index 14af785..0688c7a 100644
--- a/src/views/login.vue
+++ b/src/views/login.vue
@@ -1,6 +1,11 @@
-
+
联美运营驾驶舱管理系统
-
+
@@ -22,7 +29,9 @@
placeholder="密码"
@keyup.enter="handleLogin"
>
-
+
@@ -34,26 +43,34 @@
style="width: 63%"
@keyup.enter="handleLogin"
>
-
+
-
+
- 记住密码
-
+ 记住密码
+
登 录
登 录 中...
-
-
立即注册
+
+ 立即注册
@@ -68,24 +85,24 @@
import { getCodeImg } from "@/api/login";
import Cookies from "js-cookie";
import { encrypt, decrypt } from "@/utils/jsencrypt";
-import useUserStore from '@/store/modules/user'
+import useUserStore from "@/store/modules/user";
-const userStore = useUserStore()
+const userStore = useUserStore();
const router = useRouter();
const { proxy } = getCurrentInstance();
const loginForm = ref({
- username: "admin",
- password: "admin123",
+ username: "user01",
+ password: "123456",
rememberMe: false,
code: "",
- uuid: ""
+ uuid: "",
});
const loginRules = {
username: [{ required: true, trigger: "blur", message: "请输入您的账号" }],
password: [{ required: true, trigger: "blur", message: "请输入您的密码" }],
- code: [{ required: true, trigger: "change", message: "请输入验证码" }]
+ code: [{ required: true, trigger: "change", message: "请输入验证码" }],
};
const codeUrl = ref("");
@@ -97,13 +114,15 @@ const register = ref(false);
const redirect = ref(undefined);
function handleLogin() {
- proxy.$refs.loginRef.validate(valid => {
+ proxy.$refs.loginRef.validate((valid) => {
if (valid) {
loading.value = true;
// 勾选了需要记住密码设置在 cookie 中设置记住用户名和密码
if (loginForm.value.rememberMe) {
Cookies.set("username", loginForm.value.username, { expires: 30 });
- Cookies.set("password", encrypt(loginForm.value.password), { expires: 30 });
+ Cookies.set("password", encrypt(loginForm.value.password), {
+ expires: 30,
+ });
Cookies.set("rememberMe", loginForm.value.rememberMe, { expires: 30 });
} else {
// 否则移除
@@ -112,22 +131,26 @@ function handleLogin() {
Cookies.remove("rememberMe");
}
// 调用action的登录方法
- userStore.login(loginForm.value).then(() => {
- router.push({ path: redirect.value || "/" });
- }).catch(() => {
- loading.value = false;
- // 重新获取验证码
- if (captchaEnabled.value) {
- getCode();
- }
- });
+ userStore
+ .login(loginForm.value)
+ .then(() => {
+ router.push({ path: redirect.value || "/" });
+ })
+ .catch(() => {
+ loading.value = false;
+ // 重新获取验证码
+ if (captchaEnabled.value) {
+ getCode();
+ }
+ });
}
});
}
function getCode() {
- getCodeImg().then(res => {
- captchaEnabled.value = res.captchaEnabled === undefined ? true : res.captchaEnabled;
+ getCodeImg().then((res) => {
+ captchaEnabled.value =
+ res.captchaEnabled === undefined ? true : res.captchaEnabled;
if (captchaEnabled.value) {
codeUrl.value = "data:image/gif;base64," + res.img;
loginForm.value.uuid = res.uuid;
@@ -141,8 +164,9 @@ function getCookie() {
const rememberMe = Cookies.get("rememberMe");
loginForm.value = {
username: username === undefined ? loginForm.value.username : username,
- password: password === undefined ? loginForm.value.password : decrypt(password),
- rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
+ password:
+ password === undefined ? loginForm.value.password : decrypt(password),
+ rememberMe: rememberMe === undefined ? false : Boolean(rememberMe),
};
}
@@ -150,7 +174,7 @@ getCode();
getCookie();
-
diff --git a/src/views/monitoring/station/components/boxPlot - 副本.vue b/src/views/monitoring/station/components/boxPlot - 副本.vue
new file mode 100644
index 0000000..811fa4e
--- /dev/null
+++ b/src/views/monitoring/station/components/boxPlot - 副本.vue
@@ -0,0 +1,154 @@
+
+
+
+
+
diff --git a/src/views/monitoring/station/components/charts.vue b/src/views/monitoring/station/components/charts.vue
new file mode 100644
index 0000000..5f004bc
--- /dev/null
+++ b/src/views/monitoring/station/components/charts.vue
@@ -0,0 +1,142 @@
+
+
+
+
+
diff --git a/src/views/monitoring/station/components/header.vue b/src/views/monitoring/station/components/header.vue
new file mode 100644
index 0000000..20154b5
--- /dev/null
+++ b/src/views/monitoring/station/components/header.vue
@@ -0,0 +1,377 @@
+
+
+
+
+
+
diff --git a/src/views/monitoring/station/components/hxPress.vue b/src/views/monitoring/station/components/hxPress.vue
new file mode 100644
index 0000000..f0bc422
--- /dev/null
+++ b/src/views/monitoring/station/components/hxPress.vue
@@ -0,0 +1,276 @@
+
+
+
+
+
diff --git a/src/views/monitoring/station/components/hxTemp.vue b/src/views/monitoring/station/components/hxTemp.vue
new file mode 100644
index 0000000..d405f49
--- /dev/null
+++ b/src/views/monitoring/station/components/hxTemp.vue
@@ -0,0 +1,276 @@
+
+
+
+
+
diff --git a/src/views/monitoring/station/components/line.vue b/src/views/monitoring/station/components/line.vue
new file mode 100644
index 0000000..f03a8a7
--- /dev/null
+++ b/src/views/monitoring/station/components/line.vue
@@ -0,0 +1,153 @@
+
+
+
+
+
diff --git a/src/views/monitoring/station/components/priPress.vue b/src/views/monitoring/station/components/priPress.vue
new file mode 100644
index 0000000..5a86565
--- /dev/null
+++ b/src/views/monitoring/station/components/priPress.vue
@@ -0,0 +1,266 @@
+
+
+
+
+
diff --git a/src/views/monitoring/station/components/priTemp.vue b/src/views/monitoring/station/components/priTemp.vue
new file mode 100644
index 0000000..cbc811a
--- /dev/null
+++ b/src/views/monitoring/station/components/priTemp.vue
@@ -0,0 +1,217 @@
+
+
+
+
+
diff --git a/src/views/monitoring/station/components/secPress.vue b/src/views/monitoring/station/components/secPress.vue
new file mode 100644
index 0000000..e2662ae
--- /dev/null
+++ b/src/views/monitoring/station/components/secPress.vue
@@ -0,0 +1,267 @@
+
+
+
+
+
diff --git a/src/views/monitoring/station/components/secTemp.vue b/src/views/monitoring/station/components/secTemp.vue
new file mode 100644
index 0000000..b0cddfc
--- /dev/null
+++ b/src/views/monitoring/station/components/secTemp.vue
@@ -0,0 +1,267 @@
+
+
+
+
+
diff --git a/src/views/monitoring/station/components/table - 副本.vue b/src/views/monitoring/station/components/table - 副本.vue
new file mode 100644
index 0000000..c0ad83d
--- /dev/null
+++ b/src/views/monitoring/station/components/table - 副本.vue
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/monitoring/station/components/table.vue b/src/views/monitoring/station/components/table.vue
new file mode 100644
index 0000000..7223aaa
--- /dev/null
+++ b/src/views/monitoring/station/components/table.vue
@@ -0,0 +1,312 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/monitoring/station/index.scss b/src/views/monitoring/station/index.scss
new file mode 100644
index 0000000..96c5139
--- /dev/null
+++ b/src/views/monitoring/station/index.scss
@@ -0,0 +1,35 @@
+@import url("@/assets/fonts/font.css");
+.screenContainer {
+ // position: fixed;
+ // left: 50%;
+ // top: 50%;
+ transform-origin: 0 0;
+ transition: 0.3s;
+ color: #fff;
+ font-size: 16px;
+ background-color: #24344e;
+ z-index: 100;
+ .header {
+ position: relative;
+ height: 125px;
+ padding: 21px 40px 0 40px;
+ background-color: #1a2537;
+ border-bottom: 1px solid #47556c;
+ // span {
+ // line-height: 62px;
+ // font-size: 30px;
+ // font-family: 'PangMenZhengDaoBiao';
+ // font-weight: 400;
+ // letter-spacing: 4px;
+ // color: #e8effb;
+ // background: linear-gradient(0deg, #b2ccfc 0%, #ffffff 100%);
+ // background-clip: text;
+ // -webkit-background-clip: text;
+ // -webkit-text-fill-color: transparent;
+ // }
+ }
+
+ .main {
+ padding: 12px 40px 0 40px;
+ }
+}
diff --git a/src/views/monitoring/station/index.vue b/src/views/monitoring/station/index.vue
new file mode 100644
index 0000000..5012708
--- /dev/null
+++ b/src/views/monitoring/station/index.vue
@@ -0,0 +1,80 @@
+
+
+
+
+
diff --git a/src/views/monitoring/statistical/index.scss b/src/views/monitoring/statistical/index.scss
new file mode 100644
index 0000000..9bf92f4
--- /dev/null
+++ b/src/views/monitoring/statistical/index.scss
@@ -0,0 +1,14 @@
+.statisticalContainer {
+ .search {
+ margin-bottom: 15px;
+ .el-form-item--default {
+ margin-bottom: 0;
+ }
+ }
+ .statistical {
+ .statPagination {
+ justify-content: right;
+ margin-top: 15px;
+ }
+ }
+}
diff --git a/src/views/monitoring/statistical/index.vue b/src/views/monitoring/statistical/index.vue
new file mode 100644
index 0000000..27642b0
--- /dev/null
+++ b/src/views/monitoring/statistical/index.vue
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+
+
+ 查询
+ 重置
+
+
+
+
+
+
+
+
+
+
+