From 96c10d6c0fb46b56b0e74e09a8e20bcfc9f54cde Mon Sep 17 00:00:00 2001 From: vben Date: Mon, 2 Nov 2020 23:04:25 +0800 Subject: [PATCH] perf(menu): optimize layout menu --- CHANGELOG.zh_CN.md | 10 + package.json | 2 +- report.20201101.112320.28808.0.001.json | 856 ----------------------- src/assets/images/sidebar/dark-mini.png | Bin 8551 -> 0 bytes src/assets/images/sidebar/light-mini.png | Bin 8926 -> 0 bytes src/assets/images/sidebar/light.png | Bin 24237 -> 0 bytes src/components/Breadcrumb/Breadcrumb.vue | 4 +- src/components/Icon/index.tsx | 2 +- src/components/Menu/src/BasicMenu.tsx | 60 +- src/components/Menu/src/MenuContent.tsx | 32 +- src/components/Menu/src/SearchInput.vue | 50 +- src/components/Menu/src/index.less | 222 +++--- src/design/ant/btn.less | 12 +- src/design/color.less | 4 +- src/design/public.less | 14 +- src/design/var/index.less | 2 +- src/layouts/default/LayoutBreadcrumb.tsx | 2 +- src/layouts/default/LayoutMenu.tsx | 16 +- src/layouts/default/LayoutSideBar.tsx | 24 +- src/layouts/default/UserDropdown.tsx | 6 +- src/layouts/default/index.less | 20 +- src/layouts/default/index.tsx | 9 +- src/layouts/page/index.tsx | 8 +- src/layouts/page/useTransition.ts | 7 +- src/settings/projectSetting.ts | 2 +- src/setup/ant-design-vue/index.ts | 2 +- 26 files changed, 252 insertions(+), 1114 deletions(-) delete mode 100644 report.20201101.112320.28808.0.001.json delete mode 100644 src/assets/images/sidebar/dark-mini.png delete mode 100644 src/assets/images/sidebar/light-mini.png delete mode 100644 src/assets/images/sidebar/light.png diff --git a/CHANGELOG.zh_CN.md b/CHANGELOG.zh_CN.md index 59a6563e..f5cb0c39 100644 --- a/CHANGELOG.zh_CN.md +++ b/CHANGELOG.zh_CN.md @@ -1,3 +1,13 @@ +## Wip + +### ⚡ Performance Improvements + +- 菜单性能继续优化 + +### 🎫 Chores + +- 删除菜单背景图 + ## 2.0.0-rc.8 (2020-11-2) ### ✨ Features diff --git a/package.json b/package.json index 2b66abfa..43ec4420 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ }, "dependencies": { "@iconify/iconify": "^2.0.0-rc.1", - "ant-design-vue": "^2.0.0-beta.12", + "ant-design-vue": "^2.0.0-beta.13", "apexcharts": "^3.22.0", "axios": "^0.21.0", "echarts": "^4.9.0", diff --git a/report.20201101.112320.28808.0.001.json b/report.20201101.112320.28808.0.001.json deleted file mode 100644 index c6c2f12d..00000000 --- a/report.20201101.112320.28808.0.001.json +++ /dev/null @@ -1,856 +0,0 @@ - -{ - "header": { - "reportVersion": 1, - "event": "Allocation failed - JavaScript heap out of memory", - "trigger": "FatalError", - "filename": "report.20201101.112320.28808.0.001.json", - "dumpEventTime": "2020-11-01T11:23:20Z", - "dumpEventTimeStamp": "1604201000746", - "processId": 28808, - "cwd": "/Users/annsion/Documents/workspace_dev/vue-vben-admin-2.0", - "commandLine": [ - "/Users/annsion/.nvm/versions/node/v12.16.1/bin/node", - "/Users/annsion/Documents/workspace_dev/vue-vben-admin-2.0/node_modules/.bin/vite" - ], - "nodejsVersion": "v12.16.1", - "wordSize": 64, - "arch": "x64", - "platform": "darwin", - "componentVersions": { - "node": "12.16.1", - "v8": "7.8.279.23-node.31", - "uv": "1.34.0", - "zlib": "1.2.11", - "brotli": "1.0.7", - "ares": "1.15.0", - "modules": "72", - "nghttp2": "1.40.0", - "napi": "5", - "llhttp": "2.0.4", - "http_parser": "2.9.3", - "openssl": "1.1.1d", - "cldr": "35.1", - "icu": "64.2", - "tz": "2019c", - "unicode": "12.1" - }, - "release": { - "name": "node", - "lts": "Erbium", - "headersUrl": "https://nodejs.org/download/release/v12.16.1/node-v12.16.1-headers.tar.gz", - "sourceUrl": "https://nodejs.org/download/release/v12.16.1/node-v12.16.1.tar.gz" - }, - "osName": "Darwin", - "osRelease": "19.4.0", - "osVersion": "Darwin Kernel Version 19.4.0: Wed Mar 4 22:28:40 PST 2020; root:xnu-6153.101.6~15/RELEASE_X86_64", - "osMachine": "x86_64", - "cpus": [ - { - "model": "Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz", - "speed": 2700, - "user": 5704770, - "nice": 0, - "sys": 2626500, - "idle": 18122690, - "irq": 0 - }, - { - "model": "Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz", - "speed": 2700, - "user": 679970, - "nice": 0, - "sys": 396880, - "idle": 25355580, - "irq": 0 - }, - { - "model": "Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz", - "speed": 2700, - "user": 5384870, - "nice": 0, - "sys": 1845420, - "idle": 19202190, - "irq": 0 - }, - { - "model": "Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz", - "speed": 2700, - "user": 632210, - "nice": 0, - "sys": 341020, - "idle": 25459190, - "irq": 0 - }, - { - "model": "Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz", - "speed": 2700, - "user": 5005990, - "nice": 0, - "sys": 1559680, - "idle": 19866790, - "irq": 0 - }, - { - "model": "Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz", - "speed": 2700, - "user": 608570, - "nice": 0, - "sys": 303150, - "idle": 25520680, - "irq": 0 - }, - { - "model": "Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz", - "speed": 2700, - "user": 4671490, - "nice": 0, - "sys": 1357130, - "idle": 20403830, - "irq": 0 - }, - { - "model": "Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz", - "speed": 2700, - "user": 589160, - "nice": 0, - "sys": 275960, - "idle": 25567270, - "irq": 0 - } - ], - "networkInterfaces": [ - { - "name": "lo0", - "internal": true, - "mac": "00:00:00:00:00:00", - "address": "127.0.0.1", - "netmask": "255.0.0.0", - "family": "IPv4" - }, - { - "name": "lo0", - "internal": true, - "mac": "00:00:00:00:00:00", - "address": "::1", - "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", - "family": "IPv6", - "scopeid": 0 - }, - { - "name": "lo0", - "internal": true, - "mac": "00:00:00:00:00:00", - "address": "fe80::1", - "netmask": "ffff:ffff:ffff:ffff::", - "family": "IPv6", - "scopeid": 1 - }, - { - "name": "en0", - "internal": false, - "mac": "78:4f:43:93:8c:de", - "address": "fe80::109b:445e:8bfe:6f75", - "netmask": "ffff:ffff:ffff:ffff::", - "family": "IPv6", - "scopeid": 5 - }, - { - "name": "en0", - "internal": false, - "mac": "78:4f:43:93:8c:de", - "address": "10.10.4.96", - "netmask": "255.255.0.0", - "family": "IPv4" - }, - { - "name": "awdl0", - "internal": false, - "mac": "76:f7:aa:86:99:4a", - "address": "fe80::74f7:aaff:fe86:994a", - "netmask": "ffff:ffff:ffff:ffff::", - "family": "IPv6", - "scopeid": 13 - }, - { - "name": "llw0", - "internal": false, - "mac": "76:f7:aa:86:99:4a", - "address": "fe80::74f7:aaff:fe86:994a", - "netmask": "ffff:ffff:ffff:ffff::", - "family": "IPv6", - "scopeid": 14 - }, - { - "name": "vnic0", - "internal": false, - "mac": "00:1c:42:00:00:08", - "address": "10.211.55.2", - "netmask": "255.255.255.0", - "family": "IPv4" - }, - { - "name": "vnic1", - "internal": false, - "mac": "00:1c:42:00:00:09", - "address": "10.37.129.2", - "netmask": "255.255.255.0", - "family": "IPv4" - }, - { - "name": "vnic2", - "internal": false, - "mac": "00:1c:42:00:00:0a", - "address": "192.168.137.2", - "netmask": "255.255.255.0", - "family": "IPv4" - }, - { - "name": "utun0", - "internal": false, - "mac": "00:00:00:00:00:00", - "address": "fe80::eac7:e3c5:2e23:577b", - "netmask": "ffff:ffff:ffff:ffff::", - "family": "IPv6", - "scopeid": 18 - }, - { - "name": "utun1", - "internal": false, - "mac": "00:00:00:00:00:00", - "address": "fe80::92ca:3b6c:3505:bb75", - "netmask": "ffff:ffff:ffff:ffff::", - "family": "IPv6", - "scopeid": 19 - }, - { - "name": "en5", - "internal": false, - "mac": "ac:de:48:00:11:22", - "address": "fe80::aede:48ff:fe00:1122", - "netmask": "ffff:ffff:ffff:ffff::", - "family": "IPv6", - "scopeid": 4 - }, - { - "name": "en7", - "internal": false, - "mac": "00:e0:4c:68:03:12", - "address": "fe80::1436:ff70:1fc:e9e8", - "netmask": "ffff:ffff:ffff:ffff::", - "family": "IPv6", - "scopeid": 10 - }, - { - "name": "en7", - "internal": false, - "mac": "00:e0:4c:68:03:12", - "address": "192.168.32.33", - "netmask": "255.255.255.0", - "family": "IPv4" - }, - { - "name": "en8", - "internal": false, - "mac": "6a:fe:f7:b4:a1:38", - "address": "fe80::4bb:1d2e:db16:dc3a", - "netmask": "ffff:ffff:ffff:ffff::", - "family": "IPv6", - "scopeid": 20 - }, - { - "name": "en8", - "internal": false, - "mac": "6a:fe:f7:b4:a1:38", - "address": "172.20.10.5", - "netmask": "255.255.255.240", - "family": "IPv4" - } - ], - "host": "ann.local" - }, - "javascriptStack": { - "message": "No stack.", - "stack": [ - "Unavailable." - ] - }, - "nativeStack": [ - { - "pc": "0x000000010015c5c2", - "symbol": "report::TriggerNodeReport(v8::Isolate*, node::Environment*, char const*, char const*, std::__1::basic_string, std::__1::allocator > const&, v8::Local) [/Users/annsion/.nvm/versions/node/v12.16.1/bin/node]" - }, - { - "pc": "0x0000000100080dc8", - "symbol": "node::OnFatalError(char const*, char const*) [/Users/annsion/.nvm/versions/node/v12.16.1/bin/node]" - }, - { - "pc": "0x0000000100185167", - "symbol": "v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [/Users/annsion/.nvm/versions/node/v12.16.1/bin/node]" - }, - { - "pc": "0x0000000100185103", - "symbol": "v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/Users/annsion/.nvm/versions/node/v12.16.1/bin/node]" - }, - { - "pc": "0x000000010030b2f5", - "symbol": "v8::internal::Heap::FatalProcessOutOfMemory(char const*) [/Users/annsion/.nvm/versions/node/v12.16.1/bin/node]" - }, - { - "pc": "0x000000010030c9c4", - "symbol": "v8::internal::Heap::RecomputeLimits(v8::internal::GarbageCollector) [/Users/annsion/.nvm/versions/node/v12.16.1/bin/node]" - }, - { - "pc": "0x0000000100309837", - "symbol": "v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/Users/annsion/.nvm/versions/node/v12.16.1/bin/node]" - }, - { - "pc": "0x00000001003077fd", - "symbol": "v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/Users/annsion/.nvm/versions/node/v12.16.1/bin/node]" - }, - { - "pc": "0x0000000100312fba", - "symbol": "v8::internal::Heap::AllocateRawWithLightRetry(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [/Users/annsion/.nvm/versions/node/v12.16.1/bin/node]" - }, - { - "pc": "0x0000000100313041", - "symbol": "v8::internal::Heap::AllocateRawWithRetryOrFail(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [/Users/annsion/.nvm/versions/node/v12.16.1/bin/node]" - }, - { - "pc": "0x00000001002e035b", - "symbol": "v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationType, v8::internal::AllocationOrigin) [/Users/annsion/.nvm/versions/node/v12.16.1/bin/node]" - }, - { - "pc": "0x0000000100618718", - "symbol": "v8::internal::Runtime_AllocateInYoungGeneration(int, unsigned long*, v8::internal::Isolate*) [/Users/annsion/.nvm/versions/node/v12.16.1/bin/node]" - }, - { - "pc": "0x0000000100950919", - "symbol": "Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit [/Users/annsion/.nvm/versions/node/v12.16.1/bin/node]" - }, - { - "pc": "0x00000001008fc271", - "symbol": "Builtins_ExtractFastJSArray [/Users/annsion/.nvm/versions/node/v12.16.1/bin/node]" - } - ], - "javascriptHeap": { - "totalMemory": 2197811200, - "totalCommittedMemory": 2188539296, - "usedMemory": 2170225248, - "availableMemory": 20428384, - "memoryLimit": 2197815296, - "heapSpaces": { - "read_only_space": { - "memorySize": 262144, - "committedMemory": 33088, - "capacity": 32808, - "used": 32808, - "available": 0 - }, - "new_space": { - "memorySize": 33554432, - "committedMemory": 24617648, - "capacity": 16759296, - "used": 13246416, - "available": 3512880 - }, - "old_space": { - "memorySize": 2065317888, - "committedMemory": 2065256464, - "capacity": 2062879320, - "used": 2062727208, - "available": 152112 - }, - "code_space": { - "memorySize": 1740800, - "committedMemory": 1696768, - "capacity": 1591904, - "used": 1591904, - "available": 0 - }, - "map_space": { - "memorySize": 6033408, - "committedMemory": 6032800, - "capacity": 1877280, - "used": 1877280, - "available": 0 - }, - "large_object_space": { - "memorySize": 90853376, - "committedMemory": 90853376, - "capacity": 90746848, - "used": 90746848, - "available": 0 - }, - "code_large_object_space": { - "memorySize": 49152, - "committedMemory": 49152, - "capacity": 2784, - "used": 2784, - "available": 0 - }, - "new_large_object_space": { - "memorySize": 0, - "committedMemory": 0, - "capacity": 16759296, - "used": 0, - "available": 16759296 - } - } - }, - "resourceUsage": { - "userCpuSeconds": 80.3311, - "kernelCpuSeconds": 15.4548, - "cpuConsumptionPercent": 16.7458, - "maxRss": 2349800095744, - "pageFaults": { - "IORequired": 26, - "IONotRequired": 1556354 - }, - "fsActivity": { - "reads": 0, - "writes": 0 - } - }, - "libuv": [ - ], - "environmentVariables": { - "npm_package_scripts_log": "esno ./build/script/changelog.ts", - "npm_package_devDependencies_lint_staged": "^10.5.0", - "npm_package_devDependencies__purge_icons_generated": "^0.4.1", - "npm_package_devDependencies_postcss_import": "^12.0.1", - "npm_package_devDependencies_prettier": "^2.1.2", - "npm_package_scripts_ls_lint": "npx ls-lint", - "TERM_PROGRAM": "vscode", - "npm_package_dependencies_zxcvbn": "^4.4.2", - "NODE": "/Users/annsion/.nvm/versions/node/v12.16.1/bin/node", - "npm_config_version_git_tag": "true", - "npm_package_dependencies_axios": "^0.21.0", - "npm_package_devDependencies_typescript": "^4.0.5", - "npm_package_devDependencies_vite_plugin_mock": "^1.0.6", - "npm_package_devDependencies_vite_plugin_pwa": "^0.1.3", - "npm_package_homepage": "https://github.com/anncwb/vue-vben-admin", - "NVM_CD_FLAGS": "-q", - "INIT_CWD": "/Users/annsion/Documents/workspace_dev/vue-vben-admin-2.0", - "npm_package_devDependencies_conventional_changelog_custom_config": "^0.3.1", - "SHELL": "/bin/zsh", - "TERM": "xterm-256color", - "npm_package_dependencies_vditor": "^3.6.0", - "npm_package_devDependencies_rimraf": "^3.0.2", - "TMPDIR": "/var/folders/69/p74fhms10gq0tzw8gtqvqjfc0000gn/T/", - "npm_config_email": "@ylz123456", - "npm_config_init_license": "MIT", - "npm_package_devDependencies_fs_extra": "^9.0.1", - "npm_package_devDependencies_vue_eslint_parser": "^7.1.1", - "TERM_PROGRAM_VERSION": "1.50.1", - "npm_package_changelog_authorName": "false", - "ORIGINAL_XDG_CURRENT_DESKTOP": "undefined", - "npm_package_dependencies_vuex_module_decorators": "^1.0.1", - "npm_package_devDependencies_rollup_plugin_analyzer": "^3.3.0", - "npm_package_devDependencies_stylelint_order": "^4.1.0", - "npm_config_home": "https://www.npmjs.org", - "npm_config_registry": "https://registry.npmjs.org/", - "npm_package_devDependencies_conventional_changelog_cli": "^2.1.0", - "npm_package_devDependencies_yargs": "^16.1.0", - "npm_package_devDependencies_commitizen": "^4.2.2", - "npm_package_devDependencies_stylelint_config_standard": "^20.0.0", - "npm_package_repository_url": "git+https://github.com/anncwb/vue-vben-admin.git", - "ZSH": "/Users/annsion/.oh-my-zsh", - "npm_package_scripts_report": "cross-env REPORT=true npm run build ", - "npm_package_dependencies_xlsx": "^0.16.8", - "npm_package_changelog_bugsUrl": "https://github.com/anncwb/vue-vben-admin/issues", - "npm_package_readmeFilename": "README.en-US.md", - "npm_config_python": "/usr/bin/python", - "npm_package_description": "This branch is a 2.0 new branch which use vue3 to develop.", - "USER": "annsion", - "NVM_DIR": "/Users/annsion/.nvm", - "npm_package_devDependencies_dotenv": "^8.2.0", - "npm_package_license": "MIT", - "CLASS_PATH": "/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/lib", - "npm_package_scripts_build_no_cache": "yarn clean:cache && npm run build", - "npm_package_dependencies_nprogress": "^0.2.0", - "npm_package_dependencies_path_to_regexp": "^6.2.0", - "npm_package_devDependencies__vuedx_typescript_plugin_vue": "^0.2.4-0", - "npm_package_devDependencies_vite_plugin_html": "^1.0.0-beta.2", - "npm_package_devDependencies__types_yargs": "^15.0.9", - "SSH_AUTH_SOCK": "/private/tmp/com.apple.launchd.8OyPR83dMT/Listeners", - "npm_package_devDependencies_eslint": "^7.12.0", - "npm_package_devDependencies_less": "^3.12.2", - "npm_package_changelog_authorEmail": "false", - "__CF_USER_TEXT_ENCODING": "0x1F5:0x19:0x34", - "npm_package_scripts_lint_stylelint": "stylelint --fix \"**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/", - "npm_package_devDependencies__typescript_eslint_eslint_plugin": "^4.6.0", - "npm_package_husky_hooks_pre_commit": "ls-lint && lint-staged", - "npm_execpath": "/usr/local/Cellar/yarn/1.21.1/libexec/bin/yarn.js", - "npm_package_scripts_preview_dist": "esno ./build/script/preview.ts", - "PAGER": "less", - "npm_package_devDependencies_eslint_plugin_prettier": "^3.1.4", - "LSCOLORS": "Gxfxcxdxbxegedabagacad", - "npm_package_devDependencies__ls_lint_ls_lint": "^1.9.2", - "npm_package_devDependencies__typescript_eslint_parser": "^4.6.0", - "npm_package_devDependencies_koa_static": "^5.0.0", - "npm_package_devDependencies__types_echarts": "^4.9.0", - "npm_config_argv": "{\"remain\":[],\"cooked\":[\"run\",\"serve\"],\"original\":[\"serve\"]}", - "PATH": "/var/folders/69/p74fhms10gq0tzw8gtqvqjfc0000gn/T/yarn--1604200427727-0.5334803764404132:/Users/annsion/Documents/workspace_dev/vue-vben-admin-2.0/node_modules/.bin:/Users/annsion/.config/yarn/link/node_modules/.bin:/Users/annsion/.nvm/versions/node/v12.16.1/libexec/lib/node_modules/npm/bin/node-gyp-bin:/Users/annsion/.nvm/versions/node/v12.16.1/lib/node_modules/npm/bin/node-gyp-bin:/Users/annsion/.nvm/versions/node/v12.16.1/bin/node_modules/npm/bin/node-gyp-bin:/Users/annsion/.nvm/versions/node/v12.16.1/bin:./usr/local/mongodb/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/usr/local/mysql/bin:/Users/annsion/maven/apache-maven-3.6.1/bin:/usr/local/sbin:/usr/local/sonar-scanner/bin:/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/bin", - "npm_config___registry_npm_taobao_org__always_auth": "", - "npm_package_scripts_typecheck": "typecheck .", - "npm_package_dependencies_vue": "^3.0.2", - "_": "/Users/annsion/Documents/workspace_dev/vue-vben-admin-2.0/node_modules/.bin/cross-env", - "npm_package_dependencies_ant_design_vue": "^2.0.0-beta.11", - "npm_package_devDependencies__types_nprogress": "^0.2.0", - "SONAR_SCANNER_HOME": "/usr/local/sonar-scanner", - "PWD": "/Users/annsion/Documents/workspace_dev/vue-vben-admin-2.0", - "npm_package_scripts_preview": "npm run build && esno ./build/script/preview.ts", - "npm_package_bugs_url": "https://github.com/anncwb/vue-vben-admin/issues", - "JAVA_HOME": "/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home", - "npm_lifecycle_event": "serve", - "npm_package_name": "vben-admin-2.0", - "npm_package_repository_type": "git", - "LANG": "zh_CN.UTF-8", - "npm_package_devDependencies_stylelint_config_prettier": "^8.0.2", - "npm_config_version_commit_hooks": "true", - "npm_package_scripts_build": " rimraf dist && cross-env NODE_ENV=production vite build && esno ./build/script/postBuild.ts", - "npm_config_username": "ylz", - "npm_package_scripts_lint_eslint": "eslint --fix --ext \"src/**/*.{vue,less,css,scss}\"", - "npm_package_devDependencies_rollup_plugin_visualizer": "^4.1.2", - "XPC_FLAGS": "0x0", - "NODE_ENV": "development", - "npm_config_bin_links": "true", - "npm_package_devDependencies_stylelint": "^13.7.2", - "npm_package_devDependencies_tasksfile": "^5.1.1", - "npm_package_devDependencies__types_lodash_es": "^4.17.3", - "npm_package_changelog_emojis": "true", - "npm_package_engines_node": ">=10.16.1", - "npm_package_dependencies_vue_i18n": "^9.0.0-beta.6", - "npm_package_devDependencies_eslint_config_prettier": "^6.15.0", - "npm_package_version": "2.0.0-rc.7", - "npm_package_devDependencies__iconify_json": "^1.1.249", - "XPC_SERVICE_NAME": "0", - "npm_package_devDependencies_autoprefixer": "^9.8.6", - "npm_package_devDependencies__types_koa_static": "^4.0.1", - "HOME": "/Users/annsion", - "SHLVL": "2", - "M2_HOME": "/Users/annsion/maven/apache-maven-3.6.1", - "npm_package_devDependencies__types_mockjs": "^1.0.3", - "npm_package_devDependencies_eslint_plugin_vue": "^7.1.0", - "VSCODE_GIT_ASKPASS_MAIN": "/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/git/dist/askpass-main.js", - "npm_config_scripts_prepend_node_path": "true", - "npm_config_strict_ssl": "true", - "npm_config_save_prefix": "^", - "npm_package_scripts_serve": "esno ./build/script/preserve.ts && cross-env NODE_ENV=development vite", - "npm_config_version_git_message": "v%s", - "npm_package_scripts_bootstrap": "yarn install", - "npm_package_devDependencies__commitlint_cli": "^11.0.0", - "npm_package_devDependencies_cross_env": "^7.0.2", - "npm_package_devDependencies_husky": "^4.3.0", - "npm_package_husky_hooks_commit_msg": "commitlint -E HUSKY_GIT_PARAMS", - "npm_package_scripts_lint_prettier": "prettier --write --loglevel warn \"src/**/*.{js,json,tsx,css,less,scss,vue,html,md}\"", - "npm_package_dependencies_echarts": "^4.9.0", - "NPM_CONFIG_PYTHON": "/usr/bin/python", - "npm_config_disturl": "https://npm.taobao.org/dist", - "npm_package_devDependencies_ts_node": "^9.0.0", - "npm_package_dependencies_vite": "^1.0.0-rc.8", - "npm_package_devDependencies_vite_plugin_purge_icons": "^0.4.4", - "YARN_WRAP_OUTPUT": "false", - "LOGNAME": "annsion", - "LESS": "-R", - "npm_package_scripts_build_site": "cross-env SITE=true npm run build ", - "npm_lifecycle_script": "esno ./build/script/preserve.ts && cross-env NODE_ENV=development vite", - "PREFIX": "/usr/local", - "npm_package_dependencies__iconify_iconify": "^2.0.0-rc.1", - "npm_package_dependencies_lodash_es": "^4.17.15", - "npm_package_dependencies_vuex": "^4.0.0-rc.1", - "VSCODE_GIT_IPC_HANDLE": "/var/folders/69/p74fhms10gq0tzw8gtqvqjfc0000gn/T/vscode-git-8303872dd8.sock", - "LC_CTYPE": "zh_CN.UTF-8", - "npm_package_scripts_clean_cache": "rimraf node_modules/.cache/ && rimraf node_modules/.vite_opt_cache", - "npm_package_dependencies_apexcharts": "^3.22.0", - "npm_package_devDependencies__types_rollup_plugin_visualizer": "^2.6.0", - "npm_package_devDependencies__types_fs_extra": "^9.0.2", - "GITHUB_TOKEN": "f5003f41e66eff1e868635b2e5a78f412b1741ee", - "NVM_BIN": "/Users/annsion/.nvm/versions/node/v12.16.1/bin", - "npm_config_user_agent": "yarn/1.21.1 npm/? node/v12.16.1 darwin x64", - "npm_config_ignore_scripts": "", - "npm_config_version_git_sign": "", - "npm_package_devDependencies__types_zxcvbn": "^4.4.0", - "npm_package_devDependencies__vue_compiler_sfc": "^3.0.2", - "npm_package_devDependencies_portfinder": "^1.0.28", - "GIT_ASKPASS": "/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/git/dist/askpass.sh", - "VSCODE_GIT_ASKPASS_NODE": "/Applications/Visual Studio Code.app/Contents/Frameworks/Code Helper (Renderer).app/Contents/MacOS/Code Helper (Renderer)", - "npm_package_scripts_reinstall": "rimraf yarn.lock && rimraf package.lock.json && rimraf node_modules && npm run bootstrap", - "npm_package_dependencies_mockjs": "^1.1.0", - "OCI_INC_DIR": "/usr/local/oracle/instantclient/sdk/include", - "npm_package_devDependencies__types_qrcode": "^1.3.5", - "OCI_LIB_DIR": "/usr/local/oracle/instantclient", - "npm_config_ignore_optional": "", - "npm_config_init_version": "1.0.0", - "npm_package_devDependencies__vuedx_typecheck": "^0.2.4-0", - "npm_package_scripts_clean_lib": "npx rimraf node_modules", - "npm_package_dependencies_vue_router": "^4.0.0-rc.1", - "npm_package_devDependencies__commitlint_config_conventional": "^11.0.0", - "npm_package_devDependencies_esno": "^0.2.4", - "npm_config_version_tag_prefix": "v", - "npm_package_dependencies_qrcode": "^1.4.4", - "npm_node_execpath": "/Users/annsion/.nvm/versions/node/v12.16.1/bin/node", - "COLORTERM": "truecolor", - "VITE_USE_MOCK": "true", - "VITE_PUBLIC_PATH": "/", - "VITE_PROXY": "/api,http://localhost:3000", - "VITE_DROP_CONSOLE": "false", - "VITE_GLOB_API_URL": "/api", - "VITE_GLOB_API_URL_PREFIX": "", - "VITE_PORT": "3100", - "VITE_GLOB_APP_TITLE": "Vben Admin", - "VITE_GLOB_APP_SHORT_NAME": "vue_vben_admin_2x" - }, - "userLimits": { - "core_file_size_blocks": { - "soft": 0, - "hard": "unlimited" - }, - "data_seg_size_kbytes": { - "soft": "unlimited", - "hard": "unlimited" - }, - "file_size_blocks": { - "soft": "unlimited", - "hard": "unlimited" - }, - "max_locked_memory_bytes": { - "soft": "unlimited", - "hard": "unlimited" - }, - "max_memory_size_kbytes": { - "soft": "unlimited", - "hard": "unlimited" - }, - "open_files": { - "soft": 24576, - "hard": "unlimited" - }, - "stack_size_bytes": { - "soft": 8388608, - "hard": 67104768 - }, - "cpu_time_seconds": { - "soft": "unlimited", - "hard": "unlimited" - }, - "max_user_processes": { - "soft": 2784, - "hard": 4176 - }, - "virtual_memory_kbytes": { - "soft": "unlimited", - "hard": "unlimited" - } - }, - "sharedObjects": [ - "/Users/annsion/.nvm/versions/node/v12.16.1/bin/node", - "/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation", - "/usr/lib/libSystem.B.dylib", - "/usr/lib/libc++.1.dylib", - "/usr/lib/libobjc.A.dylib", - "/usr/lib/libfakelink.dylib", - "/usr/lib/libDiagnosticMessagesClient.dylib", - "/usr/lib/libicucore.A.dylib", - "/usr/lib/libz.1.dylib", - "/usr/lib/libc++abi.dylib", - "/usr/lib/system/libcache.dylib", - "/usr/lib/system/libcommonCrypto.dylib", - "/usr/lib/system/libcompiler_rt.dylib", - "/usr/lib/system/libcopyfile.dylib", - "/usr/lib/system/libcorecrypto.dylib", - "/usr/lib/system/libdispatch.dylib", - "/usr/lib/system/libdyld.dylib", - "/usr/lib/system/libkeymgr.dylib", - "/usr/lib/system/liblaunch.dylib", - "/usr/lib/system/libmacho.dylib", - "/usr/lib/system/libquarantine.dylib", - "/usr/lib/system/libremovefile.dylib", - "/usr/lib/system/libsystem_asl.dylib", - "/usr/lib/system/libsystem_blocks.dylib", - "/usr/lib/system/libsystem_c.dylib", - "/usr/lib/system/libsystem_configuration.dylib", - "/usr/lib/system/libsystem_coreservices.dylib", - "/usr/lib/system/libsystem_darwin.dylib", - "/usr/lib/system/libsystem_dnssd.dylib", - "/usr/lib/system/libsystem_featureflags.dylib", - "/usr/lib/system/libsystem_info.dylib", - "/usr/lib/system/libsystem_m.dylib", - "/usr/lib/system/libsystem_malloc.dylib", - "/usr/lib/system/libsystem_networkextension.dylib", - "/usr/lib/system/libsystem_notify.dylib", - "/usr/lib/system/libsystem_sandbox.dylib", - "/usr/lib/system/libsystem_secinit.dylib", - "/usr/lib/system/libsystem_kernel.dylib", - "/usr/lib/system/libsystem_platform.dylib", - "/usr/lib/system/libsystem_pthread.dylib", - "/usr/lib/system/libsystem_symptoms.dylib", - "/usr/lib/system/libsystem_trace.dylib", - "/usr/lib/system/libunwind.dylib", - "/usr/lib/system/libxpc.dylib", - "/System/Library/CoreServices/Encodings/libSimplifiedChineseConverter.dylib", - "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices", - "/System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics", - "/System/Library/Frameworks/CoreText.framework/Versions/A/CoreText", - "/System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO", - "/System/Library/Frameworks/ColorSync.framework/Versions/A/ColorSync", - "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS", - "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSyncLegacy.framework/Versions/A/ColorSyncLegacy", - "/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices", - "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices", - "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis", - "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore", - "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD", - "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis", - "/System/Library/PrivateFrameworks/SkyLight.framework/Versions/A/SkyLight", - "/System/Library/PrivateFrameworks/FontServices.framework/libFontParser.dylib", - "/System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate", - "/System/Library/Frameworks/IOSurface.framework/Versions/A/IOSurface", - "/usr/lib/libxml2.2.dylib", - "/System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork", - "/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation", - "/System/Library/PrivateFrameworks/WatchdogClient.framework/Versions/A/WatchdogClient", - "/usr/lib/libcompression.dylib", - "/System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration", - "/System/Library/Frameworks/CoreDisplay.framework/Versions/A/CoreDisplay", - "/System/Library/PrivateFrameworks/IOAccelerator.framework/Versions/A/IOAccelerator", - "/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit", - "/System/Library/Frameworks/Metal.framework/Versions/A/Metal", - "/System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/MetalPerformanceShaders", - "/System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/A/MultitouchSupport", - "/System/Library/Frameworks/Security.framework/Versions/A/Security", - "/System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore", - "/usr/lib/libbsm.0.dylib", - "/usr/lib/liblzma.5.dylib", - "/usr/lib/libauto.dylib", - "/System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration", - "/usr/lib/libarchive.2.dylib", - "/usr/lib/liblangid.dylib", - "/usr/lib/libCRFSuite.dylib", - "/usr/lib/libenergytrace.dylib", - "/usr/lib/system/libkxld.dylib", - "/System/Library/PrivateFrameworks/AppleFSCompression.framework/Versions/A/AppleFSCompression", - "/usr/lib/libcoretls.dylib", - "/usr/lib/libcoretls_cfhelpers.dylib", - "/usr/lib/libpam.2.dylib", - "/usr/lib/libsqlite3.dylib", - "/usr/lib/libxar.1.dylib", - "/usr/lib/libbz2.1.0.dylib", - "/usr/lib/libiconv.2.dylib", - "/usr/lib/libcharset.1.dylib", - "/usr/lib/libnetwork.dylib", - "/usr/lib/libpcap.A.dylib", - "/usr/lib/libapple_nghttp2.dylib", - "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/FSEvents", - "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore", - "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata", - "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices", - "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit", - "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE", - "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices", - "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices", - "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList", - "/System/Library/Frameworks/NetFS.framework/Versions/A/NetFS", - "/System/Library/PrivateFrameworks/NetAuth.framework/Versions/A/NetAuth", - "/System/Library/PrivateFrameworks/login.framework/Versions/A/Frameworks/loginsupport.framework/Versions/A/loginsupport", - "/System/Library/PrivateFrameworks/TCC.framework/Versions/A/TCC", - "/System/Library/PrivateFrameworks/CoreNLP.framework/Versions/A/CoreNLP", - "/System/Library/PrivateFrameworks/MetadataUtilities.framework/Versions/A/MetadataUtilities", - "/usr/lib/libmecabra.dylib", - "/usr/lib/libmecab.dylib", - "/usr/lib/libgermantok.dylib", - "/usr/lib/libThaiTokenizer.dylib", - "/usr/lib/libChineseTokenizer.dylib", - "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage", - "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib", - "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib", - "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib", - "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib", - "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib", - "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLinearAlgebra.dylib", - "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparseBLAS.dylib", - "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libQuadrature.dylib", - "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBNNS.dylib", - "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparse.dylib", - "/System/Library/PrivateFrameworks/LanguageModeling.framework/Versions/A/LanguageModeling", - "/System/Library/PrivateFrameworks/CoreEmoji.framework/Versions/A/CoreEmoji", - "/System/Library/PrivateFrameworks/LinguisticData.framework/Versions/A/LinguisticData", - "/System/Library/PrivateFrameworks/Lexicon.framework/Versions/A/Lexicon", - "/usr/lib/libcmph.dylib", - "/System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory", - "/System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory", - "/System/Library/PrivateFrameworks/APFS.framework/Versions/A/APFS", - "/System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation", - "/usr/lib/libutil.dylib", - "/System/Library/PrivateFrameworks/CoreServicesStore.framework/Versions/A/CoreServicesStore", - "/System/Library/Frameworks/ServiceManagement.framework/Versions/A/ServiceManagement", - "/System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/BackgroundTaskManagement", - "/usr/lib/libxslt.1.dylib", - "/System/Library/PrivateFrameworks/GPUWrangler.framework/Versions/A/GPUWrangler", - "/System/Library/PrivateFrameworks/IOPresentment.framework/Versions/A/IOPresentment", - "/System/Library/PrivateFrameworks/DSExternalDisplay.framework/Versions/A/DSExternalDisplay", - "/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreFSCache.dylib", - "/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSCore.framework/Versions/A/MPSCore", - "/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSImage.framework/Versions/A/MPSImage", - "/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSNeuralNetwork.framework/Versions/A/MPSNeuralNetwork", - "/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSMatrix.framework/Versions/A/MPSMatrix", - "/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSRayIntersector.framework/Versions/A/MPSRayIntersector", - "/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSNDArray.framework/Versions/A/MPSNDArray", - "/System/Library/PrivateFrameworks/MetalTools.framework/Versions/A/MetalTools", - "/System/Library/PrivateFrameworks/AggregateDictionary.framework/Versions/A/AggregateDictionary", - "/System/Library/PrivateFrameworks/CoreAnalytics.framework/Versions/A/CoreAnalytics", - "/System/Library/PrivateFrameworks/AppleSauce.framework/Versions/A/AppleSauce", - "/usr/lib/libMobileGestalt.dylib", - "/System/Library/PrivateFrameworks/AppleSystemInfo.framework/Versions/A/AppleSystemInfo", - "/usr/lib/libIOReport.dylib", - "/System/Library/Frameworks/CoreImage.framework/Versions/A/CoreImage", - "/System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo", - "/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL", - "/System/Library/PrivateFrameworks/GraphVisualizer.framework/Versions/A/GraphVisualizer", - "/System/Library/PrivateFrameworks/FaceCore.framework/Versions/A/FaceCore", - "/System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL", - "/usr/lib/libFosl_dynamic.dylib", - "/System/Library/PrivateFrameworks/OTSVG.framework/Versions/A/OTSVG", - "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontRegistry.dylib", - "/usr/lib/libate.dylib", - "/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib", - "/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib", - "/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib", - "/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib", - "/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJP2.dylib", - "/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib", - "/usr/lib/libexpat.1.dylib", - "/System/Library/PrivateFrameworks/AppleJPEG.framework/Versions/A/AppleJPEG", - "/System/Library/PrivateFrameworks/FontServices.framework/libhvf.dylib", - "/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib", - "/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib", - "/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib", - "/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib", - "/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCVMSPluginSupport.dylib", - "/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreVMClient.dylib", - "/usr/lib/libncurses.5.4.dylib", - "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATSUI.framework/Versions/A/ATSUI", - "/usr/lib/libcups.2.dylib", - "/System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos", - "/System/Library/Frameworks/GSS.framework/Versions/A/GSS", - "/usr/lib/libresolv.9.dylib", - "/System/Library/PrivateFrameworks/Heimdal.framework/Versions/A/Heimdal", - "/System/Library/Frameworks/Kerberos.framework/Versions/A/Libraries/libHeimdalProxy.dylib", - "/usr/lib/libheimdal-asn1.dylib", - "/System/Library/PrivateFrameworks/CommonAuth.framework/Versions/A/CommonAuth", - "/System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio", - "/System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox", - "/System/Library/PrivateFrameworks/AssertionServices.framework/Versions/A/AssertionServices", - "/System/Library/PrivateFrameworks/AudioToolboxCore.framework/Versions/A/AudioToolboxCore", - "/System/Library/PrivateFrameworks/caulk.framework/Versions/A/caulk", - "/System/Library/PrivateFrameworks/BaseBoard.framework/Versions/A/BaseBoard", - "/System/Library/PrivateFrameworks/RunningBoardServices.framework/Versions/A/RunningBoardServices", - "/System/Library/PrivateFrameworks/PersistentConnection.framework/Versions/A/PersistentConnection", - "/System/Library/PrivateFrameworks/ProtocolBuffer.framework/Versions/A/ProtocolBuffer", - "/System/Library/PrivateFrameworks/CommonUtilities.framework/Versions/A/CommonUtilities", - "/System/Library/PrivateFrameworks/Bom.framework/Versions/A/Bom", - "/usr/lib/libAudioToolboxUtility.dylib", - "/Users/annsion/Documents/workspace_dev/vue-vben-admin-2.0/node_modules/fsevents/fsevents.node" - ] -} \ No newline at end of file diff --git a/src/assets/images/sidebar/dark-mini.png b/src/assets/images/sidebar/dark-mini.png deleted file mode 100644 index be98bfde4caa02ea2e51e61f2036c7e773ae89a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8551 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%0AorH4Ei_tp``>DTN?e}cs}!90=pG{Vn8;pr-6 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 Uwi*;gU;qFB07*qoM6N<$f~K}+Jpcdz diff --git a/src/components/Breadcrumb/Breadcrumb.vue b/src/components/Breadcrumb/Breadcrumb.vue index b37bd043..42e4ab95 100644 --- a/src/components/Breadcrumb/Breadcrumb.vue +++ b/src/components/Breadcrumb/Breadcrumb.vue @@ -35,9 +35,11 @@ @import (reference) '../../design/index.less'; .breadcrumb { + .unselect(); + height: @header-height; padding-right: 20px; - font-size: 14px; + font-size: 13px; line-height: @header-height; // line-height: 1; diff --git a/src/components/Icon/index.tsx b/src/components/Icon/index.tsx index e6844354..0c3f8442 100644 --- a/src/components/Icon/index.tsx +++ b/src/components/Icon/index.tsx @@ -72,7 +72,7 @@ export default defineComponent({ onMounted(update); return () => ( -
+
); }, }); diff --git a/src/components/Menu/src/BasicMenu.tsx b/src/components/Menu/src/BasicMenu.tsx index dee140b5..68abf4e6 100644 --- a/src/components/Menu/src/BasicMenu.tsx +++ b/src/components/Menu/src/BasicMenu.tsx @@ -2,21 +2,27 @@ import type { MenuState } from './types'; import type { Menu as MenuType } from '/@/router/types'; import { computed, defineComponent, unref, reactive, toRef, watch, onMounted, ref } from 'vue'; -import { basicProps } from './props'; import { Menu } from 'ant-design-vue'; -import { MenuModeEnum, MenuTypeEnum } from '/@/enums/menuEnum'; -import { menuStore } from '/@/store/modules/menu'; -import { getSlot } from '/@/utils/helper/tsxHelper'; -// import { ScrollContainer } from '/@/components/Container/index'; import SearchInput from './SearchInput.vue'; -import './index.less'; -import { menuHasChildren } from './helper'; import MenuContent from './MenuContent'; + +import { MenuModeEnum, MenuTypeEnum } from '/@/enums/menuEnum'; + +import { menuStore } from '/@/store/modules/menu'; +import { appStore } from '/@/store/modules/app'; + import { useSearchInput } from './useSearchInput'; import { useOpenKeys } from './useOpenKeys'; import { useRouter } from 'vue-router'; + import { isFunction } from '/@/utils/is'; +import { getSlot } from '/@/utils/helper/tsxHelper'; +import { menuHasChildren } from './helper'; + import { getCurrentParentPath } from '/@/router/menus'; + +import { basicProps } from './props'; +import './index.less'; export default defineComponent({ name: 'BasicMenu', props: basicProps, @@ -69,7 +75,7 @@ export default defineComponent({ return { height: `calc(100% - ${offset - 10}px)`, position: 'relative', - overflow: 'auto', + overflowY: 'auto', }; }); @@ -77,26 +83,26 @@ export default defineComponent({ const transparentMenuClass = computed(() => { const { type } = props; const { mode } = menuState; - if ( - [MenuTypeEnum.MIX, MenuTypeEnum.SIDEBAR].includes(type) && - mode !== MenuModeEnum.HORIZONTAL - ) { - return `basic-menu-bg__sidebar`; - } + const cls: string[] = []; if ( (type === MenuTypeEnum.TOP_MENU && mode === MenuModeEnum.HORIZONTAL) || props.appendClass ) { - return `basic-menu-bg__sidebar-hor`; + cls.push('basic-menu__sidebar-hor'); } - return ''; + + if (!props.isTop && props.isAppMenu && appStore.getProjectConfig.menuSetting.split) { + cls.push('basic-menu__second'); + } + return cls; }); watch( () => currentRoute.value.name, (name: string) => { - name !== 'Redirect' && handleMenuChange(); - getParentPath(); + if (name === 'Redirect') return; + handleMenuChange(); + props.isTop && appStore.getProjectConfig.menuSetting.split && getParentPath(); } ); @@ -149,22 +155,14 @@ export default defineComponent({ } const showTitle = computed(() => { - if (props.isTop) return true; - if (!props.isAppMenu) return true; - if (!props.collapsedShowTitle) { - return !menuStore.getCollapsedState; - } - return true; + return props.collapsedShowTitle && menuStore.getCollapsedState; }); // render menu item function renderMenuItem(menuList?: MenuType[], index = 1) { - if (!menuList) { - return; - } + if (!menuList) return; const { appendClass } = props; const levelCls = `basic-menu-item__level${index} ${menuState.theme} `; - return menuList.map((menu) => { if (!menu) { return null; @@ -233,7 +231,7 @@ export default defineComponent({ class={[ 'basic-menu', props.collapsedShowTitle && 'collapsed-show-title', - unref(transparentMenuClass), + ...unref(transparentMenuClass), ]} {...inlineCollapsedObj} > @@ -247,6 +245,7 @@ export default defineComponent({ onMounted(async () => { getParentPath(); }); + return () => { const { getCollapsedState } = menuStore; const { mode } = props; @@ -262,9 +261,8 @@ export default defineComponent({ onClick={handleInputClick} collapsed={getCollapsedState} /> -
+
{renderMenu()} - {/* {() => renderMenu()} */}
); diff --git a/src/components/Menu/src/MenuContent.tsx b/src/components/Menu/src/MenuContent.tsx index 6e0c93f4..6f907ab6 100644 --- a/src/components/Menu/src/MenuContent.tsx +++ b/src/components/Menu/src/MenuContent.tsx @@ -11,14 +11,17 @@ export default defineComponent({ type: String as PropType, default: '', }, + item: { type: Object as PropType, default: null, }, + showTitle: { type: Boolean as PropType, default: true, }, + level: { type: Number as PropType, default: 0, @@ -36,26 +39,27 @@ export default defineComponent({ if (!props.item) { return null; } - const { showTitle, level } = props; + const { showTitle } = props; const { name, icon } = props.item; const searchValue = props.searchValue || ''; const index = name.indexOf(searchValue); const beforeStr = name.substr(0, index); const afterStr = name.substr(index + searchValue.length); - const show = level === 1 ? showTitle : true; - return [ - renderIcon(icon!), - index > -1 && searchValue ? ( - - {beforeStr} - {searchValue} - {afterStr} - - ) : ( - {name} - ), - ]; + return ( + <> + {renderIcon(icon!)} + {index > -1 && searchValue ? ( + + {beforeStr} + {searchValue} + {afterStr} + + ) : ( + {name} + )} + + ); }; }, }); diff --git a/src/components/Menu/src/SearchInput.vue b/src/components/Menu/src/SearchInput.vue index 2a2424b1..5aeccfdc 100644 --- a/src/components/Menu/src/SearchInput.vue +++ b/src/components/Menu/src/SearchInput.vue @@ -5,7 +5,6 @@ class="menu-search-input__search" allowClear @change="handleChange" - :disabled="collapsed" /> @@ -20,7 +19,7 @@ export default defineComponent({ name: 'BasicMenuSearchInput', props: { - // 是否展开,用于左侧菜单 + // Whether to expand, used in the left menu collapsed: { type: Boolean as PropType, default: true, @@ -30,28 +29,27 @@ }, }, setup(props, { emit }) { + const [debounceEmitChange] = useDebounce(emitChange, 200); + function emitChange(value?: string): void { emit('change', value); } - const [debounceEmitChange] = useDebounce(emitChange, 200); - /** - * @description: 搜索 - */ + function handleChange(e: ChangeEvent): void { const { collapsed } = props; - if (collapsed) { - return; - } + if (collapsed) return; debounceEmitChange(e.target.value); } - /** - * @description: 点击时间 - */ + function handleClick(): void { emit('click'); } + const searchClass = computed(() => { - return props.theme ? `menu-search-input__search--${props.theme}` : ''; + const cls: string[] = []; + cls.push(props.theme ? `menu-search-input__search--${props.theme}` : ''); + // cls.push(props.collapsed ? 'hide-search-icon' : ''); + return cls; }); return { handleClick, searchClass, handleChange }; @@ -66,26 +64,24 @@ @icon-color: #c0c4cc; .menu-search-input { - margin: 12px 9px; + margin: 12px 8px; + + // &.hide-search-icon { + // .ant-input, + // .ant-input-suffix { + // opacity: 0; + // } + // } &__search--dark { .ant-input-affix-wrapper, .ant-input { .set-bg(); - - &:hover, - &:focus { - .hide-outline(); - } } .ant-input-search-icon, .ant-input-clear-icon { - color: rgba(255, 255, 255, 0.6) !important; - } - - .ant-input-clear-icon { - color: rgba(255, 255, 255, 0.3) !important; + color: rgba(255, 255, 255, 0.4) !important; } } @@ -94,13 +90,7 @@ .ant-input { color: @text-color-base; background: #fff; - // border: 0; outline: none; - - &:hover, - &:focus { - .hide-outline(); - } } .ant-input-search-icon { diff --git a/src/components/Menu/src/index.less b/src/components/Menu/src/index.less index 96829bab..54e50193 100644 --- a/src/components/Menu/src/index.less +++ b/src/components/Menu/src/index.less @@ -2,14 +2,11 @@ .active-style() { color: @white; - // background: @primary-color !important; background: linear-gradient( 118deg, rgba(@primary-color, 0.8), rgba(@primary-color, 1) ) !important; - // border-radius: 2px; - box-shadow: 0 0 4px 1px rgba(@primary-color, 0.7); } .active-menu-style() { @@ -22,50 +19,52 @@ .basic-menu { width: 100%; + &-wrap { + height: 100%; + } + + // collapsed show title start + .show-title { + max-width: unset !important; + opacity: 1 !important; + } + &.collapsed-show-title.ant-menu-inline-collapsed { .basic-menu-item__level1 { padding: 2px 0; } + & > li[role='menuitem']:not(.ant-menu-submenu), & > li > .ant-menu-submenu-title { display: flex; - margin-top: 12px; + margin-top: 10px; font-size: 12px; flex-direction: column; - line-height: 24px; align-items: center; } - & > li[role='menuitem']:not(.ant-menu-submenu) { - display: flex; - margin-top: 12px; - font-size: 12px; - line-height: 2; - align-items: center; - flex-direction: column; - - span { - margin-top: 6px; - } + & > li > .ant-menu-submenu-title { + line-height: 24px; } } - &__wrap { + // collapsed show title end + + // scrollbar -s tart + &__content { /* 滚动槽 */ &::-webkit-scrollbar { - width: 6px; - height: 6px; + width: 4px; + height: 4px; } - // TODO 滚动条样式-待修改 &::-webkit-scrollbar-track { background: rgba(0, 0, 0, 0); } - /* 滚动条滑块 */ &::-webkit-scrollbar-thumb { - background: rgba(255, 255, 255, 0.3); - border-radius: 4px; + background: rgba(255, 255, 255, 0.2); + border-radius: 3px; box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.1); } @@ -73,29 +72,10 @@ background: @border-color-dark; } } + // scrollbar end - .ant-menu-submenu:first-of-type { - margin-top: 4px; - } - - .ant-menu-submenu-title { - margin-top: 0; - } - - &-wrap { - height: 100%; - } - - .menu-item-icon { - vertical-align: text-top; - } - // 透明化背景 - &-bg__sidebar { - background-color: transparent; - } - - &-bg__sidebar-hor { - overflow: hidden; + &__sidebar-hor { + // overflow: hidden; &.ant-menu-horizontal { display: flex; @@ -107,6 +87,13 @@ } &.ant-menu-light { + .basic-menu-item__level1 { + &.top-active-menu { + color: @primary-color; + border-bottom: 3px solid @primary-color; + } + } + .ant-menu-item { &.basic-menu-item__level1 { height: @header-height; @@ -128,7 +115,6 @@ border-bottom: 3px solid @primary-color; } - // 有子菜单 .ant-menu-submenu { &:hover { border-bottom: 3px solid @primary-color; @@ -144,30 +130,44 @@ &.ant-menu-dark { background: transparent; + .ant-menu-submenu:hover, + .ant-menu-item-open, + .ant-menu-submenu-open, + .ant-menu-item-selected, + .ant-menu-submenu-selected, + .ant-menu-item:hover, + .ant-menu-item-active, + .ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open, + .ant-menu-submenu-active, + .ant-menu-submenu-title:hover { + color: #fff; + background: @top-menu-active-bg-color !important; + } + .ant-menu-item:hover, .ant-menu-item-active, .ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open, .ant-menu-submenu-active, .ant-menu-submenu-title:hover { background: @top-menu-active-bg-color; - // border-radius: 6px 6px 0 0; } .basic-menu-item__level1 { + background: transparent; + + &.top-active-menu { + color: @white; + background: @top-menu-active-bg-color; + border-radius: 2px 2px 0 0; + } + &.ant-menu-item-selected, &.ant-menu-submenu-selected { - background: @top-menu-active-bg-color; - // border-radius: 6px 6px 0 0; + background: @top-menu-active-bg-color !important; } } - .ant-menu-item { - &.basic-menu-item__level1 { - height: @header-height; - line-height: @header-height; - } - } - // 有子菜单 + .ant-menu-item, .ant-menu-submenu { &.basic-menu-item__level1, .ant-menu-submenu-title { @@ -178,24 +178,27 @@ } } } - // 重置菜单项行高 - .ant-menu-item, - .ant-menu-sub.ant-menu-inline > .ant-menu-item, - .ant-menu-sub.ant-menu-inline > .ant-menu-submenu > .ant-menu-submenu-title { - height: @app-menu-item-height; - margin: 0; - line-height: @app-menu-item-height; + + .ant-menu-item { + transition: unset; } - &.ant-menu-dark:not(.basic-menu-bg__sidebar-hor) { - .active-menu-style(); + &.ant-menu-dark:not(.basic-menu__sidebar-hor):not(.basic-menu__second) { + // Reset menu item row height + .ant-menu-item, + .ant-menu-sub.ant-menu-inline > .ant-menu-item, + .ant-menu-sub.ant-menu-inline > .ant-menu-submenu > .ant-menu-submenu-title { + height: @app-menu-item-height; + margin: 0; + line-height: @app-menu-item-height; + } } // 层级样式 - &.ant-menu-dark { - // .ant-menu-item { - // transition: unset; - // } + &.ant-menu-dark:not(.basic-menu__sidebar-hor) { + overflow-x: hidden; + background: @first-menu-item-dark-bg-color; + .active-menu-style(); .ant-menu-item.ant-menu-item-selected.basic-menu-menu-item__level1, .ant-menu-submenu-selected.basic-menu-menu-item__level1 { @@ -203,76 +206,44 @@ } .basic-menu-item__level1 { - margin-bottom: 0; + background-color: @first-menu-item-dark-bg-color; > .ant-menu-sub > li { background-color: @sub-menu-item-dark-bg-color; } - - &.top-active-menu { - color: @white; - background: @top-menu-active-bg-color; - border-radius: 6px 6px 0 0; - } } - // 2级菜单 - .basic-menu-item__level2:not(.ant-menu-item-selected), .ant-menu-sub { background-color: @sub-menu-item-dark-bg-color; } - .basic-menu-item__level2 { - margin-bottom: 0; - } - // 3级菜单 - .basic-menu-item__level3, - .basic-menu__popup { - margin-bottom: 0; - } - .basic-menu-item__level3:not(.ant-menu-item-selected) { background-color: @children-menu-item-dark-bg-color; } .ant-menu-submenu-title { - // line-height: @app-menu-item-height; display: flex; height: @app-menu-item-height; - margin: 0; + // margin: 0; align-items: center; } &.ant-menu-inline-collapsed { - .ant-menu-item-selected { - background: unset !important; - box-shadow: none; - } - .ant-menu-submenu-selected, .ant-menu-item-selected { - .active-style(); + background: darken(@first-menu-item-dark-bg-color, 6%) !important; } } } - &.ant-menu-light { + &.ant-menu-light:not(.basic-menu__sidebar-hor) { overflow-x: hidden; border-right: none; - .basic-menu-item__level1 { - &.top-active-menu { - color: @primary-color; - border-bottom: 3px solid @primary-color; - } - } - - &:not(.ant-menu-horizontal) { - .ant-menu-item-selected { - background: fade(@primary-color, 18%); - } - } + // .ant-menu-item-selected { + // background: fade(@primary-color, 18%); + // } .ant-menu-item.ant-menu-item-selected.basic-menu-menu-item__level1, .ant-menu-submenu-selected.basic-menu-menu-item__level1 { @@ -289,6 +260,20 @@ .ant-menu-item.ant-menu-item-selected { position: relative; } + + &.basic-menu__second.ant-menu-inline-collapsed:not(.basic-menu__sidebar-hor) { + // Reset menu item row height + .ant-menu-item, + .ant-menu-sub.ant-menu-inline > .ant-menu-item, + .ant-menu-sub.ant-menu-inline > .ant-menu-submenu > .ant-menu-submenu-title { + display: flex; + height: @app-menu-item-height * 1.4; + padding: 6px 0 !important; + margin: 0; + line-height: @app-menu-item-height; + align-items: center; + } + } } // 触发器样式 @@ -322,3 +307,24 @@ .active-menu-style(); } } + +.hide-title { + .ant-menu-inline-collapsed > .ant-menu-item, + .ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-item, + .ant-menu-inline-collapsed + > .ant-menu-item-group + > .ant-menu-item-group-list + > .ant-menu-submenu + > .ant-menu-submenu-title, + .ant-menu-inline-collapsed > .ant-menu-submenu > .ant-menu-submenu-title { + padding-right: 20px !important; + padding-left: 20px !important; + } + + .ant-menu-inline-collapsed { + .basic-menu-item__level1 { + display: flex; + justify-content: center; + } + } +} diff --git a/src/design/ant/btn.less b/src/design/ant/btn.less index b12746e2..91461ee2 100644 --- a/src/design/ant/btn.less +++ b/src/design/ant/btn.less @@ -1,11 +1,11 @@ // button重置 .ant-btn { - &.ant-btn-success:not(.ant-btn-link), - &.ant-btn-error:not(.ant-btn-link), - &.ant-btn-warning:not(.ant-btn-link), - &.ant-btn-primary:not(.ant-btn-link) { - box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.12), 0 2px 4px 0 rgba(0, 0, 0, 0.08) !important; - } + // &.ant-btn-success:not(.ant-btn-link), + // &.ant-btn-error:not(.ant-btn-link), + // &.ant-btn-warning:not(.ant-btn-link), + // &.ant-btn-primary:not(.ant-btn-link) { + // box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.12), 0 2px 4px 0 rgba(0, 0, 0, 0.08) !important; + // } &-primary { color: @white; diff --git a/src/design/color.less b/src/design/color.less index 98d56e18..44f644de 100644 --- a/src/design/color.less +++ b/src/design/color.less @@ -67,9 +67,9 @@ @first-menu-item-dark-bg-color: #273352; // 2级菜单黑暗背景色 -@sub-menu-item-dark-bg-color: #4f6088; +@sub-menu-item-dark-bg-color: #314268; // 3级菜单黑暗背景色 -@children-menu-item-dark-bg-color: #314268; +@children-menu-item-dark-bg-color: #4f6088; // top-menu @top-menu-active-bg-color: #273352; diff --git a/src/design/public.less b/src/design/public.less index 2bcaa9f2..15e575f8 100644 --- a/src/design/public.less +++ b/src/design/public.less @@ -1,19 +1,17 @@ /* 滚动槽 */ ::-webkit-scrollbar { - width: 8px; - height: 8px; + width: 6px; + height: 6px; } // TODO 滚动条样式-待修改 -// ::-webkit-scrollbar-track { -// // background: rgba(0, 0, 0, 0.06); -// // border-radius: 2px; -// // box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.05); -// } +::-webkit-scrollbar-track { + background: rgba(0, 0, 0, 0.05); +} /* 滚动条滑块 */ ::-webkit-scrollbar-thumb { - background: @disabled-color; + background: rgba(0, 0, 0, 0.2); border-radius: 4px; box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.1); } diff --git a/src/design/var/index.less b/src/design/var/index.less index 48029ce7..4df39e2e 100644 --- a/src/design/var/index.less +++ b/src/design/var/index.less @@ -12,7 +12,7 @@ @logo-width: 36px; // -@sider-drag-z-index: 200; +@side-drag-z-index: 200; @page-loading-z-index: 10000; // app menu diff --git a/src/layouts/default/LayoutBreadcrumb.tsx b/src/layouts/default/LayoutBreadcrumb.tsx index 2ede95b7..93449ce8 100644 --- a/src/layouts/default/LayoutBreadcrumb.tsx +++ b/src/layouts/default/LayoutBreadcrumb.tsx @@ -75,7 +75,7 @@ export default defineComponent({ } return () => ( - + {() => ( {() => { diff --git a/src/layouts/default/LayoutMenu.tsx b/src/layouts/default/LayoutMenu.tsx index e6cdb34b..abd2e352 100644 --- a/src/layouts/default/LayoutMenu.tsx +++ b/src/layouts/default/LayoutMenu.tsx @@ -109,8 +109,22 @@ export default defineComponent({ // 菜单分割模式-left if (splitType === MenuSplitTyeEnum.LEFT) { const children = await getChildrenMenus(parentPath); - if (!children) return; + if (!children) { + appStore.commitProjectConfigState({ + menuSetting: { + show: false, + }, + }); + flatMenusRef.value = []; + menusRef.value = []; + return; + } const flatChildren = await getFlatChildrenMenus(children); + appStore.commitProjectConfigState({ + menuSetting: { + show: true, + }, + }); flatMenusRef.value = flatChildren; menusRef.value = children; } diff --git a/src/layouts/default/LayoutSideBar.tsx b/src/layouts/default/LayoutSideBar.tsx index 8c6f2b9c..cbef7556 100644 --- a/src/layouts/default/LayoutSideBar.tsx +++ b/src/layouts/default/LayoutSideBar.tsx @@ -6,10 +6,9 @@ import { menuStore } from '/@/store/modules/menu'; // import darkMiniIMg from '/@/assets/images/sidebar/dark-mini.png'; // import lightMiniImg from '/@/assets/images/sidebar/light-mini.png'; -import darkImg from '/@/assets/images/sidebar/dark.png'; // import lightImg from '/@/assets/images/sidebar/light.png'; import { appStore } from '/@/store/modules/app'; -import { MenuModeEnum, MenuSplitTyeEnum, MenuThemeEnum } from '/@/enums/menuEnum'; +import { MenuModeEnum, MenuSplitTyeEnum } from '/@/enums/menuEnum'; import { SIDE_BAR_MINI_WIDTH, SIDE_BAR_SHOW_TIT_MINI_WIDTH } from '/@/enums/appEnum'; import { useDebounce } from '/@/hooks/core/useDebounce'; import LayoutMenu from './LayoutMenu'; @@ -34,26 +33,6 @@ export default defineComponent({ return collapsedShowTitle ? SIDE_BAR_SHOW_TIT_MINI_WIDTH : SIDE_BAR_MINI_WIDTH; }); - // 根据展开状态设置背景图片 - const getStyle = computed((): any => { - // const collapse = unref(collapseRef); - - const theme = unref(getProjectConfigRef).menuSetting.theme; - if (theme === MenuThemeEnum.LIGHT) { - // bg = lightImg; - return {}; - } - let bg = ''; - if (theme === MenuThemeEnum.DARK) { - // bg = collapse ? darkMiniIMg : darkImg; - bg = darkImg; - } - - return { - 'background-image': `url(${bg})`, - }; - }); - function onCollapseChange(val: boolean) { if (initRef.value) { collapseRef.value = val; @@ -182,7 +161,6 @@ export default defineComponent({ class="layout-sidebar" ref={sideRef} onBreakpoint={handleBreakpoint} - style={unref(getStyle)} > {{ trigger: () => , diff --git a/src/layouts/default/UserDropdown.tsx b/src/layouts/default/UserDropdown.tsx index 83c0acd1..22977aa9 100644 --- a/src/layouts/default/UserDropdown.tsx +++ b/src/layouts/default/UserDropdown.tsx @@ -26,14 +26,12 @@ export default defineComponent({ return { realName, desc }; }); - /** - * @description: 退出登录 - */ + // login out function handleLoginOut() { userStore.confirmLoginOut(); } - // 打开文档 + // open doc function openDoc() { window.open(DOC_URL, '__blank'); } diff --git a/src/layouts/default/index.less b/src/layouts/default/index.less index 696c6b03..3d46b377 100644 --- a/src/layouts/default/index.less +++ b/src/layouts/default/index.less @@ -66,6 +66,10 @@ .layout-sidebar { background-size: 100% 100%; + &.ant-layout-sider-dark { + background: @first-menu-item-dark-bg-color; + } + &:not(.ant-layout-sider-dark) { border-right: 1px solid @border-color-light; } @@ -79,7 +83,7 @@ position: absolute; top: 0; right: -2px; - z-index: @sider-drag-z-index; + z-index: @side-drag-z-index; width: 2px; height: 100%; cursor: col-resize; @@ -378,17 +382,3 @@ height: 36px; line-height: 36px; } - -.hide-title { - .ant-menu-inline-collapsed > .ant-menu-item, - .ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-item, - .ant-menu-inline-collapsed - > .ant-menu-item-group - > .ant-menu-item-group-list - > .ant-menu-submenu - > .ant-menu-submenu-title, - .ant-menu-inline-collapsed > .ant-menu-submenu > .ant-menu-submenu-title { - padding-right: 20px !important; - padding-left: 20px !important; - } -} diff --git a/src/layouts/default/index.tsx b/src/layouts/default/index.tsx index bcedf0e0..acfa3f4c 100644 --- a/src/layouts/default/index.tsx +++ b/src/layouts/default/index.tsx @@ -51,9 +51,9 @@ export default defineComponent({ const showSideBarRef = computed(() => { const { - menuSetting: { show, mode }, + menuSetting: { show, mode, split }, } = unref(getProjectConfigRef); - return show && mode !== MenuModeEnum.HORIZONTAL && !unref(getFullContent); + return split || (show && mode !== MenuModeEnum.HORIZONTAL && !unref(getFullContent)); }); // Get project configuration @@ -73,6 +73,7 @@ export default defineComponent({ showSettingButton, multiTabsSetting: { show: showTabs }, headerSetting: { fixed }, + menuSetting: { split, show }, } = unref(getProjectConfigRef); const fixedHeaderCls = fixed @@ -80,6 +81,8 @@ export default defineComponent({ : ''; const { isLock } = getLockInfo; + + const showSideBar = split ? show : true; return ( {() => ( @@ -95,7 +98,7 @@ export default defineComponent({ {() => ( <> - {unref(showSideBarRef) && } + {unref(showSideBarRef) && } {() => ( <> diff --git a/src/layouts/page/index.tsx b/src/layouts/page/index.tsx index 0a445a41..eb3f8097 100644 --- a/src/layouts/page/index.tsx +++ b/src/layouts/page/index.tsx @@ -38,14 +38,16 @@ export default defineComponent({ {{ default: ({ Component, route }: { Component: any; route: RouteLocation }) => { - // 已经位于tab内的不再显示动画 + // No longer show animations that are already in the tab const name = route.meta.inTab ? 'fade' : null; + + // TODO add key? const Content = openCache ? ( - + ) : ( - + ); return openRouterTransition ? ( { + tryOnUnmounted(() => { handleAfterEnter(); stop(); }); + return { handleAfterEnter, on: { diff --git a/src/settings/projectSetting.ts b/src/settings/projectSetting.ts index 9e0d9a58..c2daa2d5 100644 --- a/src/settings/projectSetting.ts +++ b/src/settings/projectSetting.ts @@ -49,7 +49,7 @@ const setting: ProjectConfig = { // 折叠菜单时候是否显示菜单名 collapsedShowTitle: false, // 是否可拖拽 - hasDrag: true, + hasDrag: false, // 是否显示 show: true, // 是否显示搜索框 diff --git a/src/setup/ant-design-vue/index.ts b/src/setup/ant-design-vue/index.ts index f8200f1b..5478d452 100644 --- a/src/setup/ant-design-vue/index.ts +++ b/src/setup/ant-design-vue/index.ts @@ -3,7 +3,7 @@ import type { App } from 'vue'; import { Form, Input, Row, Col } from 'ant-design-vue'; -import 'ant-design-vue/dist/antd.less'; +import 'ant-design-vue/dist/antd.css'; import './spin';