diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a547bf3
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000..a7cea0b
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,3 @@
+{
+ "recommendations": ["Vue.volar"]
+}
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..abc0acc
--- /dev/null
+++ b/index.html
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+ 后台管理系统
+
+
+
+
+
+
+
+
+
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..4c61938
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,1562 @@
+{
+ "name": "vue-manage-system",
+ "version": "0.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/parser": {
+ "version": "7.17.10",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz",
+ "integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ=="
+ },
+ "@babel/runtime": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz",
+ "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==",
+ "requires": {
+ "regenerator-runtime": "^0.13.4"
+ }
+ },
+ "@ctrl/tinycolor": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz",
+ "integrity": "sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw=="
+ },
+ "@element-plus/icons-vue": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-1.1.4.tgz",
+ "integrity": "sha512-Iz/nHqdp1sFPmdzRwHkEQQA3lKvoObk8azgABZ81QUOpW9s/lUyQVUSh0tNtEPZXQlKwlSh7SPgoVxzrE0uuVQ=="
+ },
+ "@floating-ui/core": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-0.6.2.tgz",
+ "integrity": "sha512-jktYRmZwmau63adUG3GKOAVCofBXkk55S/zQ94XOorAHhwqFIOFAy1rSp2N0Wp6/tGbe9V3u/ExlGZypyY17rg=="
+ },
+ "@floating-ui/dom": {
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-0.4.5.tgz",
+ "integrity": "sha512-b+prvQgJt8pieaKYMSJBXHxX/DYwdLsAWxKYqnO5dO2V4oo/TYBZJAUQCVNjTWWsrs6o4VDrNcP9+E70HAhJdw==",
+ "requires": {
+ "@floating-ui/core": "^0.6.2"
+ }
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@popperjs/core": {
+ "version": "npm:@sxzz/popperjs-es@2.11.7",
+ "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
+ "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
+ },
+ "@rollup/plugin-node-resolve": {
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz",
+ "integrity": "sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==",
+ "dev": true,
+ "requires": {
+ "@rollup/pluginutils": "^3.1.0",
+ "@types/resolve": "1.17.1",
+ "deepmerge": "^4.2.2",
+ "is-builtin-module": "^3.1.0",
+ "is-module": "^1.0.0",
+ "resolve": "^1.19.0"
+ }
+ },
+ "@rollup/pluginutils": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz",
+ "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==",
+ "dev": true,
+ "requires": {
+ "@types/estree": "0.0.39",
+ "estree-walker": "^1.0.1",
+ "picomatch": "^2.2.2"
+ },
+ "dependencies": {
+ "estree-walker": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz",
+ "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==",
+ "dev": true
+ }
+ }
+ },
+ "@transloadit/prettier-bytes": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/@transloadit/prettier-bytes/-/prettier-bytes-0.0.7.tgz",
+ "integrity": "sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA=="
+ },
+ "@types/estree": {
+ "version": "0.0.39",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
+ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
+ "dev": true
+ },
+ "@types/event-emitter": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@types/event-emitter/-/event-emitter-0.3.3.tgz",
+ "integrity": "sha512-UfnOK1pIxO7P+EgPRZXD9jMpimd8QEFcEZ5R67R1UhGbv4zghU5+NE7U8M8G9H5Jc8FI51rqDWQs6FtUfq2e/Q=="
+ },
+ "@types/lodash": {
+ "version": "4.14.182",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.182.tgz",
+ "integrity": "sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q=="
+ },
+ "@types/lodash-es": {
+ "version": "4.17.6",
+ "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.6.tgz",
+ "integrity": "sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==",
+ "requires": {
+ "@types/lodash": "*"
+ }
+ },
+ "@types/mockjs": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/@types/mockjs/-/mockjs-1.0.6.tgz",
+ "integrity": "sha512-Yu5YlqbYZyqsd6LjO4e8ONJDN9pTSnciHDcRP4teNOh/au2b8helFhgRx+3w8xsTFEnwr9jtfTVJbAx+eYmlHA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "18.7.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.6.tgz",
+ "integrity": "sha512-EdxgKRXgYsNITy5mjjXjVE/CS8YENSdhiagGrLqjG0pvA2owgJ6i4l7wy/PFZGC0B1/H20lWKN7ONVDNYDZm7A==",
+ "dev": true
+ },
+ "@types/resolve": {
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
+ "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@uppy/companion-client": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/@uppy/companion-client/-/companion-client-2.2.2.tgz",
+ "integrity": "sha512-5mTp2iq97/mYSisMaBtFRry6PTgZA6SIL7LePteOV5x0/DxKfrZW3DEiQERJmYpHzy7k8johpm2gHnEKto56Og==",
+ "requires": {
+ "@uppy/utils": "^4.1.2",
+ "namespace-emitter": "^2.0.1"
+ }
+ },
+ "@uppy/core": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/@uppy/core/-/core-2.3.3.tgz",
+ "integrity": "sha512-oTFYZT02dIoUGm8Ar6+Tg/xbL8MliwiPQdiuoCimPBmY19ZhuJm/K4wEYZ6nOFeYsgBWYi1yWfsmdx8LvFVx4g==",
+ "requires": {
+ "@transloadit/prettier-bytes": "0.0.7",
+ "@uppy/store-default": "^2.1.1",
+ "@uppy/utils": "^4.1.2",
+ "lodash.throttle": "^4.1.1",
+ "mime-match": "^1.0.2",
+ "namespace-emitter": "^2.0.1",
+ "nanoid": "^3.1.25",
+ "preact": "^10.5.13"
+ }
+ },
+ "@uppy/store-default": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@uppy/store-default/-/store-default-2.1.1.tgz",
+ "integrity": "sha512-xnpTxvot2SeAwGwbvmJ899ASk5tYXhmZzD/aCFsXePh/v8rNvR2pKlcQUH7cF/y4baUGq3FHO/daKCok/mpKqQ=="
+ },
+ "@uppy/utils": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@uppy/utils/-/utils-4.1.2.tgz",
+ "integrity": "sha512-rl9aKRE4o2mRKVAhYHHf8uV7BoUOQkvDH6yOaJ4tuHJ6HgPkvxVxqUY8L+yKV1hx4mw6OF9hLIzpW/+TLSfyfQ==",
+ "requires": {
+ "lodash.throttle": "^4.1.1"
+ }
+ },
+ "@uppy/xhr-upload": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@uppy/xhr-upload/-/xhr-upload-2.1.3.tgz",
+ "integrity": "sha512-YWOQ6myBVPs+mhNjfdWsQyMRWUlrDLMoaG7nvf/G6Y3GKZf8AyjFDjvvJ49XWQ+DaZOftGkHmF1uh/DBeGivJQ==",
+ "requires": {
+ "@uppy/companion-client": "^2.2.2",
+ "@uppy/utils": "^4.1.2",
+ "nanoid": "^3.1.25"
+ }
+ },
+ "@vitejs/plugin-vue": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.3.2.tgz",
+ "integrity": "sha512-umyypfSHS4kQLdYAnJHhaASq7FRzNCdvcRoQ3uYGNk1/M4a+hXUd7ysN7BLhCrWH6uBokyCkFeUAaFDzSaaSrQ==",
+ "dev": true
+ },
+ "@vue/compiler-core": {
+ "version": "3.2.33",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.33.tgz",
+ "integrity": "sha512-AAmr52ji3Zhk7IKIuigX2osWWsb2nQE5xsdFYjdnmtQ4gymmqXbjLvkSE174+fF3A3kstYrTgGkqgOEbsdLDpw==",
+ "requires": {
+ "@babel/parser": "^7.16.4",
+ "@vue/shared": "3.2.33",
+ "estree-walker": "^2.0.2",
+ "source-map": "^0.6.1"
+ }
+ },
+ "@vue/compiler-dom": {
+ "version": "3.2.33",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.33.tgz",
+ "integrity": "sha512-GhiG1C8X98Xz9QUX/RlA6/kgPBWJkjq0Rq6//5XTAGSYrTMBgcLpP9+CnlUg1TFxnnCVughAG+KZl28XJqw8uQ==",
+ "requires": {
+ "@vue/compiler-core": "3.2.33",
+ "@vue/shared": "3.2.33"
+ }
+ },
+ "@vue/compiler-sfc": {
+ "version": "3.2.33",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.33.tgz",
+ "integrity": "sha512-H8D0WqagCr295pQjUYyO8P3IejM3vEzeCO1apzByAEaAR/WimhMYczHfZVvlCE/9yBaEu/eu9RdiWr0kF8b71Q==",
+ "requires": {
+ "@babel/parser": "^7.16.4",
+ "@vue/compiler-core": "3.2.33",
+ "@vue/compiler-dom": "3.2.33",
+ "@vue/compiler-ssr": "3.2.33",
+ "@vue/reactivity-transform": "3.2.33",
+ "@vue/shared": "3.2.33",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.25.7",
+ "postcss": "^8.1.10",
+ "source-map": "^0.6.1"
+ }
+ },
+ "@vue/compiler-ssr": {
+ "version": "3.2.33",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.33.tgz",
+ "integrity": "sha512-XQh1Xdk3VquDpXsnoCd7JnMoWec9CfAzQDQsaMcSU79OrrO2PNR0ErlIjm/mGq3GmBfkQjzZACV+7GhfRB8xMQ==",
+ "requires": {
+ "@vue/compiler-dom": "3.2.33",
+ "@vue/shared": "3.2.33"
+ }
+ },
+ "@vue/devtools-api": {
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.1.4.tgz",
+ "integrity": "sha512-IiA0SvDrJEgXvVxjNkHPFfDx6SXw0b/TUkqMcDZWNg9fnCAHbTpoo59YfJ9QLFkwa3raau5vSlRVzMSLDnfdtQ=="
+ },
+ "@vue/reactivity": {
+ "version": "3.2.33",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.33.tgz",
+ "integrity": "sha512-62Sq0mp9/0bLmDuxuLD5CIaMG2susFAGARLuZ/5jkU1FCf9EDbwUuF+BO8Ub3Rbodx0ziIecM/NsmyjardBxfQ==",
+ "requires": {
+ "@vue/shared": "3.2.33"
+ }
+ },
+ "@vue/reactivity-transform": {
+ "version": "3.2.33",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.33.tgz",
+ "integrity": "sha512-4UL5KOIvSQb254aqenW4q34qMXbfZcmEsV/yVidLUgvwYQQ/D21bGX3DlgPUGI3c4C+iOnNmDCkIxkILoX/Pyw==",
+ "requires": {
+ "@babel/parser": "^7.16.4",
+ "@vue/compiler-core": "3.2.33",
+ "@vue/shared": "3.2.33",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.25.7"
+ }
+ },
+ "@vue/runtime-core": {
+ "version": "3.2.33",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.33.tgz",
+ "integrity": "sha512-N2D2vfaXsBPhzCV3JsXQa2NECjxP3eXgZlFqKh4tgakp3iX6LCGv76DLlc+IfFZq+TW10Y8QUfeihXOupJ1dGw==",
+ "requires": {
+ "@vue/reactivity": "3.2.33",
+ "@vue/shared": "3.2.33"
+ }
+ },
+ "@vue/runtime-dom": {
+ "version": "3.2.33",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.33.tgz",
+ "integrity": "sha512-LSrJ6W7CZTSUygX5s8aFkraDWlO6K4geOwA3quFF2O+hC3QuAMZt/0Xb7JKE3C4JD4pFwCSO7oCrZmZ0BIJUnw==",
+ "requires": {
+ "@vue/runtime-core": "3.2.33",
+ "@vue/shared": "3.2.33",
+ "csstype": "^2.6.8"
+ }
+ },
+ "@vue/server-renderer": {
+ "version": "3.2.33",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.33.tgz",
+ "integrity": "sha512-4jpJHRD4ORv8PlbYi+/MfP8ec1okz6rybe36MdpkDrGIdEItHEUyaHSKvz+ptNEyQpALmmVfRteHkU9F8vxOew==",
+ "requires": {
+ "@vue/compiler-ssr": "3.2.33",
+ "@vue/shared": "3.2.33"
+ }
+ },
+ "@vue/shared": {
+ "version": "3.2.33",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.33.tgz",
+ "integrity": "sha512-UBc1Pg1T3yZ97vsA2ueER0F6GbJebLHYlEi4ou1H5YL4KWvMOOWwpYo9/QpWq93wxKG6Wo13IY74Hcn/f7c7Bg=="
+ },
+ "@vueuse/core": {
+ "version": "8.4.1",
+ "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-8.4.1.tgz",
+ "integrity": "sha512-YRM2+wZj/XWzch44sgFaRWtTGEZ8xgTsleaGy6cuULIU1q6o9Z/XHDHqofzNXrEqEhN6EtJqM4m8puURFO0nzg==",
+ "requires": {
+ "@vueuse/metadata": "8.4.1",
+ "@vueuse/shared": "8.4.1",
+ "vue-demi": "*"
+ }
+ },
+ "@vueuse/metadata": {
+ "version": "8.4.1",
+ "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-8.4.1.tgz",
+ "integrity": "sha512-OMwadiewrAHgJAgCh5zrbJMXySECB09cnEnIWRicvTWBiqBm14N1t464oeV1fhskRPEBsLSzxQmDoVBAqQh4rQ=="
+ },
+ "@vueuse/shared": {
+ "version": "8.4.1",
+ "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-8.4.1.tgz",
+ "integrity": "sha512-yzWNzvqaTGkc25fNsGkaF3pnMdXDax3EasYgPKlC4/eXSo0TqwG+xLz0Y8t6KN52x/kIHlpSwtry4LXfw7LSBA==",
+ "requires": {
+ "vue-demi": "*"
+ }
+ },
+ "@wangeditor/basic-modules": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@wangeditor/basic-modules/-/basic-modules-1.1.3.tgz",
+ "integrity": "sha512-TGJix4UelO46yAgwI946ctx4lSIJbYBwNvjSJ9Tf8mKr0WMCeLVBV+MV85rXPsfcmWtR4wBNwSg648Z+RbqRUg==",
+ "requires": {
+ "is-url": "^1.2.4"
+ }
+ },
+ "@wangeditor/code-highlight": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@wangeditor/code-highlight/-/code-highlight-1.0.2.tgz",
+ "integrity": "sha512-SCtOcUxjKqIso/LSxGSOaYr3G6MC2En0gNTyHIMCG928T0fo0ufaqp/vIXKQzVL2Y+X/CSAOB2EbrFlgGvr0AQ==",
+ "requires": {
+ "prismjs": "^1.23.0"
+ }
+ },
+ "@wangeditor/core": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/@wangeditor/core/-/core-1.1.11.tgz",
+ "integrity": "sha512-BwHVRJzESnkjKikTc2U2zsbd06l1pSo7qKy5+SpZLudYWrFxmd85VN+5GxM57FodogkNw/k04DFHcFSUfXcaKA==",
+ "requires": {
+ "@types/event-emitter": "^0.3.3",
+ "event-emitter": "^0.3.5",
+ "html-void-elements": "^2.0.0",
+ "i18next": "^20.4.0",
+ "scroll-into-view-if-needed": "^2.2.28",
+ "slate-history": "^0.66.0"
+ }
+ },
+ "@wangeditor/editor": {
+ "version": "5.1.14",
+ "resolved": "https://registry.npmjs.org/@wangeditor/editor/-/editor-5.1.14.tgz",
+ "integrity": "sha512-erILPAkpKldyGi4cEwrOW65v12GhZy2qj2A8kPlypU46lE72Y3XowZxWogN1TI/mqMDR84AHr0QWOvygOV1xwQ==",
+ "requires": {
+ "@uppy/core": "^2.1.1",
+ "@uppy/xhr-upload": "^2.0.3",
+ "@wangeditor/basic-modules": "^1.1.3",
+ "@wangeditor/code-highlight": "^1.0.2",
+ "@wangeditor/core": "^1.1.11",
+ "@wangeditor/list-module": "^1.0.2",
+ "@wangeditor/table-module": "^1.1.1",
+ "@wangeditor/upload-image-module": "^1.0.1",
+ "@wangeditor/video-module": "^1.1.1",
+ "dom7": "^3.0.0",
+ "is-hotkey": "^0.2.0",
+ "lodash.camelcase": "^4.3.0",
+ "lodash.clonedeep": "^4.5.0",
+ "lodash.debounce": "^4.0.8",
+ "lodash.foreach": "^4.5.0",
+ "lodash.isequal": "^4.5.0",
+ "lodash.throttle": "^4.1.1",
+ "lodash.toarray": "^4.4.0",
+ "nanoid": "^3.2.0",
+ "slate": "^0.72.0",
+ "snabbdom": "^3.1.0"
+ }
+ },
+ "@wangeditor/editor-for-vue": {
+ "version": "5.1.12",
+ "resolved": "https://registry.npmjs.org/@wangeditor/editor-for-vue/-/editor-for-vue-5.1.12.tgz",
+ "integrity": "sha512-0Ds3D8I+xnpNWezAeO7HmPRgTfUxHLMd9JKcIw+QzvSmhC5xUHbpCcLU+KLmeBKTR/zffnS5GQo6qi3GhTMJWQ=="
+ },
+ "@wangeditor/list-module": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@wangeditor/list-module/-/list-module-1.0.2.tgz",
+ "integrity": "sha512-VfENZEFvsLTiLxN/cj8cibFGy9NVV+/cfATTiLiH9ef+8lgKv8apttXYVlqIAfnlJLLuCk0cIm8c/zH+hbtrZg=="
+ },
+ "@wangeditor/table-module": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@wangeditor/table-module/-/table-module-1.1.1.tgz",
+ "integrity": "sha512-VPjEWQtncS2DsXYXiHUxPSxn2Xhc8GdhG3la7N5YhvxQde1+4N0SZLXeWsYvbGzOq4um5XToq5pktLLbE8G+EA=="
+ },
+ "@wangeditor/upload-image-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@wangeditor/upload-image-module/-/upload-image-module-1.0.1.tgz",
+ "integrity": "sha512-vgUV4ENttTITblqtVuzleIq732OmzmzzgrIvX6b3GRGPSw5u8glJ/87tOEhvHjHECc4oFo18B7xzJ1GpBj79/w=="
+ },
+ "@wangeditor/video-module": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@wangeditor/video-module/-/video-module-1.1.1.tgz",
+ "integrity": "sha512-6gzpS5cnJihW2T0HFjqmbv6v8ouyaeMUjdM2X8BPohwD74p1ov00dCmRt5QekNTyYSmRHK0ASkUMOvRGqaDxMg=="
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "dev": true,
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "async-validator": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.1.1.tgz",
+ "integrity": "sha512-p4DO/JXwjs8klJyJL8Q2oM4ks5fUTze/h5k10oPPKMiLe1fj3G1QMzPHNmN1Py4ycOk7WlO2DcGXv1qiESJCZA=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ },
+ "axios": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
+ "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
+ "requires": {
+ "follow-redirects": "^1.14.9",
+ "form-data": "^4.0.0"
+ }
+ },
+ "binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "dev": true
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "builtin-modules": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
+ "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "dev": true,
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-9.3.0.tgz",
+ "integrity": "sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw=="
+ },
+ "compute-scroll-into-view": {
+ "version": "1.0.17",
+ "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.17.tgz",
+ "integrity": "sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg=="
+ },
+ "connect": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz",
+ "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "finalhandler": "1.1.2",
+ "parseurl": "~1.3.3",
+ "utils-merge": "1.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "csstype": {
+ "version": "2.6.20",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz",
+ "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA=="
+ },
+ "d": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
+ "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
+ "requires": {
+ "es5-ext": "^0.10.50",
+ "type": "^1.0.1"
+ }
+ },
+ "dayjs": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.1.tgz",
+ "integrity": "sha512-ER7EjqVAMkRRsxNCC5YqJ9d9VQYuWdGt7aiH2qA5R5wt8ZmWaP2dLUSIK6y/kVzLMlmh1Tvu5xUf4M/wdGJ5KA=="
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "deepmerge": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+ "dev": true
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+ },
+ "dom7": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom7/-/dom7-3.0.0.tgz",
+ "integrity": "sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==",
+ "requires": {
+ "ssr-window": "^3.0.0-alpha.1"
+ }
+ },
+ "driver.js": {
+ "version": "0.9.8",
+ "resolved": "https://registry.npmjs.org/driver.js/-/driver.js-0.9.8.tgz",
+ "integrity": "sha512-bczjyKdX6XmFyCDkwtRmlaORDwfBk1xXmRO0CAe5VwNQTM98aWaG2LAIiIdTe53iV/B7W5lXlIy2xYtf0JRb7Q=="
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+ "dev": true
+ },
+ "element-plus": {
+ "version": "2.1.11",
+ "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.1.11.tgz",
+ "integrity": "sha512-s4X0I8s787tv+9UdekBC1g7v42Fj4bucPAmu03EjbgrGrV7BJvkoBGuK52lNfu4yC76bl6Uyjesd5Fu8CMakSw==",
+ "requires": {
+ "@ctrl/tinycolor": "^3.4.1",
+ "@element-plus/icons-vue": "^1.1.4",
+ "@floating-ui/dom": "^0.4.5",
+ "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.6",
+ "@types/lodash": "^4.14.182",
+ "@types/lodash-es": "^4.17.6",
+ "@vueuse/core": "^8.2.6",
+ "async-validator": "^4.0.7",
+ "dayjs": "^1.11.1",
+ "escape-html": "^1.0.3",
+ "lodash": "^4.17.21",
+ "lodash-es": "^4.17.21",
+ "lodash-unified": "^1.0.2",
+ "memoize-one": "^6.0.0",
+ "normalize-wheel-es": "^1.1.2"
+ }
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "dev": true
+ },
+ "es5-ext": {
+ "version": "0.10.62",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz",
+ "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==",
+ "requires": {
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.3",
+ "next-tick": "^1.1.0"
+ }
+ },
+ "es6-iterator": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "es6-symbol": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
+ "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
+ "requires": {
+ "d": "^1.0.1",
+ "ext": "^1.1.2"
+ }
+ },
+ "esbuild": {
+ "version": "0.14.38",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.38.tgz",
+ "integrity": "sha512-12fzJ0fsm7gVZX1YQ1InkOE5f9Tl7cgf6JPYXRJtPIoE0zkWAbHdPHVPPaLi9tYAcEBqheGzqLn/3RdTOyBfcA==",
+ "dev": true,
+ "requires": {
+ "esbuild-android-64": "0.14.38",
+ "esbuild-android-arm64": "0.14.38",
+ "esbuild-darwin-64": "0.14.38",
+ "esbuild-darwin-arm64": "0.14.38",
+ "esbuild-freebsd-64": "0.14.38",
+ "esbuild-freebsd-arm64": "0.14.38",
+ "esbuild-linux-32": "0.14.38",
+ "esbuild-linux-64": "0.14.38",
+ "esbuild-linux-arm": "0.14.38",
+ "esbuild-linux-arm64": "0.14.38",
+ "esbuild-linux-mips64le": "0.14.38",
+ "esbuild-linux-ppc64le": "0.14.38",
+ "esbuild-linux-riscv64": "0.14.38",
+ "esbuild-linux-s390x": "0.14.38",
+ "esbuild-netbsd-64": "0.14.38",
+ "esbuild-openbsd-64": "0.14.38",
+ "esbuild-sunos-64": "0.14.38",
+ "esbuild-windows-32": "0.14.38",
+ "esbuild-windows-64": "0.14.38",
+ "esbuild-windows-arm64": "0.14.38"
+ }
+ },
+ "esbuild-android-64": {
+ "version": "0.14.38",
+ "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.38.tgz",
+ "integrity": "sha512-aRFxR3scRKkbmNuGAK+Gee3+yFxkTJO/cx83Dkyzo4CnQl/2zVSurtG6+G86EQIZ+w+VYngVyK7P3HyTBKu3nw==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-android-arm64": {
+ "version": "0.14.38",
+ "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.38.tgz",
+ "integrity": "sha512-L2NgQRWuHFI89IIZIlpAcINy9FvBk6xFVZ7xGdOwIm8VyhX1vNCEqUJO3DPSSy945Gzdg98cxtNt8Grv1CsyhA==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-darwin-64": {
+ "version": "0.14.38",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.38.tgz",
+ "integrity": "sha512-5JJvgXkX87Pd1Og0u/NJuO7TSqAikAcQQ74gyJ87bqWRVeouky84ICoV4sN6VV53aTW+NE87qLdGY4QA2S7KNA==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-darwin-arm64": {
+ "version": "0.14.38",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.38.tgz",
+ "integrity": "sha512-eqF+OejMI3mC5Dlo9Kdq/Ilbki9sQBw3QlHW3wjLmsLh+quNfHmGMp3Ly1eWm981iGBMdbtSS9+LRvR2T8B3eQ==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-freebsd-64": {
+ "version": "0.14.38",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.38.tgz",
+ "integrity": "sha512-epnPbhZUt93xV5cgeY36ZxPXDsQeO55DppzsIgWM8vgiG/Rz+qYDLmh5ts3e+Ln1wA9dQ+nZmVHw+RjaW3I5Ig==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-freebsd-arm64": {
+ "version": "0.14.38",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.38.tgz",
+ "integrity": "sha512-/9icXUYJWherhk+y5fjPI5yNUdFPtXHQlwP7/K/zg8t8lQdHVj20SqU9/udQmeUo5pDFHMYzcEFfJqgOVeKNNQ==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-32": {
+ "version": "0.14.38",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.38.tgz",
+ "integrity": "sha512-QfgfeNHRFvr2XeHFzP8kOZVnal3QvST3A0cgq32ZrHjSMFTdgXhMhmWdKzRXP/PKcfv3e2OW9tT9PpcjNvaq6g==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-64": {
+ "version": "0.14.38",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.38.tgz",
+ "integrity": "sha512-uuZHNmqcs+Bj1qiW9k/HZU3FtIHmYiuxZ/6Aa+/KHb/pFKr7R3aVqvxlAudYI9Fw3St0VCPfv7QBpUITSmBR1Q==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-arm": {
+ "version": "0.14.38",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.38.tgz",
+ "integrity": "sha512-FiFvQe8J3VKTDXG01JbvoVRXQ0x6UZwyrU4IaLBZeq39Bsbatd94Fuc3F1RGqPF5RbIWW7RvkVQjn79ejzysnA==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-arm64": {
+ "version": "0.14.38",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.38.tgz",
+ "integrity": "sha512-HlMGZTEsBrXrivr64eZ/EO0NQM8H8DuSENRok9d+Jtvq8hOLzrxfsAT9U94K3KOGk2XgCmkaI2KD8hX7F97lvA==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-mips64le": {
+ "version": "0.14.38",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.38.tgz",
+ "integrity": "sha512-qd1dLf2v7QBiI5wwfil9j0HG/5YMFBAmMVmdeokbNAMbcg49p25t6IlJFXAeLzogv1AvgaXRXvgFNhScYEUXGQ==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-ppc64le": {
+ "version": "0.14.38",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.38.tgz",
+ "integrity": "sha512-mnbEm7o69gTl60jSuK+nn+pRsRHGtDPfzhrqEUXyCl7CTOCLtWN2bhK8bgsdp6J/2NyS/wHBjs1x8aBWwP2X9Q==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-riscv64": {
+ "version": "0.14.38",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.38.tgz",
+ "integrity": "sha512-+p6YKYbuV72uikChRk14FSyNJZ4WfYkffj6Af0/Tw63/6TJX6TnIKE+6D3xtEc7DeDth1fjUOEqm+ApKFXbbVQ==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-s390x": {
+ "version": "0.14.38",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.38.tgz",
+ "integrity": "sha512-0zUsiDkGJiMHxBQ7JDU8jbaanUY975CdOW1YDrurjrM0vWHfjv9tLQsW9GSyEb/heSK1L5gaweRjzfUVBFoybQ==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-netbsd-64": {
+ "version": "0.14.38",
+ "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.38.tgz",
+ "integrity": "sha512-cljBAApVwkpnJZfnRVThpRBGzCi+a+V9Ofb1fVkKhtrPLDYlHLrSYGtmnoTVWDQdU516qYI8+wOgcGZ4XIZh0Q==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-openbsd-64": {
+ "version": "0.14.38",
+ "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.38.tgz",
+ "integrity": "sha512-CDswYr2PWPGEPpLDUO50mL3WO/07EMjnZDNKpmaxUPsrW+kVM3LoAqr/CE8UbzugpEiflYqJsGPLirThRB18IQ==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-sunos-64": {
+ "version": "0.14.38",
+ "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.38.tgz",
+ "integrity": "sha512-2mfIoYW58gKcC3bck0j7lD3RZkqYA7MmujFYmSn9l6TiIcAMpuEvqksO+ntBgbLep/eyjpgdplF7b+4T9VJGOA==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-windows-32": {
+ "version": "0.14.38",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.38.tgz",
+ "integrity": "sha512-L2BmEeFZATAvU+FJzJiRLFUP+d9RHN+QXpgaOrs2klshoAm1AE6Us4X6fS9k33Uy5SzScn2TpcgecbqJza1Hjw==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-windows-64": {
+ "version": "0.14.38",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.38.tgz",
+ "integrity": "sha512-Khy4wVmebnzue8aeSXLC+6clo/hRYeNIm0DyikoEqX+3w3rcvrhzpoix0S+MF9vzh6JFskkIGD7Zx47ODJNyCw==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-windows-arm64": {
+ "version": "0.14.38",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.38.tgz",
+ "integrity": "sha512-k3FGCNmHBkqdJXuJszdWciAH77PukEyDsdIryEHn9cKLQFxzhT39dSumeTuggaQcXY57UlmLGIkklWZo2qzHpw==",
+ "dev": true,
+ "optional": true
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ },
+ "estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+ },
+ "event-emitter": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
+ "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
+ "requires": {
+ "d": "1",
+ "es5-ext": "~0.10.14"
+ }
+ },
+ "ext": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz",
+ "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==",
+ "requires": {
+ "type": "^2.5.0"
+ },
+ "dependencies": {
+ "type": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz",
+ "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw=="
+ }
+ }
+ },
+ "fast-glob": {
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
+ "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ }
+ },
+ "fastq": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+ "dev": true,
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "statuses": "~1.5.0",
+ "unpipe": "~1.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "follow-redirects": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz",
+ "integrity": "sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ=="
+ },
+ "form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "optional": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "html-void-elements": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz",
+ "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A=="
+ },
+ "i18next": {
+ "version": "20.6.1",
+ "resolved": "https://registry.npmjs.org/i18next/-/i18next-20.6.1.tgz",
+ "integrity": "sha512-yCMYTMEJ9ihCwEQQ3phLo7I/Pwycf8uAx+sRHwwk5U9Aui/IZYgQRyMqXafQOw5QQ7DM1Z+WyEXWIqSuJHhG2A==",
+ "requires": {
+ "@babel/runtime": "^7.12.0"
+ }
+ },
+ "immer": {
+ "version": "9.0.15",
+ "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz",
+ "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ=="
+ },
+ "immutable": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz",
+ "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-builtin-module": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.0.tgz",
+ "integrity": "sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw==",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "^3.3.0"
+ }
+ },
+ "is-core-module": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
+ "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-hotkey": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/is-hotkey/-/is-hotkey-0.2.0.tgz",
+ "integrity": "sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw=="
+ },
+ "is-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
+ "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==",
+ "dev": true
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
+ "is-plain-object": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
+ },
+ "is-url": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
+ "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "lodash-es": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
+ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
+ },
+ "lodash-unified": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.2.tgz",
+ "integrity": "sha512-OGbEy+1P+UT26CYi4opY4gebD8cWRDxAT6MAObIVQMiqYdxZr1g3QHWCToVsm31x2NkLS4K3+MC2qInaRMa39g=="
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="
+ },
+ "lodash.clonedeep": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ=="
+ },
+ "lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="
+ },
+ "lodash.foreach": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
+ "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ=="
+ },
+ "lodash.isequal": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+ "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
+ },
+ "lodash.throttle": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
+ "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ=="
+ },
+ "lodash.toarray": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz",
+ "integrity": "sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw=="
+ },
+ "magic-string": {
+ "version": "0.25.9",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
+ "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
+ "requires": {
+ "sourcemap-codec": "^1.4.8"
+ }
+ },
+ "memoize-one": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
+ "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/mime-match/-/mime-match-1.0.2.tgz",
+ "integrity": "sha512-VXp/ugGDVh3eCLOBCiHZMYWQaTNUHv2IJrut+yXA6+JbLPXHglHwfS/5A5L0ll+jkCY7fIzRJcH6OIunF+c6Cg==",
+ "requires": {
+ "wildcard": "^1.1.0"
+ }
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "mockjs": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mockjs/-/mockjs-1.1.0.tgz",
+ "integrity": "sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ==",
+ "requires": {
+ "commander": "*"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
+ },
+ "namespace-emitter": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/namespace-emitter/-/namespace-emitter-2.0.1.tgz",
+ "integrity": "sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g=="
+ },
+ "nanoid": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
+ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw=="
+ },
+ "next-tick": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
+ "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ },
+ "normalize-wheel-es": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.1.2.tgz",
+ "integrity": "sha512-scX83plWJXYH1J4+BhAuIHadROzxX0UBF3+HuZNY2Ks8BciE7tSTQ+5JhTsvzjaO0/EJdm4JBGrfObKxFf3Png=="
+ },
+ "nprogress": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz",
+ "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E="
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz",
+ "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==",
+ "dev": true
+ },
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true
+ },
+ "postcss": {
+ "version": "8.4.13",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.13.tgz",
+ "integrity": "sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==",
+ "requires": {
+ "nanoid": "^3.3.3",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ }
+ },
+ "preact": {
+ "version": "10.10.4",
+ "resolved": "https://registry.npmjs.org/preact/-/preact-10.10.4.tgz",
+ "integrity": "sha512-3itXRadRHCZ09T5zdFg2SmgwZm7RBAGznA9W74Qwsb/Ri7SpjgGmICvwSRXFgYlXtlgJMDZqrIGP/4z53ZStZw=="
+ },
+ "prismjs": {
+ "version": "1.28.0",
+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.28.0.tgz",
+ "integrity": "sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw=="
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true
+ },
+ "readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.13.9",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
+ "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
+ },
+ "resolve": {
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
+ "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
+ "dev": true,
+ "requires": {
+ "is-core-module": "^2.8.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true
+ },
+ "rollup": {
+ "version": "2.72.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.72.0.tgz",
+ "integrity": "sha512-KqtR2YcO35/KKijg4nx4STO3569aqCUeGRkKWnJ6r+AvBBrVY9L4pmf4NHVrQr4mTOq6msbohflxr2kpihhaOA==",
+ "dev": true,
+ "requires": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "sass": {
+ "version": "1.51.0",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.51.0.tgz",
+ "integrity": "sha512-haGdpTgywJTvHC2b91GSq+clTKGbtkkZmVAb82jZQN/wTy6qs8DdFm2lhEQbEwrY0QDRgSQ3xDurqM977C3noA==",
+ "dev": true,
+ "requires": {
+ "chokidar": ">=3.0.0 <4.0.0",
+ "immutable": "^4.0.0",
+ "source-map-js": ">=0.6.2 <2.0.0"
+ }
+ },
+ "screenfull": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-6.0.1.tgz",
+ "integrity": "sha512-yzQW+j4zMUBQC51xxWaoDYjxOtl8Kn+xvue3p6v/fv2pIi1jH4AldgVLU8TBfFVgH2x3VXlf3+YiA/AYIPlaew=="
+ },
+ "scroll-into-view-if-needed": {
+ "version": "2.2.29",
+ "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.29.tgz",
+ "integrity": "sha512-hxpAR6AN+Gh53AdAimHM6C8oTN1ppwVZITihix+WqalywBeFcQ6LdQP5ABNl26nX8GTEL7VT+b8lKpdqq65wXg==",
+ "requires": {
+ "compute-scroll-into-view": "^1.0.17"
+ }
+ },
+ "slate": {
+ "version": "0.72.8",
+ "resolved": "https://registry.npmjs.org/slate/-/slate-0.72.8.tgz",
+ "integrity": "sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw==",
+ "requires": {
+ "immer": "^9.0.6",
+ "is-plain-object": "^5.0.0",
+ "tiny-warning": "^1.0.3"
+ }
+ },
+ "slate-history": {
+ "version": "0.66.0",
+ "resolved": "https://registry.npmjs.org/slate-history/-/slate-history-0.66.0.tgz",
+ "integrity": "sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng==",
+ "requires": {
+ "is-plain-object": "^5.0.0"
+ }
+ },
+ "snabbdom": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/snabbdom/-/snabbdom-3.5.1.tgz",
+ "integrity": "sha512-wHMNIOjkm/YNE5EM3RCbr/+DVgPg6AqQAX1eOxO46zYNvCXjKP5Y865tqQj3EXnaMBjkxmQA5jFuDpDK/dbfiA=="
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
+ },
+ "sourcemap-codec": {
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="
+ },
+ "ssr-window": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-3.0.0.tgz",
+ "integrity": "sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA=="
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true
+ },
+ "tiny-warning": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
+ "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "type": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
+ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "dev": true
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+ "dev": true
+ },
+ "vite": {
+ "version": "2.9.8",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.8.tgz",
+ "integrity": "sha512-zsBGwn5UT3YS0NLSJ7hnR54+vUKfgzMUh/Z9CxF1YKEBVIe213+63jrFLmZphgGI5zXwQCSmqIdbPuE8NJywPw==",
+ "dev": true,
+ "requires": {
+ "esbuild": "^0.14.27",
+ "fsevents": "~2.3.2",
+ "postcss": "^8.4.13",
+ "resolve": "^1.22.0",
+ "rollup": "^2.59.0"
+ }
+ },
+ "vite-plugin-mock": {
+ "version": "2.9.6",
+ "resolved": "https://registry.npmjs.org/vite-plugin-mock/-/vite-plugin-mock-2.9.6.tgz",
+ "integrity": "sha512-/Rm59oPppe/ncbkSrUuAxIQihlI2YcBmnbR4ST1RA2VzM1C0tEQc1KlbQvnUGhXECAGTaQN2JyasiwXP6EtKgg==",
+ "dev": true,
+ "requires": {
+ "@rollup/plugin-node-resolve": "^13.0.4",
+ "@types/mockjs": "^1.0.4",
+ "chalk": "^4.1.2",
+ "chokidar": "^3.5.2",
+ "connect": "^3.7.0",
+ "debug": "^4.3.2",
+ "esbuild": "0.11.3",
+ "fast-glob": "^3.2.7",
+ "path-to-regexp": "^6.2.0"
+ },
+ "dependencies": {
+ "esbuild": {
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.3.tgz",
+ "integrity": "sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==",
+ "dev": true
+ }
+ }
+ },
+ "vue": {
+ "version": "3.2.33",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.33.tgz",
+ "integrity": "sha512-si1ExAlDUrLSIg/V7D/GgA4twJwfsfgG+t9w10z38HhL/HA07132pUQ2KuwAo8qbCyMJ9e6OqrmWrOCr+jW7ZQ==",
+ "requires": {
+ "@vue/compiler-dom": "3.2.33",
+ "@vue/compiler-sfc": "3.2.33",
+ "@vue/runtime-dom": "3.2.33",
+ "@vue/server-renderer": "3.2.33",
+ "@vue/shared": "3.2.33"
+ }
+ },
+ "vue-cli-plugin-style-resources-loader": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmmirror.com/vue-cli-plugin-style-resources-loader/-/vue-cli-plugin-style-resources-loader-0.1.5.tgz",
+ "integrity": "sha512-LluhjWTZmpGl3tiXg51EciF+T70IN/9t6UvfmgluJBqxbrb6OV9i7L5lTd+OKtcTeghDkhcBmYhtTxxU4w/8sQ==",
+ "dev": true
+ },
+ "vue-demi": {
+ "version": "0.12.5",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.12.5.tgz",
+ "integrity": "sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q=="
+ },
+ "vue-router": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.0.13.tgz",
+ "integrity": "sha512-LmXrC+BkDRLak+d5xTMgUYraT3Nj0H/vCbP+7usGvIl9Viqd1UP6AsP0i69pSbn9O0dXK/xCdp4yPw21HqV9Jw==",
+ "requires": {
+ "@vue/devtools-api": "^6.0.0"
+ }
+ },
+ "vuedraggable": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz",
+ "integrity": "sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==",
+ "requires": {
+ "sortablejs": "1.14.0"
+ },
+ "dependencies": {
+ "sortablejs": {
+ "version": "1.14.0",
+ "resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.14.0.tgz",
+ "integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w=="
+ }
+ }
+ },
+ "vuex": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.0.2.tgz",
+ "integrity": "sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==",
+ "requires": {
+ "@vue/devtools-api": "^6.0.0-beta.11"
+ }
+ },
+ "wildcard": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-1.1.2.tgz",
+ "integrity": "sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng=="
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..95eb620
--- /dev/null
+++ b/package.json
@@ -0,0 +1,43 @@
+{
+ "name": "vue-manage-system",
+ "version": "0.0.0",
+ "private": true,
+ "scripts": {
+ "build": "vite build",
+ "dev": "vite --host",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "@braks/vue-flow": "^0.4.38",
+ "@element-plus/icons-vue": "^1.1.4",
+ "@kangc/v-md-editor": "^2.3.15",
+ "@wangeditor/editor": "^5.1.14",
+ "@wangeditor/editor-for-vue": "^5.1.12",
+ "axios": "^0.27.2",
+ "dingtalk-jsapi": "^2.15.6",
+ "driver.js": "^0.9.8",
+ "echarts": "^5.3.3",
+ "element-plus": "^2.1.11",
+ "js-base64": "^3.7.2",
+ "mockjs": "^1.1.0",
+ "nprogress": "^0.2.0",
+ "screenfull": "^6.0.1",
+ "video.js": "^7.20.3",
+ "vue": "^3.2.25",
+ "vue-router": "^4.0.13",
+ "vue-video-player": "^6.0.0",
+ "vue3-print-nb": "^0.1.4",
+ "vuedraggable": "^4.1.0",
+ "vuex": "^4.0.2",
+ "vuex-persistedstate": "^4.1.0",
+ "xlsx": "^0.18.5"
+ },
+ "devDependencies": {
+ "@vitejs/plugin-vue": "^2.3.1",
+ "sass": "^1.51.0",
+ "vite": "^2.9.7",
+ "vite-plugin-compression": "^0.5.1",
+ "vite-plugin-mock": "^2.9.6",
+ "vue-cli-plugin-style-resources-loader": "~0.1.5"
+ }
+}
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..a44f7f2
Binary files /dev/null and b/public/favicon.ico differ
diff --git a/src/App.vue b/src/App.vue
new file mode 100644
index 0000000..4343d5f
--- /dev/null
+++ b/src/App.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
diff --git a/src/api/modules/index.js b/src/api/modules/index.js
new file mode 100644
index 0000000..e14c9b3
--- /dev/null
+++ b/src/api/modules/index.js
@@ -0,0 +1,67 @@
+import service from "../request.js";
+
+// 获取组别列表
+export function getGroupList() {
+ return service({
+ url: "/group/list",
+ method: "get",
+ });
+}
+
+// 添加组别
+export function addGroup(data) {
+ return service({
+ url: "/group",
+ method: "post",
+ data,
+ });
+}
+
+// 修改组别名称
+export function updateGroup(data) {
+ return service({
+ url: "/group",
+ method: "put",
+ data,
+ });
+}
+
+// 删除组别
+export function deleteGroup(groupId) {
+ return service({
+ url: `/group/${groupId}`,
+ method: "delete",
+ });
+}
+
+// 获取未分组人员列表
+export function getNonGroupUsers() {
+ return service({
+ url: "/user/non/group",
+ method: "get",
+ });
+}
+
+// 添加/修改组内人员角色
+export function updateGroupUserRole(groupId, userid, role) {
+ return service({
+ url: `/group/${groupId}/user/${userid}/role/${role}`,
+ method: "post",
+ });
+}
+
+// 获取组内人员列表
+export function getGroupUsers(groupId) {
+ return service({
+ url: `/user/${groupId}`,
+ method: "get",
+ });
+}
+
+// 删除组内人员
+export function deleteGroupUser(groupId, userid) {
+ return service({
+ url: `/group/user/${groupId}/${userid}`,
+ method: "delete",
+ });
+}
diff --git a/src/api/request.js b/src/api/request.js
new file mode 100644
index 0000000..5c473e4
--- /dev/null
+++ b/src/api/request.js
@@ -0,0 +1,109 @@
+import axios from "axios";
+import { ElMessage, ElMessageBox } from "element-plus";
+import router from "../router/router";
+
+const errorCode = {
+ 401: "登录状态已过期,即将返回首页重新登录。",
+ 403: "当前操作没有权限",
+ 404: "访问资源不存在",
+ default: "系统未知错误,请反馈给管理员",
+};
+
+// 肖星越服务
+const url = "https://paystubs.vip.cpolar.top";
+
+// 袁永军测试服务
+// const url = "https://crm-test.scdswj.cn/prod-api";
+
+// 正式环境
+// const url = "https://paystubs.vip.cpolar.top";
+
+const service = axios.create({
+ baseURL: url,
+ timeout: 10000,
+});
+
+// Request interceptors
+service.interceptors.request.use(
+ (config) => {
+ if (sessionStorage.getItem("token")) {
+ config.headers["Authorization"] =
+ "Bearer " + sessionStorage.getItem("token");
+ }
+ if (sessionStorage.getItem("deptId")) {
+ config.headers["selected-dept-id"] = sessionStorage.getItem("deptId");
+ }
+
+ let params = config.params;
+ let newData = {};
+ for (let key in params) {
+ if (params[key] !== null && params[key] !== "") {
+ newData[key] = params[key];
+ }
+ }
+ config.params = newData;
+ return config;
+ },
+ (error) => {
+ Promise.reject(error);
+ }
+);
+
+// Response interceptors
+service.interceptors.response.use(
+ (res) => {
+ // 对响应数据做点什么
+ const response = res.data;
+ const code = res.data.code || 200;
+ const message = errorCode[code] || res.data.msg || errorCode["default"];
+ if (code === 401) {
+ if (res.code === 401 || res.code === 4001) {
+ // 清除浏览器全部临时缓存
+ // sessionStorage.clear();
+ // localStorage.clear();
+ router.push("/login");
+ // store.commit('setMenuData', {});
+ // resetRouter(); // 重置路由
+ ElMessageBox.alert("你已被登出,请重新登录", "提示", {})
+ .then(() => {})
+ .catch(() => {});
+ }
+ } else if (code === 500) {
+ // Message({ message: msg, type: 'error' })
+ ElMessage.error(message);
+ return Promise.reject(new Error(msg));
+ } else if (code === 601) {
+ // Message({ message: msg, type: 'warning' })
+ ElMessage.error(message);
+ return Promise.reject("error");
+ } else if (code != 200) {
+ ElMessage.error(message);
+ return Promise.reject("error");
+ } else {
+ return response;
+ }
+ },
+ (error) => {
+ console.log("走了错误的", error);
+ // 对响应错误做点什么
+ if (error.message.indexOf("timeout") != -1) {
+ ElMessage.error("网络超时");
+ } else if (error.message == "Network Error") {
+ ElMessage.error("网络连接错误");
+ } else if (error.request.status == "401") {
+ console.log("登录过期捕获到");
+ sessionStorage.clear();
+ router.push("/login");
+ ElMessage.error("登录信息过期");
+ } else {
+ ElMessage.error(
+ error.response.data.errmsg ||
+ error.response.data.error ||
+ error.response.data.errMessage
+ );
+ }
+ return Promise.reject(error);
+ }
+);
+
+export default service;
diff --git a/src/api/status.js b/src/api/status.js
new file mode 100644
index 0000000..aba8f92
--- /dev/null
+++ b/src/api/status.js
@@ -0,0 +1,41 @@
+export const showMessage = (status) => {
+ let message = "";
+ switch (status) {
+ case 400:
+ message = "请求错误(400)";
+ break;
+ case 401:
+ message = "未授权,请重新登录(401)";
+ break;
+ case 403:
+ message = "拒绝访问(403)";
+ break;
+ case 404:
+ message = "请求出错(404)";
+ break;
+ case 408:
+ message = "请求超时(408)";
+ break;
+ case 500:
+ message = "服务器错误(500)";
+ break;
+ case 501:
+ message = "服务未实现(501)";
+ break;
+ case 502:
+ message = "网络错误(502)";
+ break;
+ case 503:
+ message = "服务不可用(503)";
+ break;
+ case 504:
+ message = "网络超时(504)";
+ break;
+ case 505:
+ message = "HTTP版本不受支持(505)";
+ break;
+ default:
+ message = `连接出错(${status})!`;
+ }
+ return `${message},请检查网络或联系管理员!`;
+};
diff --git a/src/assets/bg.png b/src/assets/bg.png
new file mode 100644
index 0000000..d2715b0
Binary files /dev/null and b/src/assets/bg.png differ
diff --git a/src/assets/flow.png b/src/assets/flow.png
new file mode 100644
index 0000000..ac6fa1b
Binary files /dev/null and b/src/assets/flow.png differ
diff --git a/src/assets/home.png b/src/assets/home.png
new file mode 100644
index 0000000..60f377a
Binary files /dev/null and b/src/assets/home.png differ
diff --git a/src/assets/home2.png b/src/assets/home2.png
new file mode 100644
index 0000000..62133c6
Binary files /dev/null and b/src/assets/home2.png differ
diff --git a/src/assets/homebg.jpeg b/src/assets/homebg.jpeg
new file mode 100644
index 0000000..17d34e0
Binary files /dev/null and b/src/assets/homebg.jpeg differ
diff --git a/src/assets/icon1.png b/src/assets/icon1.png
new file mode 100644
index 0000000..47c5596
Binary files /dev/null and b/src/assets/icon1.png differ
diff --git a/src/assets/icon2.png b/src/assets/icon2.png
new file mode 100644
index 0000000..4563506
Binary files /dev/null and b/src/assets/icon2.png differ
diff --git a/src/assets/images/avart.jpg b/src/assets/images/avart.jpg
new file mode 100644
index 0000000..3ac8f86
Binary files /dev/null and b/src/assets/images/avart.jpg differ
diff --git a/src/assets/login.png b/src/assets/login.png
new file mode 100644
index 0000000..f972e72
Binary files /dev/null and b/src/assets/login.png differ
diff --git a/src/assets/login2.png b/src/assets/login2.png
new file mode 100644
index 0000000..83526c9
Binary files /dev/null and b/src/assets/login2.png differ
diff --git a/src/assets/logo.png b/src/assets/logo.png
new file mode 100644
index 0000000..23e970a
Binary files /dev/null and b/src/assets/logo.png differ
diff --git a/src/assets/table.png b/src/assets/table.png
new file mode 100644
index 0000000..47540c9
Binary files /dev/null and b/src/assets/table.png differ
diff --git a/src/assets/title.png b/src/assets/title.png
new file mode 100644
index 0000000..1de84a9
Binary files /dev/null and b/src/assets/title.png differ
diff --git a/src/components/VideoPlay.vue b/src/components/VideoPlay.vue
new file mode 100644
index 0000000..547c37a
--- /dev/null
+++ b/src/components/VideoPlay.vue
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
diff --git a/src/components/filesUpload.vue b/src/components/filesUpload.vue
new file mode 100644
index 0000000..c5f5603
--- /dev/null
+++ b/src/components/filesUpload.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+ 将文件拖到此处或点击上传
+
+ 请上传 .xls , .xlsx 标准格式文件
+
+
+
+
+
+
+
+
+ 取消
+ 确认
+
+
+
+
+
diff --git a/src/instruction/index.js b/src/instruction/index.js
new file mode 100644
index 0000000..8aca5da
--- /dev/null
+++ b/src/instruction/index.js
@@ -0,0 +1,24 @@
+import draggable from "./modules/draggable";
+import copy from "./modules/copy";
+import debounce from "./modules/debounce";
+import longPress from "./modules/longPress";
+import throttle from "./modules/throttle";
+
+const directivesList = {
+ draggable,
+ copy,
+ debounce,
+ longPress,
+ throttle
+};
+
+const directives = {
+ install: function (app) {
+ Object.keys(directivesList).forEach((key) => {
+ // 注册所有自定义指令
+ app.directive(key, directivesList[key]);
+ });
+ },
+};
+
+export default directives;
\ No newline at end of file
diff --git a/src/instruction/modules/copy.js b/src/instruction/modules/copy.js
new file mode 100644
index 0000000..cb78a1f
--- /dev/null
+++ b/src/instruction/modules/copy.js
@@ -0,0 +1,58 @@
+/*
+ 需求:实现一个复制指定。复制指定内容至剪贴板
+ 1.动态创建 textarea 标签,并设置 readOnly 属性及移出可视区域
+ 2.将要复制的值赋给 textarea 标签的 value 属性,并插入到 body
+ 3.选中值 textarea 并复制
+ 4.将 body 中插入的 textarea 移除
+ 5.在第一次调用时绑定事件,在解绑时移除事件
+*/
+import { ElMessage } from "element-plus";
+export const copy = {
+ mounted: function (el, { value }) {
+ console.log(arguments);
+ el.$value = value;
+
+ el.onclick = () => {
+ if (!el.$value) {
+ // 值为空的时候,给出提示。可根据项目UI仔细设计
+ ElMessage({
+ type: "error",
+ message: "无复制内容",
+ });
+ return;
+ }
+ // 动态创建 textarea 标签
+ const textarea = document.createElement("input");
+ // 将该 textarea 设为 readonly 防止 iOS 下自动唤起键盘,同时将 textarea 移出可视区域
+ textarea.readOnly = "readonly";
+ textarea.style.position = "absolute";
+ textarea.style.left = "-9999px";
+ // 将要 copy 的值赋给 textarea 标签的 value 属性
+ textarea.value = el.$value;
+ // 将 textarea 插入到 body 中
+ document.body.appendChild(textarea);
+ // 选中值并复制
+ textarea.select();
+ const result = document.execCommand("Copy");
+ if (result) {
+ ElMessage({
+ type: "success",
+ message: "复制成功",
+ });
+ }
+ document.body.removeChild(textarea);
+ };
+ // 绑定点击事件,就是所谓的一键 copy 啦
+ el.addEventListener("click", el.handler);
+ },
+ // 当传进来的值更新的时候触发
+ beforeUpdate(el, { value }) {
+ el.$value = value;
+ },
+ // 指令与元素解绑的时候,移除事件绑定
+ unmounted(el) {
+ el.removeEventListener("click", el.handler);
+ },
+};
+
+export default copy;
diff --git a/src/instruction/modules/debounce.js b/src/instruction/modules/debounce.js
new file mode 100644
index 0000000..2dbb34f
--- /dev/null
+++ b/src/instruction/modules/debounce.js
@@ -0,0 +1,28 @@
+/**
+ * v-debounce
+ * 按钮防抖指令,可自行扩展至input
+ * 接收参数:function类型
+ */
+
+const debounce = {
+ mounted(el, binding) {
+ if (typeof binding.value != "function") {
+ console.log("callback must be a function");
+ }
+ let timer = null;
+ el.__handleClick__ = function () {
+ // if (timer) clearInterval(timer);
+ //
+ timer && clearTimeout(timer)
+ timer = setTimeout(() => {
+ binding.value();
+ }, 3000);
+ };
+ el.addEventListener("click", el.__handleClick__);
+ },
+ beforeUnmount(el) {
+ el.removeEventListener("click", el.__handleClick__);
+ },
+};
+
+export default debounce;
\ No newline at end of file
diff --git a/src/instruction/modules/draggable.js b/src/instruction/modules/draggable.js
new file mode 100644
index 0000000..f7a2767
--- /dev/null
+++ b/src/instruction/modules/draggable.js
@@ -0,0 +1,47 @@
+/*
+ 需求:实现一个拖拽指令,可在父元素区域任意拖拽元素。
+
+ 思路:
+ 1、设置需要拖拽的元素为absolute,其父元素为relative。
+ 2、鼠标按下(onmousedown)时记录目标元素当前的 left 和 top 值。
+ 3、鼠标移动(onmousemove)时计算每次移动的横向距离和纵向距离的变化值,并改变元素的 left 和 top 值
+ 4、鼠标松开(onmouseup)时完成一次拖拽
+
+ 使用:在 Dom 上加上 v-draggable 即可
+
+*/
+const draggable = {
+ mounted: function (el) {
+ console.log(el)
+ el.style.cursor = "move";
+ el.style.position = "absolute";
+ el.onmousedown = function (e) {
+ let disX = e.pageX - el.offsetLeft;
+ let disY = e.pageY - el.offsetTop;
+ document.onmousemove = function (e) {
+ let x = e.pageX - disX;
+ let y = e.pageY - disY;
+ console.log(el.parentNode.offsetWidth)
+ let maxX = el.parentNode.offsetWidth - el.offsetWidth;
+ let maxY = el.parentNode.offsetHeight - el.offsetHeight;
+ if (x < 0) {
+ x = 0;
+ } else if (x > maxX) {
+ x = maxX;
+ }
+
+ if (y < 0) {
+ y = 0;
+ } else if (y > maxY) {
+ y = maxY;
+ }
+ el.style.left = x + "px";
+ el.style.top = y + "px";
+ };
+ document.onmouseup = function () {
+ document.onmousemove = document.onmouseup = null;
+ };
+ };
+ }
+};
+export default draggable;
\ No newline at end of file
diff --git a/src/instruction/modules/longPress.js b/src/instruction/modules/longPress.js
new file mode 100644
index 0000000..dc16966
--- /dev/null
+++ b/src/instruction/modules/longPress.js
@@ -0,0 +1,44 @@
+const longPress = {
+ mounted(el, binding) {
+ if (typeof binding.value != "function") {
+ console.log("callback must be a function");
+ }
+ let pressTimer = null;
+ let start = (e) => {
+ if (e.type === "click" && e.button !== 0) {
+ return;
+ }
+ if (pressTimer === null) {
+ pressTimer = setTimeout(() => {
+ // 执行函数
+ handler();
+ }, 2000);
+ }
+ };
+ // 取消计时器
+ let cancel = () => {
+ // 检查计时器是否有值
+ if (pressTimer !== null) {
+ clearTimeout(pressTimer);
+ pressTimer = null;
+ }
+ };
+ // 运行函数
+ const handler = (e) => {
+ // 执行传递给指令的方法
+ binding.value(e);
+ console.log(e);
+ };
+ // 添加事件监听器
+ el.addEventListener("mousedown", start);
+ el.addEventListener("touchstart", start);
+ el.addEventListener("click", start);
+ // 取消计时器
+ el.addEventListener("click", cancel);
+ el.addEventListener("mouseout", cancel);
+ el.addEventListener("touchend", cancel);
+ el.addEventListener("touchcancel", cancel);
+ },
+};
+
+export default longPress;
diff --git a/src/instruction/modules/throttle.js b/src/instruction/modules/throttle.js
new file mode 100644
index 0000000..9c5850e
--- /dev/null
+++ b/src/instruction/modules/throttle.js
@@ -0,0 +1,30 @@
+/**
+ * 一段时间内控制请求的频率
+ * 上一次时间触发的时间和这次触发的时间相减 传入节流的时间
+ *
+ *
+ * 应用场景:scroll加载的时候 和input框输入的情况
+ */
+
+const throttle = {
+ mounted(el, binding) {
+ if (typeof binding.value != "function") {
+ console.log("callback must be a function");
+ }
+ let lastTime = 0
+
+ let newtimer = +new Date(); //拿到当前的时间
+ el.__handleClick__ = function () {
+ if (newtimer - lastTime > 3000) {
+ binding.value()
+ lastTime = newtimer
+ }
+ };
+ el.addEventListener("click", el.__handleClick__);
+ },
+ beforeUnmount(el) {
+ el.removeEventListener("click", el.__handleClick__);
+ },
+}
+
+export default throttle
\ No newline at end of file
diff --git a/src/layout/Tabs/index.vue b/src/layout/Tabs/index.vue
new file mode 100644
index 0000000..f3ac983
--- /dev/null
+++ b/src/layout/Tabs/index.vue
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+ {{ tag.title }}
+
+
+
+
+
+
+
diff --git a/src/layout/footer/index.vue b/src/layout/footer/index.vue
new file mode 100644
index 0000000..e69de29
diff --git a/src/layout/header/components/Breadcrumb.vue b/src/layout/header/components/Breadcrumb.vue
new file mode 100644
index 0000000..cd33f10
--- /dev/null
+++ b/src/layout/header/components/Breadcrumb.vue
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+ {{ item.meta.name }}
+ {{ item.meta.name }}
+
+
+
+
+
+
+
diff --git a/src/layout/header/components/Driver/index.js b/src/layout/header/components/Driver/index.js
new file mode 100644
index 0000000..6f3f0b0
--- /dev/null
+++ b/src/layout/header/components/Driver/index.js
@@ -0,0 +1,25 @@
+export const steps = () => [{
+ element: "#guide",
+ popover: {
+ title: "菜单栏",
+ description: "Body of the popover",
+ position: "left",
+ },
+ },
+ {
+ element: "#breadcrumb",
+ popover: {
+ title: "标签页",
+ description: "",
+ position: "bottom",
+ },
+ },
+ {
+ element: "#screenFul",
+ popover: {
+ title: "全屏",
+ description: "Body of the popover",
+ position: "bottom",
+ },
+ },
+];
\ No newline at end of file
diff --git a/src/layout/header/components/Driver/index.vue b/src/layout/header/components/Driver/index.vue
new file mode 100644
index 0000000..1941c8c
--- /dev/null
+++ b/src/layout/header/components/Driver/index.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
diff --git a/src/layout/header/components/Search.vue b/src/layout/header/components/Search.vue
new file mode 100644
index 0000000..9c68474
--- /dev/null
+++ b/src/layout/header/components/Search.vue
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+ 暂无搜索结果🦁🦁🦁🦁
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/header/components/avatar.vue b/src/layout/header/components/avatar.vue
new file mode 100644
index 0000000..966d4d3
--- /dev/null
+++ b/src/layout/header/components/avatar.vue
@@ -0,0 +1,62 @@
+
+
+
+
+

