From 0417ceb6d478597dc83bee0dd321af45caf54667 Mon Sep 17 00:00:00 2001 From: zy7y <13271962515@163.com> Date: Tue, 13 Sep 2022 16:53:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8A=A8=E6=80=81=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/controller/menu.py | 10 +- backend/dbhelper/menu.py | 5 + backend/mini.db | Bin 4096 -> 45056 bytes backend/mini.db-shm | Bin 32768 -> 0 bytes backend/mini.db-wal | Bin 399672 -> 0 bytes backend/router/url.py | 9 +- backend/tests/test_case.py | 26 +- frontend/package-lock.json | 896 +++++++----------- frontend/package.json | 5 +- frontend/src/App.vue | 17 +- frontend/src/assets/base.css | 6 - frontend/src/assets/css/base.css | 4 + frontend/src/assets/img/background.svg | 69 ++ frontend/src/assets/img/logo.png | Bin 0 -> 20894 bytes frontend/src/assets/logo.svg | 1 - frontend/src/components/layout/header.vue | 0 frontend/src/components/layout/index.vue | 0 frontend/src/components/layout/sider-menu.vue | 44 + frontend/src/main.js | 24 +- frontend/src/router/index.js | 47 +- frontend/src/service/request.js | 37 - frontend/src/service/user.js | 18 +- frontend/src/stores/user.js | 90 +- frontend/src/utils/loadCpn.js | 16 + frontend/src/utils/request.js | 34 + frontend/src/views/login.vue | 119 ++- frontend/src/views/main.vue | 103 +- frontend/vite.config.js | 51 +- 28 files changed, 807 insertions(+), 824 deletions(-) delete mode 100644 backend/mini.db-shm delete mode 100644 backend/mini.db-wal delete mode 100644 frontend/src/assets/base.css create mode 100644 frontend/src/assets/css/base.css create mode 100644 frontend/src/assets/img/background.svg create mode 100644 frontend/src/assets/img/logo.png delete mode 100644 frontend/src/assets/logo.svg delete mode 100644 frontend/src/components/layout/header.vue delete mode 100644 frontend/src/components/layout/index.vue create mode 100644 frontend/src/components/layout/sider-menu.vue delete mode 100644 frontend/src/service/request.js create mode 100644 frontend/src/utils/loadCpn.js create mode 100644 frontend/src/utils/request.js diff --git a/backend/controller/menu.py b/backend/controller/menu.py index ea9a658..8d913d0 100644 --- a/backend/controller/menu.py +++ b/backend/controller/menu.py @@ -1,6 +1,6 @@ from fastapi import Query -from dbhelper.menu import del_menu, get_menus, insert_menu +from dbhelper.menu import del_menu, get_menus, insert_menu, put_menu from schemas import ListAll, MenuIn, MenuRead, Response @@ -21,3 +21,11 @@ async def menu_del(pk: int) -> Response: if await del_menu(pk) == 0: return Response(code=400, msg="菜单不存在") return Response() + + +async def menu_put(pk: int, data: MenuIn) -> Response: + """更新菜单""" + if await put_menu(pk, data) == 0: + return Response(code=400, msg="菜单不存在") + return Response() + diff --git a/backend/dbhelper/menu.py b/backend/dbhelper/menu.py index 2c0c37b..26256d1 100644 --- a/backend/dbhelper/menu.py +++ b/backend/dbhelper/menu.py @@ -67,3 +67,8 @@ async def get_apis(pk: int): AND srm.rid = (?) and m.status != 9""", [pk], ) + + +async def put_menu(pk: int, data): + """更新菜单""" + return await MenuModel.filter(id=pk).update(**data.dict()) \ No newline at end of file diff --git a/backend/mini.db b/backend/mini.db index e2a2455a104f1cf6a5d6b143f3ac8831aaaf3ab5..75196f15862b6767516838e76bd42a2a62b4ead7 100644 GIT binary patch literal 45056 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 Y2mpbv76JP7L7vCY|07QyWY7QmFI$3TCjbBd delta 33 ncmZp8z|^2HL7J73fq{W>Vxv7bBZHoQEiaJAAh21mVH!UGfVc+| diff --git a/backend/mini.db-shm b/backend/mini.db-shm deleted file mode 100644 index 80e612c2490c85de8d5e708399bccb6a59894bf5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI)$xanP6oBFXG6)DNpu$yV1Oyc)98hK)8C3))K;=bDco$!T6)`4mjW1y0#sv#s z0IHJipds{MN#&fbRM)BVJwO$I50Z`o)Nh23+A!Du{@MQZW%I|%*Nvv3-k)9F zh3`9Ct>69?_qjhkJD$5+GD_ED9%@q-W_glVB(XAyCz4o|#Oe@hlKf;67>3Mim}0tzUgfC36Apnw7jD4>7>3Mim} z0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7y z3lyjbuOL*1S0U;+Lqo>ZEvLX?3Y2k)J_fkP4Q_LnVMZ8dipM--mIYq&nm4>Z%qv=3 zfddjK=Pc)G<|1u$(!*u0Fvv}YxW@xVnP8eHJZFwYUa`zuKCs581GCB5`> zmFwK%4)=M;7?V8WDKpITf+bdX$7+^WvX%lF2~@Gp=ZtDuMuDRxP{T*!dyEbR@+VNs zIhyj;ckZJ#GL1 diff --git a/backend/mini.db-wal b/backend/mini.db-wal deleted file mode 100644 index 09bee7e204a725877d1bb03e6c77672665d61b8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 399672 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.0.3" + } + }, "node_modules/@antfu/utils": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.5.2.tgz", @@ -43,6 +67,17 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/runtime": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz", + "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@ctrl/tinycolor": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz", @@ -51,14 +86,6 @@ "node": ">=10" } }, - "node_modules/@element-plus/icons-vue": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.0.9.tgz", - "integrity": "sha512-okdrwiVeKBmW41Hkl0eMrXDjzJwhQMuKiBOu17rOszqM+LS/yBYpNQNV5Jvoh06Wc+89fMmb/uhzf8NZuDuUaQ==", - "peerDependencies": { - "vue": "^3.2.0" - } - }, "node_modules/@esbuild/linux-loong64": { "version": "0.15.7", "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.7.tgz", @@ -75,19 +102,6 @@ "node": ">=12" } }, - "node_modules/@floating-ui/core": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.0.1.tgz", - "integrity": "sha512-bO37brCPfteXQfFY0DyNDGB3+IMe4j150KFQcgJ5aBP295p9nBGeHEs/p0czrRbtlHq4Px/yoPXO/+dOCcF4uA==" - }, - "node_modules/@floating-ui/dom": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.0.1.tgz", - "integrity": "sha512-wBDiLUKWU8QNPNOTAFHiIAkBv1KlHauG2AhqjSeh2H+wR8PX+AArXfz8NkRexH5PgMJMmSOS70YS89AbWYh5dA==", - "dependencies": { - "@floating-ui/core": "^1.0.1" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -123,16 +137,6 @@ "node": ">= 8" } }, - "node_modules/@popperjs/core": { - "name": "@sxzz/popperjs-es", - "version": "2.11.7", - "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz", - "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, "node_modules/@rollup/pluginutils": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", @@ -146,24 +150,15 @@ "node": ">= 8.0.0" } }, - "node_modules/@types/lodash": { - "version": "4.14.184", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.184.tgz", - "integrity": "sha512-RoZphVtHbxPZizt4IcILciSWiC6dcn+eZ8oX9IWEYfDMcocdd42f7NPI6fQj+6zI8y4E0L7gu2pcZKLGTRaV9Q==" - }, - "node_modules/@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==", + "node_modules/@simonwep/pickr": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@simonwep/pickr/-/pickr-1.8.2.tgz", + "integrity": "sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==", "dependencies": { - "@types/lodash": "*" + "core-js": "^3.15.1", + "nanopop": "^2.1.0" } }, - "node_modules/@types/web-bluetooth": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.15.tgz", - "integrity": "sha512-w7hEHXnPMEZ+4nGKl/KDRVpxkwYxYExuHOYXyzIzCDzEZ9ZCGMAewulr9IqJu2LR4N37fcnb1XVeuZ09qgOxhA==" - }, "node_modules/@vitejs/plugin-vue": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-3.1.0.tgz", @@ -284,89 +279,6 @@ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.39.tgz", "integrity": "sha512-D3dl2ZB9qE6mTuWPk9RlhDeP1dgNRUKC3NJxji74A4yL8M2MwlhLKUC/49WHjrNzSPug58fWx/yFbaTzGAQSBw==" }, - "node_modules/@vueuse/core": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.2.0.tgz", - "integrity": "sha512-/MZ6qpz6uSyaXrtoeBWQzAKRG3N7CvfVWvQxiM3ei3Xe5ydOjjtVbo7lGl9p8dECV93j7W8s63A8H0kFLpLyxg==", - "dependencies": { - "@types/web-bluetooth": "^0.0.15", - "@vueuse/metadata": "9.2.0", - "@vueuse/shared": "9.2.0", - "vue-demi": "*" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/core/node_modules/vue-demi": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz", - "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==", - "hasInstallScript": true, - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, - "node_modules/@vueuse/metadata": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.2.0.tgz", - "integrity": "sha512-exN4KE6iquxDCdt72BgEhb3tlOpECtD61AUdXnUqBTIUCl70x1Ar/QXo3bYcvxmdMS2/peQyfeTzBjRTpvL5xw==", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/shared": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.2.0.tgz", - "integrity": "sha512-NnRp/noSWuXW0dKhZK5D0YLrDi0nmZ18UeEgwXQq7Ul5TTP93lcNnKjrHtd68j2xFB/l59yPGFlCryL692bnrA==", - "dependencies": { - "vue-demi": "*" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/shared/node_modules/vue-demi": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz", - "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==", - "hasInstallScript": true, - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, "node_modules/acorn": { "version": "8.8.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", @@ -379,6 +291,40 @@ "node": ">=0.4.0" } }, + "node_modules/ant-design-vue": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/ant-design-vue/-/ant-design-vue-3.2.12.tgz", + "integrity": "sha512-CPsoWJ3t+sqq/EPINPXb4fC5/9iKkUdYOfK9M9kLKbXlRN3MAoVwWUbaFnUqc+ngtbEpn/d69hTF/Eh7MeWMhQ==", + "dependencies": { + "@ant-design/colors": "^6.0.0", + "@ant-design/icons-vue": "^6.1.0", + "@babel/runtime": "^7.10.5", + "@ctrl/tinycolor": "^3.4.0", + "@simonwep/pickr": "~1.8.0", + "array-tree-filter": "^2.1.0", + "async-validator": "^4.0.0", + "dayjs": "^1.10.5", + "dom-align": "^1.12.1", + "dom-scroll-into-view": "^2.0.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.15", + "resize-observer-polyfill": "^1.5.1", + "scroll-into-view-if-needed": "^2.2.25", + "shallow-equal": "^1.0.0", + "vue-types": "^3.0.0", + "warning": "^4.0.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ant-design-vue" + }, + "peerDependencies": { + "vue": ">=3.2.0" + } + }, "node_modules/anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -392,6 +338,11 @@ "node": ">= 8" } }, + "node_modules/array-tree-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz", + "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==" + }, "node_modules/async-validator": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", @@ -485,6 +436,21 @@ "node": ">= 0.8" } }, + "node_modules/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==" + }, + "node_modules/core-js": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.25.1.tgz", + "integrity": "sha512-sr0FY4lnO1hkQ4gLDr24K0DGnweGO1QwSj5BpfQjpSJPdqWalja4cTps29Y/PJVG/P7FYlPDkH3hO+Tr0CvDgQ==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/csstype": { "version": "2.6.20", "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", @@ -520,30 +486,15 @@ "node": ">=0.4.0" } }, - "node_modules/element-plus": { - "version": "2.2.16", - "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.2.16.tgz", - "integrity": "sha512-rvaTMFIujec9YDC5lyaiQv2XVUCHuhVDq2k+9vQxP78N8Wd07iEOGa9pvEVOO2uYc75l4rSl2RE/IWPH/6Mdzw==", - "dependencies": { - "@ctrl/tinycolor": "^3.4.1", - "@element-plus/icons-vue": "^2.0.6", - "@floating-ui/dom": "^1.0.1", - "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", - "@types/lodash": "^4.14.182", - "@types/lodash-es": "^4.17.6", - "@vueuse/core": "^9.1.0", - "async-validator": "^4.2.5", - "dayjs": "^1.11.3", - "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.2.0" - }, - "peerDependencies": { - "vue": "^3.2.0" - } + "node_modules/dom-align": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.3.tgz", + "integrity": "sha512-Gj9hZN3a07cbR6zviMUBOMPdWxYhbMI+x+WS0NAIu2zFZmbK8ys9R79g+iG9qLnlCwpFoaB+fKy8Pdv470GsPA==" + }, + "node_modules/dom-scroll-into-view": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz", + "integrity": "sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==" }, "node_modules/esbuild": { "version": "0.15.7", @@ -901,23 +852,6 @@ "node": ">=12" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", @@ -1090,11 +1024,18 @@ "node": ">=0.12.0" } }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true + "node_modules/is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", + "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/local-pkg": { "version": "0.4.2", @@ -1118,14 +1059,15 @@ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, - "node_modules/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==", - "peerDependencies": { - "@types/lodash-es": "*", - "lodash": "*", - "lodash-es": "*" + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" } }, "node_modules/magic-string": { @@ -1136,11 +1078,6 @@ "sourcemap-codec": "^1.4.8" } }, - "node_modules/memoize-one": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", - "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" - }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -1194,18 +1131,6 @@ "node": ">=10" } }, - "node_modules/mlly": { - "version": "0.5.14", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-0.5.14.tgz", - "integrity": "sha512-DgRgNUSX9NIxxCxygX4Xeg9C7GX7OUx1wuQ8cXx9o9LE0e9wrH+OZ9fcnrlEedsC/rtqry3ZhUddC759XD/L0w==", - "dev": true, - "dependencies": { - "acorn": "^8.8.0", - "pathe": "^0.3.5", - "pkg-types": "^0.3.4", - "ufo": "^0.8.5" - } - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -1223,6 +1148,11 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/nanopop": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nanopop/-/nanopop-2.2.0.tgz", + "integrity": "sha512-E9JaHcxh3ere8/BEZHAcnuD10RluTSPyTToBvoFWS9/7DcCx6gyKjbn7M7Bx7E1veCxCuY1iO6h4+gdAf1j73Q==" + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -1232,11 +1162,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-wheel-es": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", - "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==" - }, "node_modules/normalize.css": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", @@ -1248,12 +1173,6 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "node_modules/pathe": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-0.3.7.tgz", - "integrity": "sha512-yz7GK+kSsS27x727jtXpd5VT4dDfP/JDIQmaowfxyWCnFjOWtE1VIh7i6TzcSfzW0n4+bRQztj1VdKnITNq/MA==", - "dev": true - }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -1334,17 +1253,6 @@ } } }, - "node_modules/pkg-types": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-0.3.5.tgz", - "integrity": "sha512-VkxCBFVgQhNHYk9subx+HOhZ4jzynH11ah63LZsprTKwPCWG9pfWBlkElWFbvkP9BVR0dP1jS9xPdhaHQNK74Q==", - "dev": true, - "dependencies": { - "jsonc-parser": "^3.2.0", - "mlly": "^0.5.14", - "pathe": "^0.3.7" - } - }, "node_modules/postcss": { "version": "8.4.16", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", @@ -1400,6 +1308,16 @@ "node": ">=8.10.0" } }, + "node_modules/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==" + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, "node_modules/resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -1465,11 +1383,18 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/scule": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/scule/-/scule-0.3.2.tgz", - "integrity": "sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g==", - "dev": true + "node_modules/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==", + "dependencies": { + "compute-scroll-into-view": "^1.0.17" + } + }, + "node_modules/shallow-equal": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", + "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" }, "node_modules/source-map": { "version": "0.6.1", @@ -1492,18 +1417,6 @@ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" }, - "node_modules/strip-literal": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-0.4.0.tgz", - "integrity": "sha512-ql/sBDoJOybTKSIOWrrh8kgUEMjXMwRAkZTD0EwiwxQH/6tTPkZvMIEjp0CRlpi6V5FMiJyvxeRkEi1KrGISoA==", - "dev": true, - "dependencies": { - "acorn": "^8.7.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, "node_modules/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", @@ -1528,42 +1441,6 @@ "node": ">=8.0" } }, - "node_modules/ufo": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-0.8.5.tgz", - "integrity": "sha512-e4+UtA5IRO+ha6hYklwj6r7BjiGMxS0O+UaSg9HbaTefg4kMkzj4tXzEBajRR+wkxf+golgAWKzLbytCUDMJAA==", - "dev": true - }, - "node_modules/unimport": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/unimport/-/unimport-0.6.7.tgz", - "integrity": "sha512-EMoVqDjswHkU+nD098QYHXH7Mkw7KwGDQAyeRF2lgairJnuO+wpkhIcmCqrD1OPJmsjkTbJ2tW6Ap8St0PuWZA==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^4.2.1", - "escape-string-regexp": "^5.0.0", - "fast-glob": "^3.2.11", - "local-pkg": "^0.4.2", - "magic-string": "^0.26.2", - "mlly": "^0.5.7", - "pathe": "^0.3.3", - "scule": "^0.3.2", - "strip-literal": "^0.4.0", - "unplugin": "^0.9.0" - } - }, - "node_modules/unimport/node_modules/magic-string": { - "version": "0.26.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.3.tgz", - "integrity": "sha512-u1Po0NDyFcwdg2nzHT88wSK0+Rih0N1M+Ph1Sp08k8yvFFU3KR72wryS7e1qMPJypt99WB7fIFVCA92mQrMjrg==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/unplugin": { "version": "0.9.5", "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-0.9.5.tgz", @@ -1596,62 +1473,22 @@ } } }, - "node_modules/unplugin-auto-import": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/unplugin-auto-import/-/unplugin-auto-import-0.11.2.tgz", - "integrity": "sha512-1+VwBfn9dtiYv9SQLKP1AvZolUbK9xTVeAT+iOcEk4EHSFUlmIqBVLEKI76cifSQTLOJ3rZyPrEgptf3SZNLlQ==", - "dev": true, - "dependencies": { - "@antfu/utils": "^0.5.2", - "@rollup/pluginutils": "^4.2.1", - "local-pkg": "^0.4.2", - "magic-string": "^0.26.2", - "unimport": "^0.6.7", - "unplugin": "^0.9.3" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vueuse/core": "*" - }, - "peerDependenciesMeta": { - "@vueuse/core": { - "optional": true - } - } - }, - "node_modules/unplugin-auto-import/node_modules/magic-string": { - "version": "0.26.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.3.tgz", - "integrity": "sha512-u1Po0NDyFcwdg2nzHT88wSK0+Rih0N1M+Ph1Sp08k8yvFFU3KR72wryS7e1qMPJypt99WB7fIFVCA92mQrMjrg==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/unplugin-vue-components": { - "version": "0.22.4", - "resolved": "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-0.22.4.tgz", - "integrity": "sha512-2rRZcM9OnJGXnYxQNfaceEYuPeVACcWySIjy8WBwIiN3onr980TmA3XE5pRJFt8zoQrUA+c46oyIq96noLqrEQ==", + "version": "0.22.7", + "resolved": "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-0.22.7.tgz", + "integrity": "sha512-MJEAKJF9bRykTRvJ4WXF0FNMAyt1PX3iwpu2NN+li35sAKjQv6sC1col5aZDLiwDZDo2AGwxNkzLJFKaun9qHw==", "dev": true, "dependencies": { "@antfu/utils": "^0.5.2", "@rollup/pluginutils": "^4.2.1", "chokidar": "^3.5.3", "debug": "^4.3.4", - "fast-glob": "^3.2.11", + "fast-glob": "^3.2.12", "local-pkg": "^0.4.2", - "magic-string": "^0.26.2", + "magic-string": "^0.26.3", "minimatch": "^5.1.0", "resolve": "^1.22.1", - "unplugin": "^0.9.0" + "unplugin": "^0.9.5" }, "engines": { "node": ">=14" @@ -1748,6 +1585,28 @@ "vue": "^3.2.0" } }, + "node_modules/vue-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/vue-types/-/vue-types-3.0.2.tgz", + "integrity": "sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==", + "dependencies": { + "is-plain-object": "3.0.1" + }, + "engines": { + "node": ">=10.15.0" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", @@ -1765,6 +1624,28 @@ } }, "dependencies": { + "@ant-design/colors": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-6.0.0.tgz", + "integrity": "sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==", + "requires": { + "@ctrl/tinycolor": "^3.4.0" + } + }, + "@ant-design/icons-svg": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz", + "integrity": "sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw==" + }, + "@ant-design/icons-vue": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-6.1.0.tgz", + "integrity": "sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA==", + "requires": { + "@ant-design/colors": "^6.0.0", + "@ant-design/icons-svg": "^4.2.1" + } + }, "@antfu/utils": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.5.2.tgz", @@ -1776,17 +1657,19 @@ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz", "integrity": "sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw==" }, + "@babel/runtime": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz", + "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==", + "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": "2.0.9", - "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.0.9.tgz", - "integrity": "sha512-okdrwiVeKBmW41Hkl0eMrXDjzJwhQMuKiBOu17rOszqM+LS/yBYpNQNV5Jvoh06Wc+89fMmb/uhzf8NZuDuUaQ==", - "requires": {} - }, "@esbuild/linux-loong64": { "version": "0.15.7", "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.7.tgz", @@ -1794,19 +1677,6 @@ "dev": true, "optional": true }, - "@floating-ui/core": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.0.1.tgz", - "integrity": "sha512-bO37brCPfteXQfFY0DyNDGB3+IMe4j150KFQcgJ5aBP295p9nBGeHEs/p0czrRbtlHq4Px/yoPXO/+dOCcF4uA==" - }, - "@floating-ui/dom": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.0.1.tgz", - "integrity": "sha512-wBDiLUKWU8QNPNOTAFHiIAkBv1KlHauG2AhqjSeh2H+wR8PX+AArXfz8NkRexH5PgMJMmSOS70YS89AbWYh5dA==", - "requires": { - "@floating-ui/core": "^1.0.1" - } - }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1833,11 +1703,6 @@ "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/pluginutils": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", @@ -1848,24 +1713,15 @@ "picomatch": "^2.2.2" } }, - "@types/lodash": { - "version": "4.14.184", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.184.tgz", - "integrity": "sha512-RoZphVtHbxPZizt4IcILciSWiC6dcn+eZ8oX9IWEYfDMcocdd42f7NPI6fQj+6zI8y4E0L7gu2pcZKLGTRaV9Q==" - }, - "@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==", + "@simonwep/pickr": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@simonwep/pickr/-/pickr-1.8.2.tgz", + "integrity": "sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==", "requires": { - "@types/lodash": "*" + "core-js": "^3.15.1", + "nanopop": "^2.1.0" } }, - "@types/web-bluetooth": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.15.tgz", - "integrity": "sha512-w7hEHXnPMEZ+4nGKl/KDRVpxkwYxYExuHOYXyzIzCDzEZ9ZCGMAewulr9IqJu2LR4N37fcnb1XVeuZ09qgOxhA==" - }, "@vitejs/plugin-vue": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-3.1.0.tgz", @@ -1977,52 +1833,36 @@ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.39.tgz", "integrity": "sha512-D3dl2ZB9qE6mTuWPk9RlhDeP1dgNRUKC3NJxji74A4yL8M2MwlhLKUC/49WHjrNzSPug58fWx/yFbaTzGAQSBw==" }, - "@vueuse/core": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.2.0.tgz", - "integrity": "sha512-/MZ6qpz6uSyaXrtoeBWQzAKRG3N7CvfVWvQxiM3ei3Xe5ydOjjtVbo7lGl9p8dECV93j7W8s63A8H0kFLpLyxg==", - "requires": { - "@types/web-bluetooth": "^0.0.15", - "@vueuse/metadata": "9.2.0", - "@vueuse/shared": "9.2.0", - "vue-demi": "*" - }, - "dependencies": { - "vue-demi": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz", - "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==", - "requires": {} - } - } - }, - "@vueuse/metadata": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.2.0.tgz", - "integrity": "sha512-exN4KE6iquxDCdt72BgEhb3tlOpECtD61AUdXnUqBTIUCl70x1Ar/QXo3bYcvxmdMS2/peQyfeTzBjRTpvL5xw==" - }, - "@vueuse/shared": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.2.0.tgz", - "integrity": "sha512-NnRp/noSWuXW0dKhZK5D0YLrDi0nmZ18UeEgwXQq7Ul5TTP93lcNnKjrHtd68j2xFB/l59yPGFlCryL692bnrA==", - "requires": { - "vue-demi": "*" - }, - "dependencies": { - "vue-demi": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz", - "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==", - "requires": {} - } - } - }, "acorn": { "version": "8.8.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", "dev": true }, + "ant-design-vue": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/ant-design-vue/-/ant-design-vue-3.2.12.tgz", + "integrity": "sha512-CPsoWJ3t+sqq/EPINPXb4fC5/9iKkUdYOfK9M9kLKbXlRN3MAoVwWUbaFnUqc+ngtbEpn/d69hTF/Eh7MeWMhQ==", + "requires": { + "@ant-design/colors": "^6.0.0", + "@ant-design/icons-vue": "^6.1.0", + "@babel/runtime": "^7.10.5", + "@ctrl/tinycolor": "^3.4.0", + "@simonwep/pickr": "~1.8.0", + "array-tree-filter": "^2.1.0", + "async-validator": "^4.0.0", + "dayjs": "^1.10.5", + "dom-align": "^1.12.1", + "dom-scroll-into-view": "^2.0.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.15", + "resize-observer-polyfill": "^1.5.1", + "scroll-into-view-if-needed": "^2.2.25", + "shallow-equal": "^1.0.0", + "vue-types": "^3.0.0", + "warning": "^4.0.0" + } + }, "anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -2033,6 +1873,11 @@ "picomatch": "^2.0.4" } }, + "array-tree-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz", + "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==" + }, "async-validator": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", @@ -2106,6 +1951,16 @@ "delayed-stream": "~1.0.0" } }, + "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==" + }, + "core-js": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.25.1.tgz", + "integrity": "sha512-sr0FY4lnO1hkQ4gLDr24K0DGnweGO1QwSj5BpfQjpSJPdqWalja4cTps29Y/PJVG/P7FYlPDkH3hO+Tr0CvDgQ==" + }, "csstype": { "version": "2.6.20", "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", @@ -2130,27 +1985,15 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, - "element-plus": { - "version": "2.2.16", - "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.2.16.tgz", - "integrity": "sha512-rvaTMFIujec9YDC5lyaiQv2XVUCHuhVDq2k+9vQxP78N8Wd07iEOGa9pvEVOO2uYc75l4rSl2RE/IWPH/6Mdzw==", - "requires": { - "@ctrl/tinycolor": "^3.4.1", - "@element-plus/icons-vue": "^2.0.6", - "@floating-ui/dom": "^1.0.1", - "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", - "@types/lodash": "^4.14.182", - "@types/lodash-es": "^4.17.6", - "@vueuse/core": "^9.1.0", - "async-validator": "^4.2.5", - "dayjs": "^1.11.3", - "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.2.0" - } + "dom-align": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.3.tgz", + "integrity": "sha512-Gj9hZN3a07cbR6zviMUBOMPdWxYhbMI+x+WS0NAIu2zFZmbK8ys9R79g+iG9qLnlCwpFoaB+fKy8Pdv470GsPA==" + }, + "dom-scroll-into-view": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz", + "integrity": "sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==" }, "esbuild": { "version": "0.15.7", @@ -2321,17 +2164,6 @@ "dev": true, "optional": true }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true - }, "estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", @@ -2453,11 +2285,15 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true + "is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", + "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "local-pkg": { "version": "0.4.2", @@ -2475,11 +2311,13 @@ "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==", - "requires": {} + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } }, "magic-string": { "version": "0.25.9", @@ -2489,11 +2327,6 @@ "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", @@ -2532,18 +2365,6 @@ "brace-expansion": "^2.0.1" } }, - "mlly": { - "version": "0.5.14", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-0.5.14.tgz", - "integrity": "sha512-DgRgNUSX9NIxxCxygX4Xeg9C7GX7OUx1wuQ8cXx9o9LE0e9wrH+OZ9fcnrlEedsC/rtqry3ZhUddC759XD/L0w==", - "dev": true, - "requires": { - "acorn": "^8.8.0", - "pathe": "^0.3.5", - "pkg-types": "^0.3.4", - "ufo": "^0.8.5" - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -2555,17 +2376,17 @@ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" }, + "nanopop": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nanopop/-/nanopop-2.2.0.tgz", + "integrity": "sha512-E9JaHcxh3ere8/BEZHAcnuD10RluTSPyTToBvoFWS9/7DcCx6gyKjbn7M7Bx7E1veCxCuY1iO6h4+gdAf1j73Q==" + }, "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.2.0", - "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", - "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==" - }, "normalize.css": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", @@ -2577,12 +2398,6 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "pathe": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-0.3.7.tgz", - "integrity": "sha512-yz7GK+kSsS27x727jtXpd5VT4dDfP/JDIQmaowfxyWCnFjOWtE1VIh7i6TzcSfzW0n4+bRQztj1VdKnITNq/MA==", - "dev": true - }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -2617,17 +2432,6 @@ "integrity": "sha512-j3CknBg4H17MXDwG+X6JT50wmGkxG5cWshVb5pdV8o/ivMxiVsML9ADwe7SEchas1myIWd6/sYeVv0/IGT5YrQ==", "requires": {} }, - "pkg-types": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-0.3.5.tgz", - "integrity": "sha512-VkxCBFVgQhNHYk9subx+HOhZ4jzynH11ah63LZsprTKwPCWG9pfWBlkElWFbvkP9BVR0dP1jS9xPdhaHQNK74Q==", - "dev": true, - "requires": { - "jsonc-parser": "^3.2.0", - "mlly": "^0.5.14", - "pathe": "^0.3.7" - } - }, "postcss": { "version": "8.4.16", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", @@ -2653,6 +2457,16 @@ "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==" + }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, "resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -2688,11 +2502,18 @@ "queue-microtask": "^1.2.2" } }, - "scule": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/scule/-/scule-0.3.2.tgz", - "integrity": "sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g==", - "dev": true + "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" + } + }, + "shallow-equal": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", + "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" }, "source-map": { "version": "0.6.1", @@ -2709,15 +2530,6 @@ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" }, - "strip-literal": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-0.4.0.tgz", - "integrity": "sha512-ql/sBDoJOybTKSIOWrrh8kgUEMjXMwRAkZTD0EwiwxQH/6tTPkZvMIEjp0CRlpi6V5FMiJyvxeRkEi1KrGISoA==", - "dev": true, - "requires": { - "acorn": "^8.7.1" - } - }, "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", @@ -2733,41 +2545,6 @@ "is-number": "^7.0.0" } }, - "ufo": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-0.8.5.tgz", - "integrity": "sha512-e4+UtA5IRO+ha6hYklwj6r7BjiGMxS0O+UaSg9HbaTefg4kMkzj4tXzEBajRR+wkxf+golgAWKzLbytCUDMJAA==", - "dev": true - }, - "unimport": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/unimport/-/unimport-0.6.7.tgz", - "integrity": "sha512-EMoVqDjswHkU+nD098QYHXH7Mkw7KwGDQAyeRF2lgairJnuO+wpkhIcmCqrD1OPJmsjkTbJ2tW6Ap8St0PuWZA==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^4.2.1", - "escape-string-regexp": "^5.0.0", - "fast-glob": "^3.2.11", - "local-pkg": "^0.4.2", - "magic-string": "^0.26.2", - "mlly": "^0.5.7", - "pathe": "^0.3.3", - "scule": "^0.3.2", - "strip-literal": "^0.4.0", - "unplugin": "^0.9.0" - }, - "dependencies": { - "magic-string": { - "version": "0.26.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.3.tgz", - "integrity": "sha512-u1Po0NDyFcwdg2nzHT88wSK0+Rih0N1M+Ph1Sp08k8yvFFU3KR72wryS7e1qMPJypt99WB7fIFVCA92mQrMjrg==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - } - } - }, "unplugin": { "version": "0.9.5", "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-0.9.5.tgz", @@ -2780,47 +2557,22 @@ "webpack-virtual-modules": "^0.4.4" } }, - "unplugin-auto-import": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/unplugin-auto-import/-/unplugin-auto-import-0.11.2.tgz", - "integrity": "sha512-1+VwBfn9dtiYv9SQLKP1AvZolUbK9xTVeAT+iOcEk4EHSFUlmIqBVLEKI76cifSQTLOJ3rZyPrEgptf3SZNLlQ==", - "dev": true, - "requires": { - "@antfu/utils": "^0.5.2", - "@rollup/pluginutils": "^4.2.1", - "local-pkg": "^0.4.2", - "magic-string": "^0.26.2", - "unimport": "^0.6.7", - "unplugin": "^0.9.3" - }, - "dependencies": { - "magic-string": { - "version": "0.26.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.3.tgz", - "integrity": "sha512-u1Po0NDyFcwdg2nzHT88wSK0+Rih0N1M+Ph1Sp08k8yvFFU3KR72wryS7e1qMPJypt99WB7fIFVCA92mQrMjrg==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - } - } - }, "unplugin-vue-components": { - "version": "0.22.4", - "resolved": "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-0.22.4.tgz", - "integrity": "sha512-2rRZcM9OnJGXnYxQNfaceEYuPeVACcWySIjy8WBwIiN3onr980TmA3XE5pRJFt8zoQrUA+c46oyIq96noLqrEQ==", + "version": "0.22.7", + "resolved": "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-0.22.7.tgz", + "integrity": "sha512-MJEAKJF9bRykTRvJ4WXF0FNMAyt1PX3iwpu2NN+li35sAKjQv6sC1col5aZDLiwDZDo2AGwxNkzLJFKaun9qHw==", "dev": true, "requires": { "@antfu/utils": "^0.5.2", "@rollup/pluginutils": "^4.2.1", "chokidar": "^3.5.3", "debug": "^4.3.4", - "fast-glob": "^3.2.11", + "fast-glob": "^3.2.12", "local-pkg": "^0.4.2", - "magic-string": "^0.26.2", + "magic-string": "^0.26.3", "minimatch": "^5.1.0", "resolve": "^1.22.1", - "unplugin": "^0.9.0" + "unplugin": "^0.9.5" }, "dependencies": { "magic-string": { @@ -2867,6 +2619,22 @@ "@vue/devtools-api": "^6.1.4" } }, + "vue-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/vue-types/-/vue-types-3.0.2.tgz", + "integrity": "sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==", + "requires": { + "is-plain-object": "3.0.1" + } + }, + "warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "requires": { + "loose-envify": "^1.0.0" + } + }, "webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", diff --git a/frontend/package.json b/frontend/package.json index 1fdff7d..5de3dab 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -7,8 +7,8 @@ "preview": "vite preview --port 4173" }, "dependencies": { + "ant-design-vue": "^3.2.12", "axios": "^0.27.2", - "element-plus": "^2.2.16", "normalize.css": "^8.0.1", "pinia": "^2.0.21", "pinia-plugin-persistedstate": "^2.2.0", @@ -17,8 +17,7 @@ }, "devDependencies": { "@vitejs/plugin-vue": "^3.0.3", - "unplugin-auto-import": "^0.11.2", - "unplugin-vue-components": "^0.22.4", + "unplugin-vue-components": "^0.22.7", "vite": "^3.0.9" } } diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 8a1711a..760485d 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -1,12 +1,19 @@ - diff --git a/frontend/src/assets/base.css b/frontend/src/assets/base.css deleted file mode 100644 index a079c49..0000000 --- a/frontend/src/assets/base.css +++ /dev/null @@ -1,6 +0,0 @@ -body,html, #app{ - height: 100%; - width: 100%; - margin: 0; - padding: 0; -} diff --git a/frontend/src/assets/css/base.css b/frontend/src/assets/css/base.css new file mode 100644 index 0000000..73fe75a --- /dev/null +++ b/frontend/src/assets/css/base.css @@ -0,0 +1,4 @@ +html,#app{ + height: 100%; + width: 100%; +} \ No newline at end of file diff --git a/frontend/src/assets/img/background.svg b/frontend/src/assets/img/background.svg new file mode 100644 index 0000000..89c2597 --- /dev/null +++ b/frontend/src/assets/img/background.svg @@ -0,0 +1,69 @@ + + + + Group 21 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/frontend/src/assets/img/logo.png b/frontend/src/assets/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d22b489a8c55d8241aa0b74d01b024268c3d022c GIT binary patch literal 20894 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 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/logo.svg b/frontend/src/assets/logo.svg deleted file mode 100644 index bc826fe..0000000 --- a/frontend/src/assets/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/frontend/src/components/layout/header.vue b/frontend/src/components/layout/header.vue deleted file mode 100644 index e69de29..0000000 diff --git a/frontend/src/components/layout/index.vue b/frontend/src/components/layout/index.vue deleted file mode 100644 index e69de29..0000000 diff --git a/frontend/src/components/layout/sider-menu.vue b/frontend/src/components/layout/sider-menu.vue new file mode 100644 index 0000000..b0e0bf9 --- /dev/null +++ b/frontend/src/components/layout/sider-menu.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/frontend/src/main.js b/frontend/src/main.js index 1d7f8f5..668b3c3 100644 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -1,17 +1,17 @@ -import { createApp } from 'vue' +import { createApp } from "vue"; -import App from './App.vue' -import router from './router' -import store from './stores' +import App from "./App.vue"; +import router from "./router"; +import store from "./stores"; -import 'normalize.css' -import '@/assets/base.css' -import 'element-plus/theme-chalk/el-message.css' -import 'element-plus/theme-chalk/el-loading.css' +import "normalize.css"; +import "@/assets/css/base.css"; -const app = createApp(App) +import "ant-design-vue/dist/antd.css"; -app.use(store) -app.use(router) +const app = createApp(App); -app.mount('#app') +app.use(store); +app.use(router); + +app.mount("#app"); diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js index af2b436..cf721ef 100644 --- a/frontend/src/router/index.js +++ b/frontend/src/router/index.js @@ -1,44 +1,43 @@ -import { createRouter, createWebHistory } from 'vue-router' -import { userStore } from '@/stores/user' -import { ElMessage } from 'element-plus' +import { createRouter, createWebHistory } from "vue-router"; +import { message } from "ant-design-vue"; +import { userStore } from "@/stores/user"; const routes = [ { - path: '/', - redirect: '/main' + path: "/", + redirect: "/main", }, { - path: '/login', - meta: {title: '登录页'}, - component: () => import('@/views/login.vue') + path: "/login", + meta: { title: "登录页" }, + component: () => import("@/views/login.vue"), }, { - path: '/main', - meta: {title: '主页'}, - component: () => import('@/views/main.vue') - } - -] + path: "/main", + meta: { title: "主页" }, + component: () => import("@/views/main.vue"), + }, +]; const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), - routes: routes -}) + routes: routes, +}); // 导航守卫 router.beforeEach((to) => { // 修改页面标题 - if(to.meta.title) { - document.title = to.meta.title + if (to.meta.title) { + document.title = to.meta.title; } if (to.path !== "/login") { - if (userStore().token){ - return + if (userStore().token) { + return; } - ElMessage.warning("请登录") - return '/login' + message.warning("请登录"); + return "/login"; } -}) +}); -export default router +export default router; diff --git a/frontend/src/service/request.js b/frontend/src/service/request.js deleted file mode 100644 index 9921270..0000000 --- a/frontend/src/service/request.js +++ /dev/null @@ -1,37 +0,0 @@ -import axios from "axios"; -import { ElMessage, ElLoading } from 'element-plus' -import {userStore} from '@/stores/user' - -let loading - -export default (config) => { - - const instance = axios.create({ - baseURL: import.meta.env.VITE_BASE_URL, - timeout: 10000, - }) - - instance.interceptors.request.use(config => { - loading = ElLoading.service({ - lock: true, - text: '请求中...', - background: 'rabg(0,0,0,0.7)' - }) - config.headers.Authorization = userStore().accessToken - return config - }) - - instance.interceptors.response.use(res => { - if (res.data.code !== 200 ){ - ElMessage.error(res.data.msg) - } - loading.close() - return res.data - }, err => { - ElMessage.error(err) - loading.close() - return Promise.reject(err) - }) - - return instance(config) -} \ No newline at end of file diff --git a/frontend/src/service/user.js b/frontend/src/service/user.js index 248cb1d..435d494 100644 --- a/frontend/src/service/user.js +++ b/frontend/src/service/user.js @@ -1,23 +1,23 @@ -import request from "./request"; +import request from "@/utils/request"; export function login(data) { return request({ url: "/login", - method: 'post', - data + method: "post", + data, }); } // 获取用户信息 -export function getUserInfo(uid){ +export function getUserInfo(uid) { return request({ - url: `/user/${uid}` - }) + url: `/user/${uid}`, + }); } // 获取权限信息 -export function getMenus(rid){ +export function getMenus(rid) { return request({ - url: `/role/${rid}/menu` - }) + url: `/role/${rid}/menu`, + }); } diff --git a/frontend/src/stores/user.js b/frontend/src/stores/user.js index 1b14eb2..89d76b3 100644 --- a/frontend/src/stores/user.js +++ b/frontend/src/stores/user.js @@ -1,52 +1,64 @@ -import { ref, computed } from 'vue' -import { defineStore } from 'pinia' -import { ElMessage } from 'element-plus' -import {getMenus, getUserInfo, login} from '@/service/user' -import router from '@/router' +import { ref, computed } from "vue"; +import { defineStore } from "pinia"; +import { message } from "ant-design-vue"; +import { getMenus, getUserInfo, login } from "@/service/user"; +import router from "@/router"; -export const userStore = defineStore('user', () => { - const token = ref("") - const userInfo = ref({}) - const userMenus = ref([]) +export const userStore = defineStore( + "user", + () => { + const token = ref(""); + const userInfo = ref({}); + const userMenus = ref([]); - // getter - const accessToken = computed(() => 'Bearer ' + token.value) + const isLoading = ref(false); - // setup store 不提供$reset 需要自己重置 - // https://github.com/vuejs/pinia/issues/1056 - const $reset = () => { - token.value = "" - userInfo.value = {} - userMenus.value = [] - } + // getter + const accessToken = computed(() => "Bearer " + token.value); - // 非setup语法时的actions - const loginAction = async (data) => { + // setup store 不提供$reset 需要自己重置 + // https://github.com/vuejs/pinia/issues/1056 + const $reset = () => { + token.value = ""; + userInfo.value = {}; + userMenus.value = []; + }; - // 1. 登录 - const res = await login(data) - token.value = res.data.token + // 非setup语法时的actions + const loginAction = async (data) => { + // 1. 登录 + const res = await login(data); + token.value = res.data.token; - // 2. 获取用户信息 - const info = await getUserInfo(res.data.id) - userInfo.value = info.data + // 2. 获取用户信息 + const info = await getUserInfo(res.data.id); + userInfo.value = info.data; - // 3. 获取权限信息 - const menus = await getMenus(info.data.roles[0].id) - userMenus.value = menus.data + // 3. 获取权限信息 + const menus = await getMenus(info.data.roles[0].id); + userMenus.value = menus.data; - // 4. 跳转 - router.push("/main") + // 4. 跳转 + router.push("/main"); - // 弹框提示登录成功 - ElMessage.success("登录成功.") - } + // 弹框提示登录成功 + message.success("登录成功."); + }; - return { token, accessToken, userInfo, userMenus, - $reset, loginAction } -}, { + return { + token, + accessToken, + userInfo, + userMenus, + isLoading, + $reset, + loginAction, + }; + }, + { persist: true, // 解决pinia刷新时数据丢失问题 - }) + } +); // export const userStore = defineStore('user',{ // state: () => ({ @@ -66,4 +78,4 @@ export const userStore = defineStore('user', () => { // } // }, // persist: true -// }) \ No newline at end of file +// }) diff --git a/frontend/src/utils/loadCpn.js b/frontend/src/utils/loadCpn.js new file mode 100644 index 0000000..b0b8280 --- /dev/null +++ b/frontend/src/utils/loadCpn.js @@ -0,0 +1,16 @@ +// 动态加载组件 +import { h } from "vue"; +import * as icons from "@ant-design/icons-vue"; + +/** + * 动态加载antd icon + * @param {*} iconName + * @returns 组件对象 + * jsx:使用 h(loadIconCpn('UserField')) + * template: 使用 + */ +function loadIconCpn(iconName) { + return icons[iconName]; +} + +export { loadIconCpn }; diff --git a/frontend/src/utils/request.js b/frontend/src/utils/request.js new file mode 100644 index 0000000..a6e2283 --- /dev/null +++ b/frontend/src/utils/request.js @@ -0,0 +1,34 @@ +import axios from "axios"; +import { message } from "ant-design-vue"; +import { userStore } from "@/stores/user"; + +export default (config) => { + const instance = axios.create({ + baseURL: import.meta.env.VITE_BASE_URL, + timeout: 10000, + }); + + instance.interceptors.request.use((config) => { + userStore().isLoading = !userStore().isLoading; + config.headers.Authorization = userStore().accessToken; + return config; + }); + + instance.interceptors.response.use( + (res) => { + userStore().isLoading = !userStore().isLoading; + if (res.data.code !== 200) { + message.error(res.data.msg); + } + + return res.data; + }, + (err) => { + userStore().isLoading = !userStore().isLoading; + message.error(err); + return Promise.reject(err); + } + ); + + return instance(config); +}; diff --git a/frontend/src/views/login.vue b/frontend/src/views/login.vue index 29669dc..9636d53 100644 --- a/frontend/src/views/login.vue +++ b/frontend/src/views/login.vue @@ -1,59 +1,82 @@ @@ -73,10 +96,10 @@ width: 300px; height: 300px; } -.continer h1{ - color: #fff; +.continer h1 { + color: #fff; } -.continer .el-button { +.continer .ant-btn { width: 100%; } diff --git a/frontend/src/views/main.vue b/frontend/src/views/main.vue index fc4161d..d383770 100644 --- a/frontend/src/views/main.vue +++ b/frontend/src/views/main.vue @@ -1,53 +1,72 @@ diff --git a/frontend/vite.config.js b/frontend/vite.config.js index ce2a435..ab1b496 100644 --- a/frontend/vite.config.js +++ b/frontend/vite.config.js @@ -1,34 +1,35 @@ -import { fileURLToPath, URL } from 'node:url' +import { fileURLToPath, URL } from "node:url"; -import { defineConfig } from 'vite' -import vue from '@vitejs/plugin-vue' -import AutoImport from 'unplugin-auto-import/vite' -import Components from 'unplugin-vue-components/vite' -import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' +import { defineConfig } from "vite"; +import vue from "@vitejs/plugin-vue"; +import Components from "unplugin-vue-components/vite"; +import { AntDesignVueResolver } from "unplugin-vue-components/resolvers"; // https://vitejs.dev/config/ export default defineConfig({ - plugins: [vue(), AutoImport({ - resolvers: [ElementPlusResolver()], - }), Components({ - resolvers: [ElementPlusResolver()], - }),], + plugins: [ + vue(), + Components({ + resolvers: [AntDesignVueResolver()], + }), + ], resolve: { alias: { - '@': fileURLToPath(new URL('./src', import.meta.url)) - } + "@": fileURLToPath(new URL("./src", import.meta.url)), + }, }, - server: { - proxy: { // 代理 - '/api': { - target: 'http://localhost:8000', + server: { + proxy: { + // 代理 + "/api": { + target: "http://localhost:8000", changeOrigin: true, - rewrite: (path) => path.replace(/^\/api/, '') + rewrite: (path) => path.replace(/^\/api/, ""), }, - '/socket.io': { - target: 'ws://localhost:5000', - ws: true - } - } - } -}) + "/socket.io": { + target: "ws://localhost:5000", + ws: true, + }, + }, + }, +});