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 @@ + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + 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 @@ + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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";', + }, + }, + }, +});