+
+
BIG CUTE
+
+
+
+
+ 退出登录
+
+
+
+
+
+
diff --git a/src/layout/header/components/fullScreen.vue b/src/layout/header/components/fullScreen.vue
new file mode 100644
index 0000000..52edd3e
--- /dev/null
+++ b/src/layout/header/components/fullScreen.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/header/components/message.vue b/src/layout/header/components/message.vue
new file mode 100644
index 0000000..f2b7fd2
--- /dev/null
+++ b/src/layout/header/components/message.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+ 通知 {{ item.text }}
+
+
+
+
+
+
+ 公告 {{ item.text }}
+
+
+
+
+
+
+ 系统消息
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/header/components/setting.vue b/src/layout/header/components/setting.vue
new file mode 100644
index 0000000..59c87e1
--- /dev/null
+++ b/src/layout/header/components/setting.vue
@@ -0,0 +1,192 @@
+
+
+
+ 主题颜色
+
+ 导航栏颜色
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/header/index.vue b/src/layout/header/index.vue
new file mode 100644
index 0000000..0f1b3f3
--- /dev/null
+++ b/src/layout/header/index.vue
@@ -0,0 +1,89 @@
+
+
+
+
+
+
diff --git a/src/layout/index.scss b/src/layout/index.scss
new file mode 100644
index 0000000..9f2e839
--- /dev/null
+++ b/src/layout/index.scss
@@ -0,0 +1,65 @@
+.el-container {
+ width: 100%;
+ height: 100vh;
+ overflow: hidden;
+
+ .el-aside {
+ width: auto;
+ overflow: inherit;
+ }
+
+ .el-header,
+ .el-footer {
+ height: auto;
+ padding: 0;
+ }
+
+ .main-tabs {
+ width: 100%;
+ margin-bottom: 10px;
+ background-color: #fff;
+ border: 0;
+ box-shadow: none;
+ overflow: hidden;
+ height: 30px;
+ }
+
+ .el-main {
+ background: #f0f2f5;
+ padding: 10px 13px;
+ box-sizing: border-box;
+ // 防止切换出现横向滚动条
+ overflow-x: hidden;
+
+ .main-box {
+ width: 100%;
+ height: 100%;
+ // background-color: #f5f5f5;
+ // box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);
+ // border-radius: 4px;
+ // padding: 20px;
+ box-sizing: border-box;
+ overflow: auto;
+ overflow-x: hidden !important;
+
+ &::-webkit-scrollbar {
+ background-color: white;
+ }
+ }
+ }
+}
+
+
+.shake {
+ animation: shake 0.5s linear;
+}
+
+@keyframes shake {
+ from {
+ transform: translateX(-100%);
+ }
+
+ to {
+ transform: translateX(0);
+ }
+}
\ No newline at end of file
diff --git a/src/layout/index.vue b/src/layout/index.vue
new file mode 100644
index 0000000..beb65b8
--- /dev/null
+++ b/src/layout/index.vue
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/menu/components/menuItems copy.vue b/src/layout/menu/components/menuItems copy.vue
new file mode 100644
index 0000000..df2a7f5
--- /dev/null
+++ b/src/layout/menu/components/menuItems copy.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+ {{ subItem.meta.title }}
+
+
+
+
+
+
+
+
+
+ {{ subItem.meta.title }}
+
+
+
+
+
+
+
+
diff --git a/src/layout/menu/components/menuItems.vue b/src/layout/menu/components/menuItems.vue
new file mode 100644
index 0000000..a2ab28d
--- /dev/null
+++ b/src/layout/menu/components/menuItems.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+ {{ subItem.title }}
+
+
+
+
+
+
+
+ {{ subItem.title }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/menu/index.scss b/src/layout/menu/index.scss
new file mode 100644
index 0000000..eebd3bf
--- /dev/null
+++ b/src/layout/menu/index.scss
@@ -0,0 +1,118 @@
+.menu {
+ transition: all 0.3s ease;
+ background: #20222a;
+ height: 100%;
+ position: relative;
+ display: flex;
+ flex-direction: column;
+
+ .logo {
+ transition: width 0.3s ease;
+ height: 55px;
+ box-sizing: border-box;
+ border-bottom: 2px solid #1d1e26;
+ box-shadow: 2px 0 6px rgb(0 21 41 / 35%);
+
+ span {
+ font-size: 22px;
+ font-weight: bold;
+ color: #dadada;
+ white-space: nowrap;
+ }
+
+ img {
+ width: 30px;
+ object-fit: contain;
+ margin-right: 8px;
+ }
+ }
+
+ .el-scrollbar {
+ height: calc(100% - 55px);
+
+ .el-menu {
+ // flex: 1;
+ overflow: auto;
+ overflow-x: hidden;
+ border: none !important;
+ width: 100% !important;
+
+ &::-webkit-scrollbar {
+ background-color: #20222a;
+ }
+
+ &::-webkit-scrollbar-thumb {
+ background-color: #41444b;
+ }
+
+ .el-menu-item {
+ width: 200px;
+
+ &.is-active {
+ background-color: #060708 !important;
+ }
+
+ &.is-active::before {
+ content: "";
+ top: 0;
+ left: 0;
+ bottom: 0;
+ width: 4px;
+ background: $bg-color;
+ position: absolute;
+ }
+ }
+
+ .href {
+ display: inline-block;
+ text-decoration: none;
+ color: #bdbdc0;
+ width: 100%;
+ height: 100%;
+ }
+ }
+ }
+}
+
+// .el-menu--popup {
+// .el-menu-item {
+// background-color: #20222a;
+// width: 200px;
+
+// i {
+// margin-right: 5px;
+// }
+
+// i,
+// span {
+// color: hsla(0, 0%, 100%, 0.7);
+// }
+// //
+// &:hover {
+
+// i,
+// span {
+// color: #fff !important;
+// }
+// }
+
+// &.is-active {
+// background-color: #060708 !important;
+
+// &:before {
+// content: "";
+// top: 0;
+// left: 0;
+// bottom: 0;
+// width: 4px;
+// background: $bg-color;
+// position: absolute;
+// }
+
+// i,
+// span {
+// color: #fff !important;
+// }
+// }
+// }
+// }
\ No newline at end of file
diff --git a/src/layout/menu/index.vue b/src/layout/menu/index.vue
new file mode 100644
index 0000000..a19cc7f
--- /dev/null
+++ b/src/layout/menu/index.vue
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
diff --git a/src/layout/menu/menuTable.js b/src/layout/menu/menuTable.js
new file mode 100644
index 0000000..5d8a24c
--- /dev/null
+++ b/src/layout/menu/menuTable.js
@@ -0,0 +1,14 @@
+// 菜单列表改了路由要记得改菜单相互匹配
+const menuTable = [
+ {
+ title: "首页",
+ url: "/home",
+ icon: "HomeFilled",
+ },
+ {
+ title: "组别管理",
+ url: "/groupManagement",
+ icon: "Notebook",
+ },
+];
+export default menuTable;
diff --git a/src/main.js b/src/main.js
new file mode 100644
index 0000000..b1ebafe
--- /dev/null
+++ b/src/main.js
@@ -0,0 +1,31 @@
+import { createApp } from "vue";
+import router from "./router/index";
+import store from "../src/store/index";
+import "./styles/common.scss";
+import ElementPlus from "element-plus";
+import zhCn from "element-plus/es/locale/lang/zh-cn";
+// 引入注册自定义指令
+import directives from "./instruction/index.js";
+import "element-plus/dist/index.css";
+import App from "./App.vue";
+import * as ELIcons from "@element-plus/icons-vue";
+
+import VMdEditor from "@kangc/v-md-editor";
+import vuepressTheme from "@kangc/v-md-editor/lib/theme/vuepress.js";
+import "@kangc/v-md-editor/lib/style/base-editor.css";
+import "@kangc/v-md-editor/lib/theme/style/vuepress.css";
+
+VMdEditor.use(vuepressTheme);
+const app = createApp(App);
+
+// 小图标引用
+for (const iconName in ELIcons) {
+ // 注册组件
+ app.component(iconName, ELIcons[iconName]);
+}
+
+app.use(router).use(store).use(directives).use(VMdEditor).use(ElementPlus, {
+ locale: zhCn,
+});
+
+app.mount("#app");
diff --git a/src/router/index.js b/src/router/index.js
new file mode 100644
index 0000000..8e8da6a
--- /dev/null
+++ b/src/router/index.js
@@ -0,0 +1,30 @@
+import router from "./router.js";
+import NProgress from "nprogress";
+import "nprogress/nprogress.css";
+
+NProgress.configure({
+ ease: "ease",
+ speed: 500,
+});
+
+const writeNames = ["/login"];
+// router.beforeEach((to, from, next) => {
+// NProgress.start();
+// if (sessionStorage.getItem("token")) {
+// if (to.path === "/login") {
+// next("/");
+// }
+// return next();
+// } else {
+// if (writeNames.includes(to.path)) {
+// next();
+// } else {
+// next("/login");
+// }
+// }
+// });
+router.afterEach((transition) => {
+ NProgress.done();
+});
+
+export default router;
diff --git a/src/router/originalRoutingTable.js b/src/router/originalRoutingTable.js
new file mode 100644
index 0000000..5118f61
--- /dev/null
+++ b/src/router/originalRoutingTable.js
@@ -0,0 +1,52 @@
+// 模板自带的功能路由表
+import login from "../views/login/index.vue";
+import Layout from "../layout/index.vue";
+const routerList = [
+ {
+ path: "/login",
+ name: login,
+ component: login,
+ },
+ {
+ path: "/",
+ component: Layout,
+ name: "container",
+ redirect: "home",
+ meta: {
+ requiresAuth: true, //有一些页面是否登录才能进去
+ name: "首页",
+ },
+ children: [
+ {
+ path: "/home",
+ name: "home",
+ component: () => import("../views/home/index.vue"),
+ meta: {
+ requiresAuth: true, //有一些页面是否登录才能进去
+ name: "首页",
+ },
+ },
+ ],
+ },
+ {
+ path: "/group",
+ name: "employe",
+ component: Layout,
+ meta: {
+ requiresAuth: true, //有一些页面是否登录才能进去
+ name: "组别管理",
+ },
+ children: [
+ {
+ path: "/groupManagement",
+ name: "groupManagement",
+ component: () => import("../views/groupManagement/index.vue"),
+ meta: {
+ requiresAuth: true,
+ name: "组别管理",
+ },
+ },
+ ],
+ },
+];
+export default routerList;
diff --git a/src/router/router.js b/src/router/router.js
new file mode 100644
index 0000000..54904f1
--- /dev/null
+++ b/src/router/router.js
@@ -0,0 +1,15 @@
+import { createRouter, createWebHashHistory } from "vue-router";
+import home from "../views/home/index.vue";
+import login from "../views/login/index.vue";
+import Layout from "../layout/index.vue";
+// 原本模板功能路由表
+import routerList from "./originalRoutingTable.js";
+
+const routes = routerList;
+
+const router = createRouter({
+ history: createWebHashHistory(),
+ routes,
+});
+
+export default router;
diff --git a/src/store/getters.js b/src/store/getters.js
new file mode 100644
index 0000000..ea1aad8
--- /dev/null
+++ b/src/store/getters.js
@@ -0,0 +1,9 @@
+const getters = {
+ token: (state) => state.user.token,
+ isCollapse: (state) => state.user.isCollapse,
+ UserInfo: (state) => state.user.UserInfo,
+ themeConfig: (state) => state.user.themeConfig,
+ tabsMenuList: (state) => state.tabs.tabsMenuList
+};
+
+export default getters;
\ No newline at end of file
diff --git a/src/store/index.js b/src/store/index.js
new file mode 100644
index 0000000..573b5c4
--- /dev/null
+++ b/src/store/index.js
@@ -0,0 +1,23 @@
+import {
+ createStore
+} from "vuex";
+import user from "./modules/users";
+import tabs from './modules/tabs'
+import getters from "./getters";
+import createPersistedState from "vuex-persistedstate";
+export default createStore({
+ getters,
+ modules: {
+ user,
+ tabs
+ },
+ plugins: [
+ // 默认储存在localstorage
+ createPersistedState({
+ // 本地储存名
+ key: "user",
+ // 指定模块
+ paths: ["user"],
+ }),
+ ],
+});
\ No newline at end of file
diff --git a/src/store/modules/tabs.js b/src/store/modules/tabs.js
new file mode 100644
index 0000000..80756f0
--- /dev/null
+++ b/src/store/modules/tabs.js
@@ -0,0 +1,69 @@
+import {
+ ElStep
+} from "element-plus";
+import router from "../../router/router.js";
+export default {
+ namespaced: true,
+ state: {
+ tabsMenuList: [{
+ title: "首页",
+ url: 'home',
+ icon: "Menu",
+ close: false,
+ checked: true
+ }]
+ },
+ mutations: {
+ addTabsMenu(state, obj) {
+
+ let titles = state.tabsMenuList.map(item => item.title).join(',')
+ if (titles.includes(obj.title)) {
+ for (let index = 0; index < state.tabsMenuList.length; index++) {
+ const element = state.tabsMenuList[index];
+ state.tabsMenuList[index].checked = false
+ if (element.title == obj.title) {
+ state.tabsMenuList[index].checked = true
+ }
+ }
+ } else {
+ state.tabsMenuList.forEach(item => {
+ item.checked = false
+ });
+ state.tabsMenuList.push(obj)
+ }
+ },
+
+ delectTagMenu(state, item) {
+ if (state.tabsMenuList.length == 0) {
+ return
+ }
+ for (let i = 0; i < state.tabsMenuList.length; i++) {
+ let ele = state.tabsMenuList[i]
+ console.log(ele)
+ if (ele == item) {
+ state.tabsMenuList[i - 1].checked = true
+ state.tabsMenuList.splice(i, 1)
+ return router.push(state.tabsMenuList[i - 1].url)
+ }
+ }
+ console.log(state.tabsMenuList)
+ }
+ },
+
+ actions: {
+
+ addTabs({
+ commit
+ }, str) {
+ console.log(str);
+ commit("addTabsMenu", str);
+ },
+ delectTag({
+ commit
+ }, val) {
+
+ commit('delectTagMenu', val)
+ }
+
+ },
+};
\ No newline at end of file
diff --git a/src/store/modules/users.js b/src/store/modules/users.js
new file mode 100644
index 0000000..724792e
--- /dev/null
+++ b/src/store/modules/users.js
@@ -0,0 +1,112 @@
+import router from "../../router/router.js";
+import { mix } from "../../utils/color.js";
+import { ElMessage } from "element-plus";
+
+export default {
+ namespaced: true,
+ state: {
+ UserInfo: {},
+ token: sessionStorage.getItem("token") || "",
+ isCollapse: true,
+ themeConfig: {
+ primary: "#4060c7",
+ tabColor: "#FFFFFF",
+ footColor: "#606266",
+ backgroundColor: "#FFFFFF",
+ textColor: "#00000099",
+ istags: true,
+ },
+ },
+ mutations: {
+ setToken(state, token) {
+ state.token = token;
+ },
+ setUserInfo(state, userinfo) {
+ state.UserInfo = userinfo;
+ },
+ SetIsCollapse(state, isCollapse) {
+ state.isCollapse = isCollapse;
+ },
+ setThemeConfig(state, primary) {
+ state.themeConfig.primary = primary;
+ },
+ setThemeConfigTbaColor(state, primary) {
+ state.themeConfig.tabColor = primary;
+ if (primary == "#FFFFFF") {
+ state.themeConfig.footColor = "#606266";
+ } else {
+ state.themeConfig.footColor = "#ffffff";
+ }
+ },
+ setThemeConfigMenuColor(state, primary) {
+ if (primary) {
+ state.themeConfig.backgroundColor = "#FFFFFF";
+ state.themeConfig.textColor = "#00000099";
+ } else {
+ state.themeConfig.backgroundColor = "#1d2129";
+ state.themeConfig.textColor = "#bdbdc0";
+ }
+ },
+ setThemeConfigchangeTags(state, primary) {
+ if (primary) {
+ state.themeConfig.istags = true;
+ } else {
+ state.themeConfig.istags = false;
+ }
+ },
+ },
+
+ actions: {
+ // 登录
+ // login({ commit }, userInfo) {
+ // return new Promise((resolve, reject) => {
+ // LoginInfo(userInfo)
+ // .then((res) => {
+ // console.log(res.data.data);
+ // sessionStorage.setItem("token", res.data.data.token);
+ // sessionStorage.setItem("UserInfo", JSON.stringify(res.data.data));
+ // commit("setToken", res.data.data.token);
+ // commit("setUserInfo", res.data.data);
+ // router.replace("/");
+ // ElMessage({
+ // message: "登录成功",
+ // type: "success",
+ // });
+ // resolve();
+ // })
+ // .catch((err) => {
+ // reject(err);
+ // });
+ // });
+ // },
+ changeIsCollapse({ commit }, str) {
+ console.log(str);
+ commit("SetIsCollapse", str);
+ },
+
+ changeThem({ commit }, str) {
+ commit("setThemeConfig", str);
+ const pre = "--el-color-primary";
+ // 白色混合色
+ const mixWhite = "#ffffff";
+ // 黑色混合色
+ const mixBlack = "#000000";
+ const el = document.documentElement;
+ el.style.setProperty(pre, str);
+ // 这里是覆盖原有颜色的核心代码
+ for (let i = 1; i < 10; i += 1) {
+ el.style.setProperty(`${pre}-light-${i}`, mix(str, mixWhite, i * 0.1));
+ }
+ el.style.setProperty("--el-color-primary-dark", mix(str, mixBlack, 0.1));
+ },
+ changeTabColor({ commit }, val) {
+ commit("setThemeConfigTbaColor", val);
+ },
+ changeMenuColor({ commit }, val) {
+ commit("setThemeConfigMenuColor", val);
+ },
+ changeTags({ commit }, val) {
+ commit("setThemeConfigchangeTags", val);
+ },
+ },
+};
diff --git a/src/styles/common.scss b/src/styles/common.scss
new file mode 100644
index 0000000..eb8c17e
--- /dev/null
+++ b/src/styles/common.scss
@@ -0,0 +1,216 @@
+/*
+ Reset style sheet
+*/
+
+html,
+body {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+
+/* HTML5 display-role reset for older browsers */
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+menu,
+nav,
+section {
+ display: block;
+}
+
+
+ol,
+ul {
+ list-style: none;
+}
+
+blockquote,
+q {
+ quotes: none;
+}
+
+blockquote:before,
+blockquote:after,
+q:before,
+q:after {
+ content: "";
+ content: none;
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+html,
+body,
+#app {
+ height: 100%;
+ width: 100%;
+}
+
+/* flex */
+.flx-center {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.flx-justify-between {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.flx-align-center {
+ display: flex;
+ align-items: center;
+}
+
+.flx-row {
+ display: flex;
+ flex-flow: row;
+ align-items: center;
+}
+
+.flx-row-right {
+ display: flex;
+ flex-flow: row-reverse;
+ align-items: center;
+}
+
+.col-center {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ text-align: center;
+ align-items: center;
+}
+
+.ml10 {
+ margin-left: 10px;
+}
+
+.p10 {
+ padding: 10px;
+}
+
+.p20 {
+ padding: 20px;
+}
+
+.m10 {
+ margin: 10px;
+}
+
+.m20 {
+ margin: 20px;
+}
+
+.mt10 {
+ margin-top: 10px;
+}
+
+.mt20 {
+ margin-top: 20px;
+}
+
+.w100 {
+ width: 100%;
+}
+
+.ml20 {
+ margin-left: 20px;
+}
+
+.mR10 {
+ margin-right: 10px;
+}
+
+.one-cut-txt {
+ /*强制文字在一行文本框内*/
+ white-space: nowrap;
+ /*溢出部分文字隐藏*/
+ overflow: hidden;
+ /*溢出部分省略号处理*/
+ text-overflow: ellipsis;
+}
+
+/* 清除浮动 */
+.clearfix::after {
+ content: "";
+ display: block;
+ height: 0px;
+ clear: both;
+ overflow: hidden;
+}
+
+/* fade-transform */
+.fade-transform-leave-active,
+.fade-transform-enter-active {
+ transition: all 0.2s;
+}
+
+.fade-transform-enter-from {
+ opacity: 0;
+ transform: translateX(-30px);
+ transition: all 0.2s;
+}
+
+.fade-transform-leave-to {
+ opacity: 0;
+ transform: translateX(30px);
+ transition: all 0.2s;
+}
+
+/* Breadcrumb */
+.breadcrumb-enter-active,
+.breadcrumb-leave-active {
+ transition: all 0.2s ease;
+}
+
+.breadcrumb-enter-from,
+.breadcrumb-leave-active {
+ opacity: 0;
+ transform: translateX(10px);
+}
+
+.breadcrumb-leave-active {
+ position: absolute;
+ z-index: -1;
+}
+
+/* scroll bar */
+::-webkit-scrollbar {
+ width: 8px;
+ height: 8px;
+ background-color: white;
+}
+
+::-webkit-scrollbar-thumb {
+ box-shadow: inset 0 0 0px white;
+ -webkit-box-shadow: inset 0 0 0px white;
+ background-color: #dddee0;
+ border-radius: 20px;
+}
+
+.content-box {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ height: 100%;
+ font-size: 23px;
+ font-weight: bold;
+ color: rgb(88, 88, 88);
+ line-height: 100px;
+ min-height: 400px;
+}
\ No newline at end of file
diff --git a/src/utils/color.js b/src/utils/color.js
new file mode 100644
index 0000000..651e791
--- /dev/null
+++ b/src/utils/color.js
@@ -0,0 +1,16 @@
+export const mix = (c1, c2, ratio) => {
+ ratio = Math.max(Math.min(Number(ratio), 1), 0)
+ let r1 = parseInt(c1.substring(1, 3), 16)
+ let g1 = parseInt(c1.substring(3, 5), 16)
+ let b1 = parseInt(c1.substring(5, 7), 16)
+ let r2 = parseInt(c2.substring(1, 3), 16)
+ let g2 = parseInt(c2.substring(3, 5), 16)
+ let b2 = parseInt(c2.substring(5, 7), 16)
+ let r = Math.round(r1 * (1 - ratio) + r2 * ratio) + ''
+ let g = Math.round(g1 * (1 - ratio) + g2 * ratio) + ''
+ let b = Math.round(b1 * (1 - ratio) + b2 * ratio) + ''
+ r = ('0' + (r || 0).toString(16)).slice(-2)
+ g = ('0' + (g || 0).toString(16)).slice(-2)
+ b = ('0' + (b || 0).toString(16)).slice(-2)
+ return '#' + r + g + b
+}
\ No newline at end of file
diff --git a/src/utils/index.js b/src/utils/index.js
new file mode 100644
index 0000000..f9a15d8
--- /dev/null
+++ b/src/utils/index.js
@@ -0,0 +1,44 @@
+export function getDateTime(type) {
+ var date = new Date();
+ var hengGang = "-";
+ var maoHao = ":";
+ var year = date.getFullYear();
+ var month = date.getMonth() + 1;
+ var curDate = date.getDate();
+ var curHours = date.getHours();
+ var curMinutes = date.getMinutes();
+ var curSeconds = date.getSeconds();
+
+ if (month >= 1 && month <= 9) {
+ month = "0" + month;
+ }
+ if (curDate >= 0 && curDate <= 9) {
+ curDate = "0" + curDate;
+ }
+ if (curHours >= 0 && curHours <= 9) {
+ curHours = "0" + curHours;
+ }
+ if (curMinutes >= 0 && curMinutes <= 9) {
+ curMinutes = "0" + curMinutes;
+ }
+ if (curSeconds >= 0 && curSeconds <= 9) {
+ curSeconds = "0" + curSeconds;
+ }
+ var currentdate = "";
+ if (type == "year") {
+ currentdate = year;
+ return currentdate;
+ } else if (type == "month") {
+ currentdate = year + hengGang + month;
+ return currentdate;
+ } else {
+ currentdate = year + hengGang + month + hengGang + curDate + " "
+ return currentdate;
+ }
+}
+// var year = getDateTime('year');
+// console.log(year); // 2021
+// var month = getDateTime('month');
+// console.log(month); // 12
+// var date = getDateTime('');
+// console.log(date); // 2021-12-03 09:00:00
\ No newline at end of file
diff --git a/src/views/groupManagement/index.vue b/src/views/groupManagement/index.vue
new file mode 100644
index 0000000..4b6b9be
--- /dev/null
+++ b/src/views/groupManagement/index.vue
@@ -0,0 +1,377 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.createTime || "暂无" }}
+
+
+
+
+ 编辑
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
组内成员
+
+
+
+
+
+
+
+
+
+ handleRoleChange(scope.row, value)"
+ >
+
+
+
+
+
+
+
+
+
+ 移除
+
+
+
+
+
+
+
+
未分组人员
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 添加
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/home/index.scss b/src/views/home/index.scss
new file mode 100644
index 0000000..a97a162
--- /dev/null
+++ b/src/views/home/index.scss
@@ -0,0 +1,390 @@
+.data-lists {
+ width: 100%;
+
+ .el-col {
+ height: 100%;
+ }
+
+ .data-item-one {
+ background: #2969ff;
+ margin-right: 10px;
+ padding: 10px;
+ height: 156px;
+ border-radius: 6px;
+ color: #fff;
+
+ .item-left {}
+
+ .item-right {
+ padding-left: 20px;
+ padding-right: 10px;
+ flex: 1;
+
+ .item-right-top {
+ margin-bottom: 10px;
+
+ .tit {
+ padding-bottom: 5px;
+ }
+
+ .num {
+ font-size: 24px;
+ font-weight: 700;
+ text-align: left;
+ }
+ }
+
+ .line {
+ width: 100%;
+ height: 2px;
+ background-color: #fff;
+ opacity: 0.1;
+ }
+
+ .item-right-bottom {
+ margin-top: 10px;
+
+ .item {
+ flex: 1;
+
+ .tit {
+ font-size: 14px;
+ padding-bottom: 5px;
+ }
+
+ .num {
+ font-size: 18px;
+ font-weight: bold;
+ }
+ }
+ }
+ }
+ }
+
+ .data-item-two {
+ height: 176px;
+ margin-right: 10px;
+ display: flex;
+ flex-wrap: wrap;
+
+ .item {
+ height: 50%;
+ width: 50%;
+
+ .item-des {
+ margin-right: 8px;
+ margin-bottom: 8px;
+ background-color: #fff;
+ padding: 20px;
+ border-radius: 6px;
+
+ &:nth-child(2n) {
+ margin-right: 0px;
+ }
+
+ .right {
+ flex: 1;
+ padding-left: 22px;
+
+ .num {
+ font-size: 18px;
+ font-weight: 700;
+ letter-spacing: 0px;
+
+ span {
+ font-size: 12px;
+ color: rgba(30, 189, 94, 1);
+ }
+ }
+
+ .txt {
+ padding-top: 8px;
+ font-size: 12px;
+ font-weight: 400;
+
+ color: rgba(0, 0, 0, 0.3);
+ }
+ }
+ }
+ }
+ }
+
+ .data-item-three {
+ padding: 10px;
+ height: 156px;
+ margin-bottom: 10px;
+ background-color: #fff;
+ border-radius: 6px;
+
+ .tit {
+ font-size: 14px;
+ padding-bottom: 5px;
+ }
+
+ .content {
+ display: flex;
+ flex-wrap: wrap;
+
+ .item {
+ width: 50%;
+ height: 50%;
+
+ .item-data {
+ margin: 5px;
+ opacity: 1;
+ padding: 10px;
+ border-radius: 6px;
+ background: #fafafcff;
+ position: relative;
+
+ .icon {
+ position: absolute;
+ right: 16px;
+ top: 40%;
+ color: rgba(25, 30, 36, 0.5);
+ font-size: 14px;
+ }
+
+ .tit {
+ font-size: 12px;
+ font-weight: 400;
+ color: rgba(25, 30, 36, 0.5);
+ padding-bottom: 5px;
+ }
+
+ .num {
+ color: #0052d9;
+ font-size: 14px;
+ font-weight: 700;
+
+ span {
+ color: #666;
+ font-weight: 400;
+ color: rgba(25, 30, 36, 0.5);
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+.dataLayer {
+ .datalayer-echarts {
+ flex: 1;
+ height: 260px;
+ margin-right: 10px;
+ margin-bottom: 10px;
+ background-color: #fff;
+ border-radius: 6px;
+ }
+
+ .table-data {
+ border-radius: 6px;
+ margin-right: 10px;
+ background-color: #fff;
+ padding-bottom: 10px;
+
+ .tit {
+ padding: 10px 10px 0 10px;
+ font-size: 14px;
+ font-weight: bold;
+ letter-spacing: 1px;
+ }
+
+ .table-box {
+ margin: 10px;
+
+ .el-table {
+ width: 100%;
+ height: 360px;
+
+ .type {
+ font-size: 10px;
+ padding: 5px 10px;
+ font-weight: 500;
+ line-height: 0px;
+ color: #fa4a1e;
+ text-align: left;
+ border-radius: 6px;
+ background: #fa4a1e14;
+
+ &.error-type {
+ color: #4060c7;
+ background: #e8f3ff;
+ }
+ }
+
+ .state {
+ display: inline-block;
+ width: 8px;
+ height: 8px;
+ background-color: #4060c7;
+ border-radius: 50%;
+ margin-right: 5px;
+
+ &.error-state {
+ background-color: #fa4a1e;
+ }
+ }
+ }
+ }
+ }
+
+ .data-item-three {
+ padding: 10px;
+ // height: 156px;
+ margin-bottom: 10px;
+ background-color: #fff;
+ border-radius: 6px;
+
+ .tit {
+ font-size: 14px;
+ padding-bottom: 5px;
+ }
+
+ .content {
+ display: flex;
+ flex-wrap: wrap;
+
+ .item {
+ width: 50%;
+ height: 50%;
+
+ .item-data {
+ margin: 5px;
+ opacity: 1;
+ padding: 10px;
+ border-radius: 6px;
+ background: #fafafcff;
+ position: relative;
+ align-items: center;
+
+ .icon {
+ position: absolute;
+ right: 16px;
+ top: 40%;
+ color: rgba(25, 30, 36, 0.5);
+ font-size: 14px;
+ }
+
+ .tit {
+ font-size: 12px;
+ font-weight: 400;
+ color: rgba(25, 30, 36, 0.5);
+ padding-bottom: 5px;
+ display: flex;
+ align-items: center;
+
+ .el-icon {
+ font-size: 20px;
+ color: rgba(25, 30, 36, 0.5);
+ margin-right: 5px;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ .notice {
+ width: 100%;
+ height: 152px;
+ background-color: #fff;
+ border-radius: 6px;
+ overflow: hidden;
+ margin-bottom: 10px;
+
+ .notice-news {
+ width: 100%;
+ height: 100%;
+ position: relative;
+
+ img {
+ width: 100%;
+ object-fit: cover;
+ }
+
+ .txt {
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ left: 0;
+ background-color: rgba(0, 0, 0, 0.3);
+ font-size: 14px;
+ color: #fff;
+ padding: 10px;
+ }
+ }
+ }
+
+ .notice-lists {
+ height: 260px;
+ overflow: scroll;
+
+ .item {
+ font-size: 14px;
+ padding: 10px;
+ color: #666;
+
+ .type {
+ font-size: 10px;
+ padding: 5px 10px;
+ font-weight: 500;
+ line-height: 0px;
+ color: #fa4a1e;
+ text-align: left;
+ border-radius: 6px;
+ background: #fa4a1e14;
+
+ &.error-type {
+ color: #4060c7;
+ background: #e8f3ff;
+ }
+ }
+ }
+ }
+}
+
+.border-right-1px {
+ border-right: 1px solid #eae3e3;
+}
+
+.icon-edit {
+ font-size: 20px;
+ color: #2f60c2;
+ margin: 0 10px;
+}
+
+.icon-dele {
+ font-size: 20px;
+ color: #ff5722;
+}
+
+.shake {
+ animation: shake 0.5s linear;
+}
+
+.shakeRight {
+ animation: shakeRight 0.5s linear;
+}
+
+@keyframes shake {
+ from {
+ transform: translateX(-100%);
+ }
+
+ to {
+ transform: translateX(0);
+ }
+}
+
+@keyframes shakeRight {
+ from {
+ transform: translateX(100%);
+ }
+
+ to {
+ transform: translateX(0);
+ }
+}
\ No newline at end of file
diff --git a/src/views/home/index.vue b/src/views/home/index.vue
new file mode 100644
index 0000000..16cc65a
--- /dev/null
+++ b/src/views/home/index.vue
@@ -0,0 +1,9 @@
+
+
+ 欢迎使用💐🌸💮🏵️🌹🌺🌻
+
+
+
+
+
+
diff --git a/src/views/login/index.scss b/src/views/login/index.scss
new file mode 100644
index 0000000..933fed1
--- /dev/null
+++ b/src/views/login/index.scss
@@ -0,0 +1,99 @@
+.login-container {
+ width: 100vw;
+ height: 100vh;
+ // background-color: #6c88d5;
+ background-image: url('../../assets/bg.png');
+ background-size: 100% 100%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ .login-box {
+ width: 96%;
+ height: 94%;
+ background-color: hsla(0, 0%, 100%, 0.85);
+ border-radius: 10px;
+ padding: 0 8% 0 50px;
+ box-sizing: border-box;
+ display: flex;
+ align-items: center;
+ justify-content: space-around;
+
+ .login-left {
+ width: 800px;
+ color: #6E736FFF;
+
+ .title {
+ font-size: 48px;
+ font-weight: 400;
+ letter-spacing: 0px;
+ color: rgba(47, 57, 78, 1);
+ text-align: left;
+ }
+
+ img {
+ width: 735px;
+ height: 465px;
+ }
+ }
+
+ .login-form {
+ width: 400px;
+ height: 260px;
+ padding: 10px 40px 35px 40px;
+ border-radius: 10px;
+ -webkit-box-shadow: 2px 3px 7px rgb(0 0 0 / 20%);
+ box-shadow: 2px 3px 7px rgb(0 0 0 / 20%);
+
+ .login-logo {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ // margin-bottom: 45px;
+
+ .login-icon {
+ width: 60px;
+ // height: 52px;
+ }
+
+ .logo-text {
+ font-weight: bold;
+ font-size: 32px;
+ padding-left: 25px;
+ white-space: nowrap;
+ color: #2d51e6;
+ }
+ }
+
+ .el-form-item {
+ margin-bottom: 20px;
+
+ }
+
+ .flx-row {
+ span {
+ font-size: 14px;
+ color: #2d51e6;
+ }
+
+ .img {
+ flex: 1;
+ text-align: center;
+ }
+ }
+
+ .login-btn {
+ margin-top: 20px;
+ padding-bottom: 20px;
+ display: flex;
+ justify-content: space-between;
+ width: 100%;
+ white-space: nowrap;
+
+ .el-button {
+ width: 185px;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/views/login/index.vue b/src/views/login/index.vue
new file mode 100644
index 0000000..e9a575f
--- /dev/null
+++ b/src/views/login/index.vue
@@ -0,0 +1,82 @@
+
+
+
+
+
人资薪资核算系统v1.7
+
用于自动管理核算人员工资
+

+
+
+
+
+
+
+
+
+
+
diff --git a/vite.config.js b/vite.config.js
new file mode 100644
index 0000000..f8b20f5
--- /dev/null
+++ b/vite.config.js
@@ -0,0 +1,61 @@
+import { defineConfig } from "vite";
+import vue from "@vitejs/plugin-vue";
+import { viteMockServe } from "vite-plugin-mock";
+
+import viteCompression from "vite-plugin-compression";
+
+export default defineConfig({
+ viteMockServe: {
+ supportTs: false,
+ logger: false,
+ mockPath: "./mock/index.js",
+ },
+
+ plugins: [
+ vue(),
+ viteCompression({
+ //gzip压缩
+ verbose: true,
+ disable: false,
+ threshold: 10240,
+ algorithm: "gzip",
+ ext: ".gz",
+ }),
+ ],
+ build: {
+ minify: "terser", // 明确指定使用 Terser 作为压缩工具
+ terserOptions: {
+ compress: {
+ drop_console: true,
+ drop_debugger: true,
+ },
+ },
+ // chunkSizeWarningLimit: 1500,大文件报警阈值设置,不建议使用
+ rollupOptions: {
+ output: {
+ //静态资源分类打包
+ chunkFileNames: "static/js/[name]-[hash].js",
+ entryFileNames: "static/js/[name]-[hash].js",
+ assetFileNames: "static/[ext]/[name]-[hash].[ext]",
+ manualChunks(id) {
+ //静态资源分拆打包
+ if (id.includes("node_modules")) {
+ return id
+ .toString()
+ .split("node_modules/")[1]
+ .split("/")[0]
+ .toString();
+ }
+ },
+ },
+ },
+ },
+ css: {
+ /* CSS 预处理器 导入全局样式*/
+ preprocessorOptions: {
+ scss: {
+ // additionalData: '@import "src/styles/common.scss";',
+ },
+ },
+ },
+});