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 e2a2455..75196f1 100644 Binary files a/backend/mini.db and b/backend/mini.db differ diff --git a/backend/mini.db-shm b/backend/mini.db-shm deleted file mode 100644 index 80e612c..0000000 Binary files a/backend/mini.db-shm and /dev/null differ diff --git a/backend/mini.db-wal b/backend/mini.db-wal deleted file mode 100644 index 09bee7e..0000000 Binary files a/backend/mini.db-wal and /dev/null differ diff --git a/backend/router/url.py b/backend/router/url.py index 631b753..f146478 100644 --- a/backend/router/url.py +++ b/backend/router/url.py @@ -3,7 +3,7 @@ from typing import Any, Callable, get_type_hints from fastapi import Depends, routing from controller.common import about, login -from controller.menu import menu_add, menu_arr, menu_del +from controller.menu import menu_add, menu_arr, menu_del, menu_put from controller.role import (assigned_menu, role_add, role_arr, role_del, role_has_menu, role_put, role_query) from controller.user import (user_add, user_arr, user_del, user_info, @@ -107,7 +107,9 @@ class Route(routing.APIRoute): ) -has_perm = {"dependencies": [Depends(check_permissions)]} +has_perm = { + # "dependencies": [Depends(check_permissions)] +} routes = [ Route.post("/login", endpoint=login, tags=["公共"], summary="登录"), @@ -157,6 +159,9 @@ routes = [ Route.delete( "/menu/{pk}", endpoint=menu_del, tags=["菜单管理"], summary="菜单删除", **has_perm ), + Route.put( + "/menu/{pk}", endpoint=menu_put, tags=["菜单管理"], summary="菜单更新", **has_perm + ), ] __all__ = [routes] diff --git a/backend/tests/test_case.py b/backend/tests/test_case.py index 1e66d2f..bdd84e8 100644 --- a/backend/tests/test_case.py +++ b/backend/tests/test_case.py @@ -43,7 +43,7 @@ params = [ "/menu", MenuIn( # id 1 name="系统管理", - meta={"icon": "Group"}, + meta={"icon": "AppstoreOutlined"}, path="/system", type=0, component=None, @@ -57,7 +57,7 @@ params = [ "/menu", MenuIn( # id 2 name="系统设置", - meta={"icon": "setting"}, + meta={"icon": "SettingOutlined"}, path="/system", type=0, component=None, @@ -72,7 +72,7 @@ params = [ "/menu", MenuIn( # id 3 name="用户管理", - meta={"icon": "User"}, + meta={"icon": "TeamOutlined"}, path="/system/user", type=1, component="/system/user.vue", @@ -86,7 +86,7 @@ params = [ "/menu", MenuIn( # id 4 name="角色管理", - meta={"icon": "Role"}, + meta={"icon": "UserOutlined"}, path="/system/role", type=1, component="/system/role.vue", @@ -100,7 +100,7 @@ params = [ "/menu", MenuIn( # id 5 name="菜单管理", - meta={"icon": "Menu"}, + meta={"icon": "MenuOutlined"}, path="/system/menu", type=1, component="/system/menu.vue", @@ -114,7 +114,7 @@ params = [ "/menu", MenuIn( # id 6 name="关于", - meta={"icon": "Menu"}, + meta={"icon": "DashboardOutlined"}, path="/setting/about", type=1, component="/setting/about.vue", @@ -309,6 +309,20 @@ params = [ method="DELETE", ).dict(), ), + ( + "/menu", + MenuIn( + name="修改菜单", + meta={"icon": "Update"}, + path=None, + type=2, + component=None, + pid=5, + identifier="menu:update", + api="/menu/{pk}", + method="PUT", + ).dict(), + ), # 分配权限 ( "/role/assigned/menu", diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 392e12f..525386a 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -8,8 +8,8 @@ "name": "frontend", "version": "0.0.0", "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", @@ -18,11 +18,35 @@ }, "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" } }, + "node_modules/@ant-design/colors": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-6.0.0.tgz", + "integrity": "sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==", + "dependencies": { + "@ctrl/tinycolor": "^3.4.0" + } + }, + "node_modules/@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==" + }, + "node_modules/@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==", + "dependencies": { + "@ant-design/colors": "^6.0.0", + "@ant-design/icons-svg": "^4.2.1" + }, + "peerDependencies": { + "vue": ">=3.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 0000000..d22b489 Binary files /dev/null and b/frontend/src/assets/img/logo.png differ 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, + }, + }, + }, +});