version: v4.9.7

This commit is contained in:
XiaoDaiGua-Ray 2024-10-16 09:51:56 +08:00
parent f9473114e7
commit 11cbf8bca3
16 changed files with 574 additions and 489 deletions

View File

@ -1,5 +1,34 @@
# CHANGE LOG # CHANGE LOG
## 4.9.7
从该版本开始,默认关闭了 `cdn` 构建生产环境;因为国内厂商真心不给力。
## Feats
- 更新 `vue` 版本至 `3.5.12`
- 更新 `@vueuse/core` 版本至 `11.1.0`
- 更新 `naive-ui` 版本至 `2.40.1`
- 更新 `MenuTag` 一些东西,移除了无用的 `ref` 注册,简化了代码;现在允许出现 `rootPath` 标签的关闭按钮了
- `useElementFullscreen` 新增 `currentWindowSize` 返回项,获取当前的窗口尺寸
- `RCollapseGrid` 组件默认开启 `bordered`
- `RCollapseGrid onUpdateValue` 方法更名为 `onUpdateOpen`
- `RTable` 组件默认开启 `wrapperBordered`
- `RTable` 组件默认开启 `bordered`
- 新增 `clearSigningCallback` 方法
- `vite.custom.config` 新增 `cdn` 配置项,是否启用 `cdn` 构建项目
- 配置 `cdn``false`,因为国内厂商更新资源速度有点慢,导致预览失败
- `Layout` 层注入 `--window-width`, `--window-height` `css var` 属性
- 稳定 `Layout` 层的 `css var` 属性
## Fixes
- 修复 `MenuTag` 鼠标移入并且加右键菜单操作时,会导致关闭按钮图标消失的问题
- 修复 `useElementFullscreen` 方法在窗口尺寸更新时,全屏元素失败的问题
- 修复 `MenuTag` 注入 `MENU_TAG_DATA` 错误的问题
- 修复 `Layout Content` 默认高度获取失败问题
- 修复 `RCollapseGrid` 组件自定义 `collapse` 插槽折叠失败的问题
## 4.9.6 ## 4.9.6
由于 `cdn` 厂商更新 `cdn` 资源太慢的缘故,所以目前 `vue` 的版本只有 `3.5.3` 会导致构建线上生产环境报错的问题。 由于 `cdn` 厂商更新 `cdn` 资源太慢的缘故,所以目前 `vue` 的版本只有 `3.5.3` 会导致构建线上生产环境报错的问题。

View File

@ -1,7 +1,7 @@
{ {
"name": "ray-template", "name": "ray-template",
"private": false, "private": false,
"version": "4.9.6", "version": "4.9.7",
"type": "module", "type": "module",
"engines": { "engines": {
"node": "^18.0.0 || >=20.0.0", "node": "^18.0.0 || >=20.0.0",
@ -33,7 +33,7 @@
] ]
}, },
"dependencies": { "dependencies": {
"@vueuse/core": "^10.9.0", "@vueuse/core": "^11.1.0",
"axios": "^1.7.5", "axios": "^1.7.5",
"clipboard": "^2.0.11", "clipboard": "^2.0.11",
"currency.js": "^2.0.4", "currency.js": "^2.0.4",
@ -44,11 +44,11 @@
"jsbarcode": "3.11.6", "jsbarcode": "3.11.6",
"lodash-es": "^4.17.21", "lodash-es": "^4.17.21",
"mockjs": "1.1.0", "mockjs": "1.1.0",
"naive-ui": "^2.39.0", "naive-ui": "^2.40.1",
"pinia": "^2.1.7", "pinia": "^2.2.4",
"pinia-plugin-persistedstate": "^4.0.1", "pinia-plugin-persistedstate": "^4.1.1",
"print-js": "^1.6.0", "print-js": "^1.6.0",
"vue": "^3.5.8", "vue": "^3.5.12",
"vue-demi": "0.14.6", "vue-demi": "0.14.6",
"vue-hooks-plus": "2.2.1", "vue-hooks-plus": "2.2.1",
"vue-i18n": "^9.13.1", "vue-i18n": "^9.13.1",

458
pnpm-lock.yaml generated
View File

@ -6,8 +6,8 @@ settings:
dependencies: dependencies:
'@vueuse/core': '@vueuse/core':
specifier: ^10.9.0 specifier: ^11.1.0
version: 10.9.0(vue@3.5.8) version: 11.1.0(vue@3.5.12)
axios: axios:
specifier: ^1.7.5 specifier: ^1.7.5
version: 1.7.5 version: 1.7.5
@ -39,32 +39,32 @@ dependencies:
specifier: 1.1.0 specifier: 1.1.0
version: 1.1.0 version: 1.1.0
naive-ui: naive-ui:
specifier: ^2.39.0 specifier: ^2.40.1
version: 2.39.0(vue@3.5.8) version: 2.40.1(vue@3.5.12)
pinia: pinia:
specifier: ^2.1.7 specifier: ^2.2.4
version: 2.1.7(typescript@5.2.2)(vue@3.5.8) version: 2.2.4(typescript@5.2.2)(vue@3.5.12)
pinia-plugin-persistedstate: pinia-plugin-persistedstate:
specifier: ^4.0.1 specifier: ^4.1.1
version: 4.0.1(pinia@2.1.7) version: 4.1.1(pinia@2.2.4)
print-js: print-js:
specifier: ^1.6.0 specifier: ^1.6.0
version: 1.6.0 version: 1.6.0
vue: vue:
specifier: ^3.5.8 specifier: ^3.5.12
version: 3.5.8(typescript@5.2.2) version: 3.5.12(typescript@5.2.2)
vue-demi: vue-demi:
specifier: 0.14.6 specifier: 0.14.6
version: 0.14.6(vue@3.5.8) version: 0.14.6(vue@3.5.12)
vue-hooks-plus: vue-hooks-plus:
specifier: 2.2.1 specifier: 2.2.1
version: 2.2.1(vue@3.5.8) version: 2.2.1(vue@3.5.12)
vue-i18n: vue-i18n:
specifier: ^9.13.1 specifier: ^9.13.1
version: 9.13.1(vue@3.5.8) version: 9.13.1(vue@3.5.12)
vue-router: vue-router:
specifier: ^4.3.2 specifier: ^4.3.2
version: 4.3.2(vue@3.5.8) version: 4.3.2(vue@3.5.12)
vue3-next-qrcode: vue3-next-qrcode:
specifier: 2.0.10 specifier: 2.0.10
version: 2.0.10(typescript@5.2.2) version: 2.0.10(typescript@5.2.2)
@ -105,10 +105,10 @@ devDependencies:
version: 6.21.0(eslint@8.57.0)(typescript@5.2.2) version: 6.21.0(eslint@8.57.0)(typescript@5.2.2)
'@vitejs/plugin-vue': '@vitejs/plugin-vue':
specifier: ^5.1.0 specifier: ^5.1.0
version: 5.1.0(vite@5.4.3)(vue@3.5.8) version: 5.1.0(vite@5.4.3)(vue@3.5.12)
'@vitejs/plugin-vue-jsx': '@vitejs/plugin-vue-jsx':
specifier: ^4.0.0 specifier: ^4.0.0
version: 4.0.0(vite@5.4.3)(vue@3.5.8) version: 4.0.0(vite@5.4.3)(vue@3.5.12)
'@vitest/ui': '@vitest/ui':
specifier: 1.4.0 specifier: 1.4.0
version: 1.4.0(vitest@1.5.2) version: 1.4.0(vitest@1.5.2)
@ -120,7 +120,7 @@ devDependencies:
version: 12.0.0(eslint-plugin-vue@9.25.0)(eslint@8.57.0)(typescript@5.2.2) version: 12.0.0(eslint-plugin-vue@9.25.0)(eslint@8.57.0)(typescript@5.2.2)
'@vue/test-utils': '@vue/test-utils':
specifier: 2.4.3 specifier: 2.4.3
version: 2.4.3(vue@3.5.8) version: 2.4.3(vue@3.5.12)
autoprefixer: autoprefixer:
specifier: ^10.4.16 specifier: ^10.4.16
version: 10.4.16(postcss@8.4.38) version: 10.4.16(postcss@8.4.38)
@ -174,10 +174,10 @@ devDependencies:
version: 5.2.2 version: 5.2.2
unplugin-auto-import: unplugin-auto-import:
specifier: ^0.18.2 specifier: ^0.18.2
version: 0.18.2(@vueuse/core@10.9.0) version: 0.18.2(@vueuse/core@11.1.0)
unplugin-vue-components: unplugin-vue-components:
specifier: ^0.27.4 specifier: ^0.27.4
version: 0.27.4(vue@3.5.8) version: 0.27.4(vue@3.5.12)
vite: vite:
specifier: ^5.4.3 specifier: ^5.4.3
version: 5.4.3(@types/node@20.5.1)(sass@1.71.1) version: 5.4.3(@types/node@20.5.1)(sass@1.71.1)
@ -386,7 +386,7 @@ packages:
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/traverse': 7.24.8 '@babel/traverse': 7.24.8
'@babel/types': 7.24.9 '@babel/types': 7.25.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
@ -442,7 +442,7 @@ packages:
resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/types': 7.24.9 '@babel/types': 7.25.2
dev: true dev: true
/@babel/helper-plugin-utils@7.24.8: /@babel/helper-plugin-utils@7.24.8:
@ -478,7 +478,7 @@ packages:
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/traverse': 7.24.8 '@babel/traverse': 7.24.8
'@babel/types': 7.24.9 '@babel/types': 7.25.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
@ -589,13 +589,6 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@babel/runtime@7.24.5:
resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==}
engines: {node: '>=6.9.0'}
dependencies:
regenerator-runtime: 0.14.1
dev: false
/@babel/standalone@7.25.6: /@babel/standalone@7.25.6:
resolution: {integrity: sha512-Kf2ZcZVqsKbtYhlA7sP0z5A3q5hmCVYMKMWRWNK/5OVwHIve3JY1djVRmIVAx8FMueLIfZGKQDIILK2w8zO4mg==} resolution: {integrity: sha512-Kf2ZcZVqsKbtYhlA7sP0z5A3q5hmCVYMKMWRWNK/5OVwHIve3JY1djVRmIVAx8FMueLIfZGKQDIILK2w8zO4mg==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
@ -843,12 +836,12 @@ packages:
css-render: 0.15.14 css-render: 0.15.14
dev: false dev: false
/@css-render/vue3-ssr@0.15.14(vue@3.5.8): /@css-render/vue3-ssr@0.15.14(vue@3.5.12):
resolution: {integrity: sha512-//8027GSbxE9n3QlD73xFY6z4ZbHbvrOVB7AO6hsmrEzGbg+h2A09HboUyDgu+xsmj7JnvJD39Irt+2D0+iV8g==} resolution: {integrity: sha512-//8027GSbxE9n3QlD73xFY6z4ZbHbvrOVB7AO6hsmrEzGbg+h2A09HboUyDgu+xsmj7JnvJD39Irt+2D0+iV8g==}
peerDependencies: peerDependencies:
vue: ^3.0.11 vue: ^3.0.11
dependencies: dependencies:
vue: 3.5.8(typescript@5.2.2) vue: 3.5.12(typescript@5.2.2)
dev: false dev: false
/@emotion/hash@0.8.0: /@emotion/hash@0.8.0:
@ -1359,7 +1352,7 @@ packages:
jsonc-eslint-parser: 2.4.0 jsonc-eslint-parser: 2.4.0
mlly: 1.6.1 mlly: 1.6.1
source-map-js: 1.2.0 source-map-js: 1.2.0
vue-i18n: 9.13.1(vue@3.5.8) vue-i18n: 9.13.1(vue@3.5.12)
yaml-eslint-parser: 1.2.2 yaml-eslint-parser: 1.2.2
dev: true dev: true
@ -1408,7 +1401,7 @@ packages:
picocolors: 1.0.1 picocolors: 1.0.1
source-map-js: 1.2.0 source-map-js: 1.2.0
unplugin: 1.10.1 unplugin: 1.10.1
vue-i18n: 9.13.1(vue@3.5.8) vue-i18n: 9.13.1(vue@3.5.12)
transitivePeerDependencies: transitivePeerDependencies:
- rollup - rollup
- supports-color - supports-color
@ -1487,11 +1480,11 @@ packages:
'@nodelib/fs.scandir': 2.1.5 '@nodelib/fs.scandir': 2.1.5
fastq: 1.17.1 fastq: 1.17.1
/@nuxt/kit@3.13.1: /@nuxt/kit@3.13.2:
resolution: {integrity: sha512-FkUL349lp/3nVfTIyws4UDJ3d2jyv5Pk1DC1HQUCOkSloYYMdbRcQAUcb4fe2TCLNWvHM+FhU8jnzGTzjALZYA==} resolution: {integrity: sha512-KvRw21zU//wdz25IeE1E5m/aFSzhJloBRAQtv+evcFeZvuroIxpIQuUqhbzuwznaUwpiWbmwlcsp5uOWmi4vwA==}
engines: {node: ^14.18.0 || >=16.10.0} engines: {node: ^14.18.0 || >=16.10.0}
dependencies: dependencies:
'@nuxt/schema': 3.13.1 '@nuxt/schema': 3.13.2
c12: 1.11.2 c12: 1.11.2
consola: 3.2.3 consola: 3.2.3
defu: 6.1.4 defu: 6.1.4
@ -1509,7 +1502,7 @@ packages:
semver: 7.6.3 semver: 7.6.3
ufo: 1.5.4 ufo: 1.5.4
unctx: 2.3.1 unctx: 2.3.1
unimport: 3.11.1 unimport: 3.13.1
untyped: 1.4.2 untyped: 1.4.2
transitivePeerDependencies: transitivePeerDependencies:
- magicast - magicast
@ -1518,8 +1511,8 @@ packages:
- webpack-sources - webpack-sources
dev: false dev: false
/@nuxt/schema@3.13.1: /@nuxt/schema@3.13.2:
resolution: {integrity: sha512-ishbhzVGspjshG9AG0hYnKYY6LWXzCtua7OXV7C/DQ2yA7rRcy1xHpzKZUDbIRyxCHHCAcBd8jfHEUmEuhEPrA==} resolution: {integrity: sha512-CCZgpm+MkqtOMDEgF9SWgGPBXlQ01hV/6+2reDEpJuqFPGzV8HYKPBcIFvn7/z5ahtgutHLzjP71Na+hYcqSpw==}
engines: {node: ^14.18.0 || >=16.10.0} engines: {node: ^14.18.0 || >=16.10.0}
dependencies: dependencies:
compatx: 0.1.8 compatx: 0.1.8
@ -1532,7 +1525,7 @@ packages:
std-env: 3.7.0 std-env: 3.7.0
ufo: 1.5.4 ufo: 1.5.4
uncrypto: 0.1.3 uncrypto: 0.1.3
unimport: 3.11.1 unimport: 3.13.1
untyped: 1.4.2 untyped: 1.4.2
transitivePeerDependencies: transitivePeerDependencies:
- rollup - rollup
@ -1586,6 +1579,21 @@ packages:
'@types/estree': 1.0.5 '@types/estree': 1.0.5
estree-walker: 2.0.2 estree-walker: 2.0.2
picomatch: 2.3.1 picomatch: 2.3.1
dev: true
/@rollup/pluginutils@5.1.2:
resolution: {integrity: sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==}
engines: {node: '>=14.0.0'}
peerDependencies:
rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
peerDependenciesMeta:
rollup:
optional: true
dependencies:
'@types/estree': 1.0.5
estree-walker: 2.0.2
picomatch: 2.3.1
dev: false
/@rollup/rollup-android-arm-eabi@4.20.0: /@rollup/rollup-android-arm-eabi@4.20.0:
resolution: {integrity: sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==} resolution: {integrity: sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==}
@ -1980,7 +1988,7 @@ packages:
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
dev: true dev: true
/@vitejs/plugin-vue-jsx@4.0.0(vite@5.4.3)(vue@3.5.8): /@vitejs/plugin-vue-jsx@4.0.0(vite@5.4.3)(vue@3.5.12):
resolution: {integrity: sha512-A+6wL2AdQhDsLsDnY+2v4rRDI1HLJGIMc97a8FURO9tqKsH5QvjWrzsa5DH3NlZsM742W2wODl2fF+bfcTWtXw==} resolution: {integrity: sha512-A+6wL2AdQhDsLsDnY+2v4rRDI1HLJGIMc97a8FURO9tqKsH5QvjWrzsa5DH3NlZsM742W2wODl2fF+bfcTWtXw==}
engines: {node: ^18.0.0 || >=20.0.0} engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies: peerDependencies:
@ -1991,12 +1999,12 @@ packages:
'@babel/plugin-transform-typescript': 7.24.8(@babel/core@7.24.7) '@babel/plugin-transform-typescript': 7.24.8(@babel/core@7.24.7)
'@vue/babel-plugin-jsx': 1.2.2(@babel/core@7.24.7) '@vue/babel-plugin-jsx': 1.2.2(@babel/core@7.24.7)
vite: 5.4.3(@types/node@20.5.1)(sass@1.71.1) vite: 5.4.3(@types/node@20.5.1)(sass@1.71.1)
vue: 3.5.8(typescript@5.2.2) vue: 3.5.12(typescript@5.2.2)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
/@vitejs/plugin-vue@5.1.0(vite@5.4.3)(vue@3.5.8): /@vitejs/plugin-vue@5.1.0(vite@5.4.3)(vue@3.5.12):
resolution: {integrity: sha512-QMRxARyrdiwi1mj3AW4fLByoHTavreXq0itdEW696EihXglf1MB3D4C2gBvE0jMPH29ZjC3iK8aIaUMLf4EOGA==} resolution: {integrity: sha512-QMRxARyrdiwi1mj3AW4fLByoHTavreXq0itdEW696EihXglf1MB3D4C2gBvE0jMPH29ZjC3iK8aIaUMLf4EOGA==}
engines: {node: ^18.0.0 || >=20.0.0} engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies: peerDependencies:
@ -2004,7 +2012,7 @@ packages:
vue: ^3.2.25 vue: ^3.2.25
dependencies: dependencies:
vite: 5.4.3(@types/node@20.5.1)(sass@1.71.1) vite: 5.4.3(@types/node@20.5.1)(sass@1.71.1)
vue: 3.5.8(typescript@5.2.2) vue: 3.5.12(typescript@5.2.2)
dev: true dev: true
/@vitest/expect@1.5.2: /@vitest/expect@1.5.2:
@ -2127,7 +2135,7 @@ packages:
'@babel/helper-module-imports': 7.22.15 '@babel/helper-module-imports': 7.22.15
'@babel/helper-plugin-utils': 7.24.8 '@babel/helper-plugin-utils': 7.24.8
'@babel/parser': 7.24.8 '@babel/parser': 7.24.8
'@vue/compiler-sfc': 3.4.36 '@vue/compiler-sfc': 3.5.11
dev: true dev: true
/@vue/compiler-core@3.4.21: /@vue/compiler-core@3.4.21:
@ -2150,21 +2158,21 @@ packages:
source-map-js: 1.2.0 source-map-js: 1.2.0
dev: true dev: true
/@vue/compiler-core@3.4.36: /@vue/compiler-core@3.5.11:
resolution: {integrity: sha512-qBkndgpwFKdupmOPoiS10i7oFdN7a+4UNDlezD0GlQ1kuA1pNrscg9g12HnB5E8hrWSuEftRsbJhL1HI2zpJhg==} resolution: {integrity: sha512-PwAdxs7/9Hc3ieBO12tXzmTD+Ln4qhT/56S+8DvrrZ4kLDn4Z/AMUr8tXJD0axiJBS0RKIoNaR0yMuQB9v9Udg==}
dependencies: dependencies:
'@babel/parser': 7.25.3 '@babel/parser': 7.25.3
'@vue/shared': 3.4.36 '@vue/shared': 3.5.11
entities: 5.0.0 entities: 4.5.0
estree-walker: 2.0.2 estree-walker: 2.0.2
source-map-js: 1.2.0 source-map-js: 1.2.1
dev: true dev: true
/@vue/compiler-core@3.5.8: /@vue/compiler-core@3.5.12:
resolution: {integrity: sha512-Uzlxp91EPjfbpeO5KtC0KnXPkuTfGsNDeaKQJxQN718uz+RqDYarEf7UhQJGK+ZYloD2taUbHTI2J4WrUaZQNA==} resolution: {integrity: sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==}
dependencies: dependencies:
'@babel/parser': 7.25.3 '@babel/parser': 7.25.3
'@vue/shared': 3.5.8 '@vue/shared': 3.5.12
entities: 4.5.0 entities: 4.5.0
estree-walker: 2.0.2 estree-walker: 2.0.2
source-map-js: 1.2.1 source-map-js: 1.2.1
@ -2183,18 +2191,18 @@ packages:
'@vue/shared': 3.4.27 '@vue/shared': 3.4.27
dev: true dev: true
/@vue/compiler-dom@3.4.36: /@vue/compiler-dom@3.5.11:
resolution: {integrity: sha512-eEIjy4GwwZTFon/Y+WO8tRRNGqylaRlA79T1RLhUpkOzJ7EtZkkb8MurNfkqY6x6Qiu0R7ESspEF7GkPR/4yYg==} resolution: {integrity: sha512-pyGf8zdbDDRkBrEzf8p7BQlMKNNF5Fk/Cf/fQ6PiUz9at4OaUfyXW0dGJTo2Vl1f5U9jSLCNf0EZJEogLXoeew==}
dependencies: dependencies:
'@vue/compiler-core': 3.4.36 '@vue/compiler-core': 3.5.11
'@vue/shared': 3.4.36 '@vue/shared': 3.5.11
dev: true dev: true
/@vue/compiler-dom@3.5.8: /@vue/compiler-dom@3.5.12:
resolution: {integrity: sha512-GUNHWvoDSbSa5ZSHT9SnV5WkStWfzJwwTd6NMGzilOE/HM5j+9EB9zGXdtu/fCNEmctBqMs6C9SvVPpVPuk1Eg==} resolution: {integrity: sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==}
dependencies: dependencies:
'@vue/compiler-core': 3.5.8 '@vue/compiler-core': 3.5.12
'@vue/shared': 3.5.8 '@vue/shared': 3.5.12
/@vue/compiler-sfc@3.4.21: /@vue/compiler-sfc@3.4.21:
resolution: {integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==} resolution: {integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==}
@ -2224,28 +2232,28 @@ packages:
source-map-js: 1.2.0 source-map-js: 1.2.0
dev: true dev: true
/@vue/compiler-sfc@3.4.36: /@vue/compiler-sfc@3.5.11:
resolution: {integrity: sha512-rhuHu7qztt/rNH90dXPTzhB7hLQT2OC4s4GrPVqmzVgPY4XBlfWmcWzn4bIPEWNImt0CjO7kfHAf/1UXOtx3vw==} resolution: {integrity: sha512-gsbBtT4N9ANXXepprle+X9YLg2htQk1sqH/qGJ/EApl+dgpUBdTv3yP7YlR535uHZY3n6XaR0/bKo0BgwwDniw==}
dependencies: dependencies:
'@babel/parser': 7.25.3 '@babel/parser': 7.25.3
'@vue/compiler-core': 3.4.36 '@vue/compiler-core': 3.5.11
'@vue/compiler-dom': 3.4.36 '@vue/compiler-dom': 3.5.11
'@vue/compiler-ssr': 3.4.36 '@vue/compiler-ssr': 3.5.11
'@vue/shared': 3.4.36 '@vue/shared': 3.5.11
estree-walker: 2.0.2 estree-walker: 2.0.2
magic-string: 0.30.11 magic-string: 0.30.11
postcss: 8.4.40 postcss: 8.4.47
source-map-js: 1.2.0 source-map-js: 1.2.1
dev: true dev: true
/@vue/compiler-sfc@3.5.8: /@vue/compiler-sfc@3.5.12:
resolution: {integrity: sha512-taYpngQtSysrvO9GULaOSwcG5q821zCoIQBtQQSx7Uf7DxpR6CIHR90toPr9QfDD2mqHQPCSgoWBvJu0yV9zjg==} resolution: {integrity: sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==}
dependencies: dependencies:
'@babel/parser': 7.25.3 '@babel/parser': 7.25.3
'@vue/compiler-core': 3.5.8 '@vue/compiler-core': 3.5.12
'@vue/compiler-dom': 3.5.8 '@vue/compiler-dom': 3.5.12
'@vue/compiler-ssr': 3.5.8 '@vue/compiler-ssr': 3.5.12
'@vue/shared': 3.5.8 '@vue/shared': 3.5.12
estree-walker: 2.0.2 estree-walker: 2.0.2
magic-string: 0.30.11 magic-string: 0.30.11
postcss: 8.4.47 postcss: 8.4.47
@ -2265,18 +2273,18 @@ packages:
'@vue/shared': 3.4.27 '@vue/shared': 3.4.27
dev: true dev: true
/@vue/compiler-ssr@3.4.36: /@vue/compiler-ssr@3.5.11:
resolution: {integrity: sha512-Wt1zyheF0zVvRJyhY74uxQbnkXV2Le/JPOrAxooR4rFYKC7cFr+cRqW6RU3cM/bsTy7sdZ83IDuy/gLPSfPGng==} resolution: {integrity: sha512-P4+GPjOuC2aFTk1Z4WANvEhyOykcvEd5bIj2KVNGKGfM745LaXGr++5njpdBTzVz5pZifdlR1kpYSJJpIlSePA==}
dependencies: dependencies:
'@vue/compiler-dom': 3.4.36 '@vue/compiler-dom': 3.5.11
'@vue/shared': 3.4.36 '@vue/shared': 3.5.11
dev: true dev: true
/@vue/compiler-ssr@3.5.8: /@vue/compiler-ssr@3.5.12:
resolution: {integrity: sha512-W96PtryNsNG9u0ZnN5Q5j27Z/feGrFV6zy9q5tzJVyJaLiwYxvC0ek4IXClZygyhjm+XKM7WD9pdKi/wIRVC/Q==} resolution: {integrity: sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==}
dependencies: dependencies:
'@vue/compiler-dom': 3.5.8 '@vue/compiler-dom': 3.5.12
'@vue/shared': 3.5.8 '@vue/shared': 3.5.12
/@vue/devtools-api@6.6.1: /@vue/devtools-api@6.6.1:
resolution: {integrity: sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==} resolution: {integrity: sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==}
@ -2329,8 +2337,8 @@ packages:
optional: true optional: true
dependencies: dependencies:
'@volar/language-core': 2.2.0-alpha.8 '@volar/language-core': 2.2.0-alpha.8
'@vue/compiler-dom': 3.4.36 '@vue/compiler-dom': 3.5.11
'@vue/shared': 3.4.36 '@vue/shared': 3.5.11
computeds: 0.0.1 computeds: 0.0.1
minimatch: 9.0.5 minimatch: 9.0.5
path-browserify: 1.0.1 path-browserify: 1.0.1
@ -2338,33 +2346,33 @@ packages:
vue-template-compiler: 2.7.16 vue-template-compiler: 2.7.16
dev: true dev: true
/@vue/reactivity@3.5.8: /@vue/reactivity@3.5.12:
resolution: {integrity: sha512-mlgUyFHLCUZcAYkqvzYnlBRCh0t5ZQfLYit7nukn1GR96gc48Bp4B7OIcSfVSvlG1k3BPfD+p22gi1t2n9tsXg==} resolution: {integrity: sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg==}
dependencies: dependencies:
'@vue/shared': 3.5.8 '@vue/shared': 3.5.12
/@vue/runtime-core@3.5.8: /@vue/runtime-core@3.5.12:
resolution: {integrity: sha512-fJuPelh64agZ8vKkZgp5iCkPaEqFJsYzxLk9vSC0X3G8ppknclNDr61gDc45yBGTaN5Xqc1qZWU3/NoaBMHcjQ==} resolution: {integrity: sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw==}
dependencies: dependencies:
'@vue/reactivity': 3.5.8 '@vue/reactivity': 3.5.12
'@vue/shared': 3.5.8 '@vue/shared': 3.5.12
/@vue/runtime-dom@3.5.8: /@vue/runtime-dom@3.5.12:
resolution: {integrity: sha512-DpAUz+PKjTZPUOB6zJgkxVI3GuYc2iWZiNeeHQUw53kdrparSTG6HeXUrYDjaam8dVsCdvQxDz6ZWxnyjccUjQ==} resolution: {integrity: sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA==}
dependencies: dependencies:
'@vue/reactivity': 3.5.8 '@vue/reactivity': 3.5.12
'@vue/runtime-core': 3.5.8 '@vue/runtime-core': 3.5.12
'@vue/shared': 3.5.8 '@vue/shared': 3.5.12
csstype: 3.1.3 csstype: 3.1.3
/@vue/server-renderer@3.5.8(vue@3.5.8): /@vue/server-renderer@3.5.12(vue@3.5.12):
resolution: {integrity: sha512-7AmC9/mEeV9mmXNVyUIm1a1AjUhyeeGNbkLh39J00E7iPeGks8OGRB5blJiMmvqSh8SkaS7jkLWSpXtxUCeagA==} resolution: {integrity: sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg==}
peerDependencies: peerDependencies:
vue: 3.5.8 vue: 3.5.12
dependencies: dependencies:
'@vue/compiler-ssr': 3.5.8 '@vue/compiler-ssr': 3.5.12
'@vue/shared': 3.5.8 '@vue/shared': 3.5.12
vue: 3.5.8(typescript@5.2.2) vue: 3.5.12(typescript@5.2.2)
/@vue/shared@3.4.21: /@vue/shared@3.4.21:
resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==}
@ -2374,14 +2382,14 @@ packages:
resolution: {integrity: sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==} resolution: {integrity: sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==}
dev: true dev: true
/@vue/shared@3.4.36: /@vue/shared@3.5.11:
resolution: {integrity: sha512-fdPLStwl1sDfYuUftBaUVn2pIrVFDASYerZSrlBvVBfylObPA1gtcWJHy5Ox8jLEJ524zBibss488Q3SZtU1uA==} resolution: {integrity: sha512-W8GgysJVnFo81FthhzurdRAWP/byq3q2qIw70e0JWblzVhjgOMiC2GyovXrZTFQJnFVryYaKGP3Tc9vYzYm6PQ==}
dev: true dev: true
/@vue/shared@3.5.8: /@vue/shared@3.5.12:
resolution: {integrity: sha512-mJleSWbAGySd2RJdX1RBtcrUBX6snyOc0qHpgk3lGi4l9/P/3ny3ELqFWqYdkXIwwNN/kdm8nD9ky8o6l/Lx2A==} resolution: {integrity: sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==}
/@vue/test-utils@2.4.3(vue@3.5.8): /@vue/test-utils@2.4.3(vue@3.5.12):
resolution: {integrity: sha512-F4K7mF+ad++VlTrxMJVRnenKSJmO6fkQt2wpRDiKDesQMkfpniGWsqEi/JevxGBo2qEkwwjvTUAoiGJLNx++CA==} resolution: {integrity: sha512-F4K7mF+ad++VlTrxMJVRnenKSJmO6fkQt2wpRDiKDesQMkfpniGWsqEi/JevxGBo2qEkwwjvTUAoiGJLNx++CA==}
peerDependencies: peerDependencies:
'@vue/server-renderer': ^3.0.1 '@vue/server-renderer': ^3.0.1
@ -2391,28 +2399,28 @@ packages:
optional: true optional: true
dependencies: dependencies:
js-beautify: 1.14.11 js-beautify: 1.14.11
vue: 3.5.8(typescript@5.2.2) vue: 3.5.12(typescript@5.2.2)
vue-component-type-helpers: 1.8.26 vue-component-type-helpers: 1.8.26
dev: true dev: true
/@vueuse/core@10.9.0(vue@3.5.8): /@vueuse/core@11.1.0(vue@3.5.12):
resolution: {integrity: sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==} resolution: {integrity: sha512-P6dk79QYA6sKQnghrUz/1tHi0n9mrb/iO1WTMk/ElLmTyNqgDeSZ3wcDf6fRBGzRJbeG1dxzEOvLENMjr+E3fg==}
dependencies: dependencies:
'@types/web-bluetooth': 0.0.20 '@types/web-bluetooth': 0.0.20
'@vueuse/metadata': 10.9.0 '@vueuse/metadata': 11.1.0
'@vueuse/shared': 10.9.0(vue@3.5.8) '@vueuse/shared': 11.1.0(vue@3.5.12)
vue-demi: 0.14.7(vue@3.5.8) vue-demi: 0.14.10(vue@3.5.12)
transitivePeerDependencies: transitivePeerDependencies:
- '@vue/composition-api' - '@vue/composition-api'
- vue - vue
/@vueuse/metadata@10.9.0: /@vueuse/metadata@11.1.0:
resolution: {integrity: sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA==} resolution: {integrity: sha512-l9Q502TBTaPYGanl1G+hPgd3QX5s4CGnpXriVBR5fEZ/goI6fvDaVmIl3Td8oKFurOxTmbXvBPSsgrd6eu6HYg==}
/@vueuse/shared@10.9.0(vue@3.5.8): /@vueuse/shared@11.1.0(vue@3.5.12):
resolution: {integrity: sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==} resolution: {integrity: sha512-YUtIpY122q7osj+zsNMFAfMTubGz0sn5QzE5gPzAIiCmtt2ha3uQUY1+JPyL4gRCTsLPX82Y9brNbo/aqlA91w==}
dependencies: dependencies:
vue-demi: 0.14.7(vue@3.5.8) vue-demi: 0.14.10(vue@3.5.12)
transitivePeerDependencies: transitivePeerDependencies:
- '@vue/composition-api' - '@vue/composition-api'
- vue - vue
@ -3458,19 +3466,16 @@ packages:
is-data-view: 1.0.1 is-data-view: 1.0.1
dev: true dev: true
/date-fns-tz@2.0.1(date-fns@2.30.0): /date-fns-tz@3.1.3(date-fns@3.6.0):
resolution: {integrity: sha512-fJCG3Pwx8HUoLhkepdsP7Z5RsucUi+ZBOxyM5d0ZZ6c4SdYustq0VMmOu6Wf7bli+yS/Jwp91TOCqn9jMcVrUA==} resolution: {integrity: sha512-ZfbMu+nbzW0mEzC8VZrLiSWvUIaI3aRHeq33mTe7Y38UctKukgqPR4nTDwcwS4d64Gf8GghnVsroBuMY3eiTeA==}
peerDependencies: peerDependencies:
date-fns: 2.x date-fns: ^3.0.0
dependencies: dependencies:
date-fns: 2.30.0 date-fns: 3.6.0
dev: false dev: false
/date-fns@2.30.0: /date-fns@3.6.0:
resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==}
engines: {node: '>=0.11'}
dependencies:
'@babel/runtime': 7.24.5
dev: false dev: false
/dayjs@1.11.10: /dayjs@1.11.10:
@ -3566,8 +3571,8 @@ packages:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
dev: true dev: true
/deep-pick-omit@1.2.0: /deep-pick-omit@1.2.1:
resolution: {integrity: sha512-2CGvfTM2c+IP/MhdRZMpaHhTc6zIlgz3tQXJ/VGAkc7mjMrjqSU28qiI63yEcy+fcYfd/K+NNJcGRzap4M4bqw==} resolution: {integrity: sha512-2J6Kc/m3irCeqVG42T+SaUMesaK7oGWaedGnQQK/+O0gYc+2SP5bKh/KKTE7d7SJ+GCA9UUE1GRzh6oDe0EnGw==}
dev: false dev: false
/deepmerge@1.3.2: /deepmerge@1.3.2:
@ -3842,7 +3847,7 @@ packages:
'@one-ini/wasm': 0.1.1 '@one-ini/wasm': 0.1.1
commander: 10.0.1 commander: 10.0.1
minimatch: 9.0.1 minimatch: 9.0.1
semver: 7.6.2 semver: 7.6.3
dev: true dev: true
/ejs@3.1.9: /ejs@3.1.9:
@ -3889,11 +3894,6 @@ packages:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'} engines: {node: '>=0.12'}
/entities@5.0.0:
resolution: {integrity: sha512-BeJFvFRJddxobhvEdm5GqHzRV/X+ACeuw0/BuuxsCh1EUZcAIz8+kYmBp/LrQuloy6K1f3a0M7+IhmZ7QnkISA==}
engines: {node: '>=0.12'}
dev: true
/error-ex@1.3.2: /error-ex@1.3.2:
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
dependencies: dependencies:
@ -4893,7 +4893,7 @@ packages:
array-union: 2.1.0 array-union: 2.1.0
dir-glob: 3.0.1 dir-glob: 3.0.1
fast-glob: 3.3.2 fast-glob: 3.3.2
ignore: 5.3.1 ignore: 5.3.2
merge2: 1.4.1 merge2: 1.4.1
slash: 3.0.0 slash: 3.0.0
dev: true dev: true
@ -5618,7 +5618,7 @@ packages:
acorn: 8.11.3 acorn: 8.11.3
eslint-visitor-keys: 3.4.3 eslint-visitor-keys: 3.4.3
espree: 9.6.1 espree: 9.6.1
semver: 7.6.2 semver: 7.6.3
dev: true dev: true
/jsonfile@6.1.0: /jsonfile@6.1.0:
@ -6140,31 +6140,31 @@ packages:
minimatch: 3.1.2 minimatch: 3.1.2
dev: true dev: true
/naive-ui@2.39.0(vue@3.5.8): /naive-ui@2.40.1(vue@3.5.12):
resolution: {integrity: sha512-5oUJzRG+rtLSH8eRU+fJvVYiQids2BxF9jp+fwGoAqHOptEINrBlgBu9uy+95RHE5FLJ7Q/z41o+qkoGnUrKxQ==} resolution: {integrity: sha512-3NkL+vLRQZKQxCHXa+7xiD6oM74OrQELaehDkGYRYpr6kjT+JJB+Z7h+5LC70gn8VkbgCAETv0+uRWF+6MLlgQ==}
peerDependencies: peerDependencies:
vue: ^3.0.0 vue: ^3.0.0
dependencies: dependencies:
'@css-render/plugin-bem': 0.15.14(css-render@0.15.14) '@css-render/plugin-bem': 0.15.14(css-render@0.15.14)
'@css-render/vue3-ssr': 0.15.14(vue@3.5.8) '@css-render/vue3-ssr': 0.15.14(vue@3.5.12)
'@types/katex': 0.16.7 '@types/katex': 0.16.7
'@types/lodash': 4.17.6 '@types/lodash': 4.17.6
'@types/lodash-es': 4.17.12 '@types/lodash-es': 4.17.12
async-validator: 4.2.5 async-validator: 4.2.5
css-render: 0.15.14 css-render: 0.15.14
csstype: 3.1.3 csstype: 3.1.3
date-fns: 2.30.0 date-fns: 3.6.0
date-fns-tz: 2.0.1(date-fns@2.30.0) date-fns-tz: 3.1.3(date-fns@3.6.0)
evtd: 0.2.4 evtd: 0.2.4
highlight.js: 11.9.0 highlight.js: 11.9.0
lodash: 4.17.21 lodash: 4.17.21
lodash-es: 4.17.21 lodash-es: 4.17.21
seemly: 0.3.8 seemly: 0.3.8
treemate: 0.3.11 treemate: 0.3.11
vdirs: 0.1.8(vue@3.5.8) vdirs: 0.1.8(vue@3.5.12)
vooks: 0.2.12(vue@3.5.8) vooks: 0.2.12(vue@3.5.12)
vue: 3.5.8(typescript@5.2.2) vue: 3.5.12(typescript@5.2.2)
vueuc: 0.4.58(vue@3.5.8) vueuc: 0.4.64(vue@3.5.12)
dev: false dev: false
/nanoid@3.3.7: /nanoid@3.3.7:
@ -6225,7 +6225,7 @@ packages:
dependencies: dependencies:
hosted-git-info: 4.1.0 hosted-git-info: 4.1.0
is-core-module: 2.13.1 is-core-module: 2.13.1
semver: 7.6.2 semver: 7.6.3
validate-npm-package-license: 3.0.4 validate-npm-package-license: 3.0.4
dev: true dev: true
@ -6543,8 +6543,8 @@ packages:
hasBin: true hasBin: true
dev: true dev: true
/pinia-plugin-persistedstate@4.0.1(pinia@2.1.7): /pinia-plugin-persistedstate@4.1.1(pinia@2.2.4):
resolution: {integrity: sha512-Gs2nhKUi6Rwhhc8PH9wvEAxfz4iZeJ/36qQv2ieYs94+zMozbGtMLIR4p9Aoim3c/PKf8J9orOz9n+f0ZF9CdA==} resolution: {integrity: sha512-fUiUsbfBetGUZzX28z+ImAZw7FDXzwRrk+fN+ljF5OhQMhsSYfYeUzI9FLLtpjekYbfFHWvJiECkLI60RIuiPA==}
peerDependencies: peerDependencies:
'@pinia/nuxt': '>=0.5.0' '@pinia/nuxt': '>=0.5.0'
pinia: '>=2.0.0' pinia: '>=2.0.0'
@ -6554,11 +6554,11 @@ packages:
pinia: pinia:
optional: true optional: true
dependencies: dependencies:
'@nuxt/kit': 3.13.1 '@nuxt/kit': 3.13.2
deep-pick-omit: 1.2.0 deep-pick-omit: 1.2.1
defu: 6.1.4 defu: 6.1.4
destr: 2.0.3 destr: 2.0.3
pinia: 2.1.7(typescript@5.2.2)(vue@3.5.8) pinia: 2.2.4(typescript@5.2.2)(vue@3.5.12)
transitivePeerDependencies: transitivePeerDependencies:
- magicast - magicast
- rollup - rollup
@ -6566,8 +6566,8 @@ packages:
- webpack-sources - webpack-sources
dev: false dev: false
/pinia@2.1.7(typescript@5.2.2)(vue@3.5.8): /pinia@2.2.4(typescript@5.2.2)(vue@3.5.12):
resolution: {integrity: sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==} resolution: {integrity: sha512-K7ZhpMY9iJ9ShTC0cR2+PnxdQRuwVIsXDO/WIEV/RnMC/vmSoKDTKW/exNQYPI+4ij10UjXqdNiEHwn47McANQ==}
peerDependencies: peerDependencies:
'@vue/composition-api': ^1.4.0 '@vue/composition-api': ^1.4.0
typescript: '>=4.4.4' typescript: '>=4.4.4'
@ -6578,10 +6578,10 @@ packages:
typescript: typescript:
optional: true optional: true
dependencies: dependencies:
'@vue/devtools-api': 6.6.1 '@vue/devtools-api': 6.6.3
typescript: 5.2.2 typescript: 5.2.2
vue: 3.5.8(typescript@5.2.2) vue: 3.5.12(typescript@5.2.2)
vue-demi: 0.14.6(vue@3.5.8) vue-demi: 0.14.10(vue@3.5.12)
dev: false dev: false
/pkg-types@1.2.0: /pkg-types@1.2.0:
@ -6652,15 +6652,6 @@ packages:
source-map-js: 1.2.0 source-map-js: 1.2.0
dev: true dev: true
/postcss@8.4.40:
resolution: {integrity: sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==}
engines: {node: ^10 || ^12 || >=14}
dependencies:
nanoid: 3.3.7
picocolors: 1.0.1
source-map-js: 1.2.0
dev: true
/postcss@8.4.45: /postcss@8.4.45:
resolution: {integrity: sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==} resolution: {integrity: sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==}
engines: {node: ^10 || ^12 || >=14} engines: {node: ^10 || ^12 || >=14}
@ -6852,10 +6843,6 @@ packages:
strip-indent: 3.0.0 strip-indent: 3.0.0
dev: true dev: true
/regenerator-runtime@0.14.1:
resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
dev: false
/regex-not@1.0.2: /regex-not@1.0.2:
resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@ -7117,12 +7104,6 @@ packages:
lru-cache: 6.0.0 lru-cache: 6.0.0
dev: true dev: true
/semver@7.6.2:
resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==}
engines: {node: '>=10'}
hasBin: true
dev: true
/semver@7.6.3: /semver@7.6.3:
resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
engines: {node: '>=10'} engines: {node: '>=10'}
@ -7960,6 +7941,28 @@ packages:
transitivePeerDependencies: transitivePeerDependencies:
- rollup - rollup
- webpack-sources - webpack-sources
dev: true
/unimport@3.13.1:
resolution: {integrity: sha512-nNrVzcs93yrZQOW77qnyOVHtb68LegvhYFwxFMfuuWScmwQmyVCG/NBuN8tYsaGzgQUVYv34E/af+Cc9u4og4A==}
dependencies:
'@rollup/pluginutils': 5.1.2
acorn: 8.12.1
escape-string-regexp: 5.0.0
estree-walker: 3.0.3
fast-glob: 3.3.2
local-pkg: 0.5.0
magic-string: 0.30.11
mlly: 1.7.1
pathe: 1.1.2
pkg-types: 1.2.0
scule: 1.3.0
strip-literal: 2.1.0
unplugin: 1.14.1
transitivePeerDependencies:
- rollup
- webpack-sources
dev: false
/union-value@1.0.1: /union-value@1.0.1:
resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==}
@ -7981,7 +7984,7 @@ packages:
engines: {node: '>= 0.8'} engines: {node: '>= 0.8'}
dev: true dev: true
/unplugin-auto-import@0.18.2(@vueuse/core@10.9.0): /unplugin-auto-import@0.18.2(@vueuse/core@11.1.0):
resolution: {integrity: sha512-Dwb3rAic75harVBrVjwiq6H24PT+nBq2dpxV5BH8NNI6sDFaTytvP+iyo4xy7prQbR3r5K6nMs4f5Wp9PE4g8A==} resolution: {integrity: sha512-Dwb3rAic75harVBrVjwiq6H24PT+nBq2dpxV5BH8NNI6sDFaTytvP+iyo4xy7prQbR3r5K6nMs4f5Wp9PE4g8A==}
engines: {node: '>=14'} engines: {node: '>=14'}
peerDependencies: peerDependencies:
@ -7995,7 +7998,7 @@ packages:
dependencies: dependencies:
'@antfu/utils': 0.7.10 '@antfu/utils': 0.7.10
'@rollup/pluginutils': 5.1.0 '@rollup/pluginutils': 5.1.0
'@vueuse/core': 10.9.0(vue@3.5.8) '@vueuse/core': 11.1.0(vue@3.5.12)
fast-glob: 3.3.2 fast-glob: 3.3.2
local-pkg: 0.5.0 local-pkg: 0.5.0
magic-string: 0.30.11 magic-string: 0.30.11
@ -8007,7 +8010,7 @@ packages:
- webpack-sources - webpack-sources
dev: true dev: true
/unplugin-vue-components@0.27.4(vue@3.5.8): /unplugin-vue-components@0.27.4(vue@3.5.12):
resolution: {integrity: sha512-1XVl5iXG7P1UrOMnaj2ogYa5YTq8aoh5jwDPQhemwO/OrXW+lPQKDXd1hMz15qxQPxgb/XXlbgo3HQ2rLEbmXQ==} resolution: {integrity: sha512-1XVl5iXG7P1UrOMnaj2ogYa5YTq8aoh5jwDPQhemwO/OrXW+lPQKDXd1hMz15qxQPxgb/XXlbgo3HQ2rLEbmXQ==}
engines: {node: '>=14'} engines: {node: '>=14'}
peerDependencies: peerDependencies:
@ -8030,7 +8033,7 @@ packages:
minimatch: 9.0.5 minimatch: 9.0.5
mlly: 1.7.1 mlly: 1.7.1
unplugin: 1.13.1 unplugin: 1.13.1
vue: 3.5.8(typescript@5.2.2) vue: 3.5.12(typescript@5.2.2)
transitivePeerDependencies: transitivePeerDependencies:
- rollup - rollup
- supports-color - supports-color
@ -8059,6 +8062,19 @@ packages:
acorn: 8.12.1 acorn: 8.12.1
webpack-virtual-modules: 0.6.2 webpack-virtual-modules: 0.6.2
/unplugin@1.14.1:
resolution: {integrity: sha512-lBlHbfSFPToDYp9pjXlUEFVxYLaue9f9T1HC+4OHlmj+HnMDdz9oZY+erXfoCe/5V/7gKUSY2jpXPb9S7f0f/w==}
engines: {node: '>=14.0.0'}
peerDependencies:
webpack-sources: ^3
peerDependenciesMeta:
webpack-sources:
optional: true
dependencies:
acorn: 8.12.1
webpack-virtual-modules: 0.6.2
dev: false
/unset-value@1.0.0: /unset-value@1.0.0:
resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@ -8145,13 +8161,13 @@ packages:
engines: {node: '>= 0.8'} engines: {node: '>= 0.8'}
dev: true dev: true
/vdirs@0.1.8(vue@3.5.8): /vdirs@0.1.8(vue@3.5.12):
resolution: {integrity: sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==} resolution: {integrity: sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==}
peerDependencies: peerDependencies:
vue: ^3.0.11 vue: ^3.0.11
dependencies: dependencies:
evtd: 0.2.4 evtd: 0.2.4
vue: 3.5.8(typescript@5.2.2) vue: 3.5.12(typescript@5.2.2)
dev: false dev: false
/vite-bundle-analyzer@0.9.4: /vite-bundle-analyzer@0.9.4:
@ -8429,20 +8445,34 @@ packages:
- terser - terser
dev: true dev: true
/vooks@0.2.12(vue@3.5.8): /vooks@0.2.12(vue@3.5.12):
resolution: {integrity: sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==} resolution: {integrity: sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==}
peerDependencies: peerDependencies:
vue: ^3.0.0 vue: ^3.0.0
dependencies: dependencies:
evtd: 0.2.4 evtd: 0.2.4
vue: 3.5.8(typescript@5.2.2) vue: 3.5.12(typescript@5.2.2)
dev: false dev: false
/vue-component-type-helpers@1.8.26: /vue-component-type-helpers@1.8.26:
resolution: {integrity: sha512-CIwb7s8cqUuPpHDk+0DY8EJ/x8tzdzqw8ycX8hhw1GnbngTgSsIceHAqrrLjmv8zXi+j5XaiqYRQMw8sKyyjkw==} resolution: {integrity: sha512-CIwb7s8cqUuPpHDk+0DY8EJ/x8tzdzqw8ycX8hhw1GnbngTgSsIceHAqrrLjmv8zXi+j5XaiqYRQMw8sKyyjkw==}
dev: true dev: true
/vue-demi@0.14.6(vue@3.5.8): /vue-demi@0.14.10(vue@3.5.12):
resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
peerDependencies:
'@vue/composition-api': ^1.0.0-rc.1
vue: ^3.0.0-0 || ^2.6.0
peerDependenciesMeta:
'@vue/composition-api':
optional: true
dependencies:
vue: 3.5.12(typescript@5.2.2)
/vue-demi@0.14.6(vue@3.5.12):
resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==} resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==}
engines: {node: '>=12'} engines: {node: '>=12'}
hasBin: true hasBin: true
@ -8454,23 +8484,9 @@ packages:
'@vue/composition-api': '@vue/composition-api':
optional: true optional: true
dependencies: dependencies:
vue: 3.5.8(typescript@5.2.2) vue: 3.5.12(typescript@5.2.2)
dev: false dev: false
/vue-demi@0.14.7(vue@3.5.8):
resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==}
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
peerDependencies:
'@vue/composition-api': ^1.0.0-rc.1
vue: ^3.0.0-0 || ^2.6.0
peerDependenciesMeta:
'@vue/composition-api':
optional: true
dependencies:
vue: 3.5.8(typescript@5.2.2)
/vue-eslint-parser@9.3.2(eslint@8.57.0): /vue-eslint-parser@9.3.2(eslint@8.57.0):
resolution: {integrity: sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==} resolution: {integrity: sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==}
engines: {node: ^14.17.0 || >=16.0.0} engines: {node: ^14.17.0 || >=16.0.0}
@ -8507,7 +8523,7 @@ packages:
- supports-color - supports-color
dev: true dev: true
/vue-hooks-plus@2.2.1(vue@3.5.8): /vue-hooks-plus@2.2.1(vue@3.5.12):
resolution: {integrity: sha512-YfZ+xwzeoTXpuXrCwu4zOe2kmc3hcOxD3eY9eoc5r+T8grCMQl25li0W9o8uY1/UA75sgLcE6B7KfKd2e3OURg==} resolution: {integrity: sha512-YfZ+xwzeoTXpuXrCwu4zOe2kmc3hcOxD3eY9eoc5r+T8grCMQl25li0W9o8uY1/UA75sgLcE6B7KfKd2e3OURg==}
peerDependencies: peerDependencies:
vue: ^3.2.25 vue: ^3.2.25
@ -8519,10 +8535,10 @@ packages:
qs: 6.12.1 qs: 6.12.1
query-string: 7.1.3 query-string: 7.1.3
screenfull: 5.2.0 screenfull: 5.2.0
vue: 3.5.8(typescript@5.2.2) vue: 3.5.12(typescript@5.2.2)
dev: false dev: false
/vue-i18n@9.13.1(vue@3.5.8): /vue-i18n@9.13.1(vue@3.5.12):
resolution: {integrity: sha512-mh0GIxx0wPtPlcB1q4k277y0iKgo25xmDPWioVVYanjPufDBpvu5ySTjP5wOrSvlYQ2m1xI+CFhGdauv/61uQg==} resolution: {integrity: sha512-mh0GIxx0wPtPlcB1q4k277y0iKgo25xmDPWioVVYanjPufDBpvu5ySTjP5wOrSvlYQ2m1xI+CFhGdauv/61uQg==}
engines: {node: '>= 16'} engines: {node: '>= 16'}
peerDependencies: peerDependencies:
@ -8531,15 +8547,15 @@ packages:
'@intlify/core-base': 9.13.1 '@intlify/core-base': 9.13.1
'@intlify/shared': 9.13.1 '@intlify/shared': 9.13.1
'@vue/devtools-api': 6.6.1 '@vue/devtools-api': 6.6.1
vue: 3.5.8(typescript@5.2.2) vue: 3.5.12(typescript@5.2.2)
/vue-router@4.3.2(vue@3.5.8): /vue-router@4.3.2(vue@3.5.12):
resolution: {integrity: sha512-hKQJ1vDAZ5LVkKEnHhmm1f9pMiWIBNGF5AwU67PdH7TyXCj/a4hTccuUuYCAMgJK6rO/NVYtQIEN3yL8CECa7Q==} resolution: {integrity: sha512-hKQJ1vDAZ5LVkKEnHhmm1f9pMiWIBNGF5AwU67PdH7TyXCj/a4hTccuUuYCAMgJK6rO/NVYtQIEN3yL8CECa7Q==}
peerDependencies: peerDependencies:
vue: ^3.2.0 vue: ^3.2.0
dependencies: dependencies:
'@vue/devtools-api': 6.6.1 '@vue/devtools-api': 6.6.1
vue: 3.5.8(typescript@5.2.2) vue: 3.5.12(typescript@5.2.2)
dev: false dev: false
/vue-template-compiler@2.7.16: /vue-template-compiler@2.7.16:
@ -8565,39 +8581,39 @@ packages:
resolution: {integrity: sha512-YwdQ1YjbHzcUsA7Vj5ziQLoX7oQZGWDZNaAadLu7EZzV9UU8Dd2IXAxGobF7dIHamgz5mPiOgH1Xb3qO8bCGDA==} resolution: {integrity: sha512-YwdQ1YjbHzcUsA7Vj5ziQLoX7oQZGWDZNaAadLu7EZzV9UU8Dd2IXAxGobF7dIHamgz5mPiOgH1Xb3qO8bCGDA==}
dependencies: dependencies:
js-binary-schema-parser: 2.0.3 js-binary-schema-parser: 2.0.3
vue: 3.5.8(typescript@5.2.2) vue: 3.5.12(typescript@5.2.2)
transitivePeerDependencies: transitivePeerDependencies:
- typescript - typescript
dev: false dev: false
/vue@3.5.8(typescript@5.2.2): /vue@3.5.12(typescript@5.2.2):
resolution: {integrity: sha512-hvuvuCy51nP/1fSRvrrIqTLSvrSyz2Pq+KQ8S8SXCxTWVE0nMaOnSDnSOxV1eYmGfvK7mqiwvd1C59CEEz7dAQ==} resolution: {integrity: sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==}
peerDependencies: peerDependencies:
typescript: '*' typescript: '*'
peerDependenciesMeta: peerDependenciesMeta:
typescript: typescript:
optional: true optional: true
dependencies: dependencies:
'@vue/compiler-dom': 3.5.8 '@vue/compiler-dom': 3.5.12
'@vue/compiler-sfc': 3.5.8 '@vue/compiler-sfc': 3.5.12
'@vue/runtime-dom': 3.5.8 '@vue/runtime-dom': 3.5.12
'@vue/server-renderer': 3.5.8(vue@3.5.8) '@vue/server-renderer': 3.5.12(vue@3.5.12)
'@vue/shared': 3.5.8 '@vue/shared': 3.5.12
typescript: 5.2.2 typescript: 5.2.2
/vueuc@0.4.58(vue@3.5.8): /vueuc@0.4.64(vue@3.5.12):
resolution: {integrity: sha512-Wnj/N8WbPRSxSt+9ji1jtDHPzda5h2OH/0sFBhvdxDRuyCZbjGg3/cKMaKqEoe+dErTexG2R+i6Q8S/Toq1MYg==} resolution: {integrity: sha512-wlJQj7fIwKK2pOEoOq4Aro8JdPOGpX8aWQhV8YkTW9OgWD2uj2O8ANzvSsIGjx7LTOc7QbS7sXdxHi6XvRnHPA==}
peerDependencies: peerDependencies:
vue: ^3.0.11 vue: ^3.0.11
dependencies: dependencies:
'@css-render/vue3-ssr': 0.15.14(vue@3.5.8) '@css-render/vue3-ssr': 0.15.14(vue@3.5.12)
'@juggle/resize-observer': 3.4.0 '@juggle/resize-observer': 3.4.0
css-render: 0.15.14 css-render: 0.15.14
evtd: 0.2.4 evtd: 0.2.4
seemly: 0.3.8 seemly: 0.3.8
vdirs: 0.1.8(vue@3.5.8) vdirs: 0.1.8(vue@3.5.12)
vooks: 0.2.12(vue@3.5.8) vooks: 0.2.12(vue@3.5.12)
vue: 3.5.8(typescript@5.2.2) vue: 3.5.12(typescript@5.2.2)
dev: false dev: false
/webidl-conversions@7.0.0: /webidl-conversions@7.0.0:

View File

@ -43,29 +43,27 @@ export default defineComponent({
}) })
const collapseClick = () => { const collapseClick = () => {
const { onUpdateValue, 'onUpdate:value': _onUpdateValue } = props const { onUpdateOpen, 'onUpdate:open': _onUpdateOpen } = props
modelCollapsed.value = !modelCollapsed.value modelCollapsed.value = !modelCollapsed.value
if (onUpdateValue) { if (onUpdateOpen) {
call(onUpdateValue, modelCollapsed.value) call(onUpdateOpen, modelCollapsed.value)
} }
if (_onUpdateValue) { if (_onUpdateOpen) {
call(_onUpdateValue, modelCollapsed.value) call(_onUpdateOpen, modelCollapsed.value)
} }
} }
const CollapseIcon = () => ( const CollapseIcon = (collapse: boolean) => (
<div class="collapse-icon" onClick={collapseClick.bind(this)}> <div class="collapse-icon" onClick={collapseClick.bind(this)}>
<span> <span>
{modelCollapsed.value {collapse ? props.collapseToggleText[0] : props.collapseToggleText[1]}
? props.collapseToggleText[0]
: props.collapseToggleText[1]}
</span> </span>
<RIcon <RIcon
customClassName={`collapse-icon--arrow ${ customClassName={`collapse-icon--arrow ${
modelCollapsed.value ? '' : 'collapse-icon--arrow__expanded' collapse ? '' : 'collapse-icon--arrow__expanded'
}`} }`}
name="expanded" name="expanded"
size="14" size="14"
@ -73,6 +71,10 @@ export default defineComponent({
</div> </div>
) )
watchEffect(() => {
modelCollapsed.value = !props.open
})
return { return {
modelCollapsed, modelCollapsed,
collapseClick, collapseClick,
@ -108,7 +110,9 @@ export default defineComponent({
<NGridItem suffix class="ray-collapse-grid__suffix--btn"> <NGridItem suffix class="ray-collapse-grid__suffix--btn">
<NFlex justify="end" align="center"> <NFlex justify="end" align="center">
{action?.()} {action?.()}
{collapse ? collapse(modelCollapsed) : CollapseIcon()} {collapse
? collapse(modelCollapsed)
: CollapseIcon(modelCollapsed)}
</NFlex> </NFlex>
</NGridItem> </NGridItem>
</NGrid> </NGrid>

View File

@ -48,13 +48,13 @@ const props = {
* `false` * `false`
*/ */
type: Boolean, type: Boolean,
default: false, default: true,
}, },
onUpdateValue: { onUpdateOpen: {
type: [Function, Array] as PropType<MaybeArray<(bool: boolean) => void>>, type: [Function, Array] as PropType<MaybeArray<(bool: boolean) => void>>,
default: null, default: null,
}, },
'onUpdate:value': { 'onUpdate:open': {
type: [Function, Array] as PropType<MaybeArray<(bool: boolean) => void>>, type: [Function, Array] as PropType<MaybeArray<(bool: boolean) => void>>,
default: null, default: null,
}, },

View File

@ -149,11 +149,22 @@ const props = {
* *
* *
* *
* @default false * @default true
*/ */
wrapperBordered: { wrapperBordered: {
type: Boolean, type: Boolean,
default: false, default: true,
},
/**
*
* @description
*
*
* @default true
*/
bordered: {
type: Boolean,
default: true,
}, },
/** /**
* *

View File

@ -53,7 +53,8 @@ export const useMaximize = () => {
* *
* @param full * @param full
* *
* LayoutContent layoutContentMaximize * @description
* LayoutContent layoutContentMaximize
* *
* @example * @example
* maximize(true, { MaximizeOptions }) * maximize(true, { MaximizeOptions })

View File

@ -1,15 +1,4 @@
/** import { unrefElement, effectDispose, isValueType, setStyle } from '@/utils'
*
* @author Ray <https://github.com/XiaoDaiGua-Ray>
*
* @date 2023-12-04
*
* @workspace ray-template
*
* @remark
*/
import { unrefElement, effectDispose, isValueType } from '@/utils'
import { useWindowSize } from '@vueuse/core' import { useWindowSize } from '@vueuse/core'
import type { BasicTarget } from '@/types' import type { BasicTarget } from '@/types'
@ -18,41 +7,56 @@ import type { CSSProperties } from 'vue'
export interface UseElementFullscreenOptions { export interface UseElementFullscreenOptions {
/** /**
* *
* * @description
*
*
* @default undefined
*/ */
beforeEnter?: () => void beforeEnter?: () => void
/** /**
* *
* * @description
*
*
* @default undefined
*/ */
enter?: () => void enter?: () => void
/** /**
* *
* 退 * @description
* 退
*
* @default undefined
*/ */
beforeExit?: () => void beforeExit?: () => void
/** /**
* *
* 退 * @description
* 退
*
* @default undefined
*/ */
exit?: () => void exit?: () => void
/** /**
* *
* z-index * @description
* z-index
* *
* @default 999 * @default 999
*/ */
zIndex?: number zIndex?: number
/** /**
* *
* * @description
*
* *
* @default null * @default null
*/ */
backgroundColor?: string backgroundColor?: string
/** /**
* *
* transition * @description
* transition
* *
* @default 'width 0.3s var(--r-bezier), height 0.3s var(--r-bezier)' * @default 'width 0.3s var(--r-bezier), height 0.3s var(--r-bezier)'
*/ */
@ -70,10 +74,11 @@ const styleElement = document.createElement('style')
* @param target target dom * @param target target dom
* @param options useElementFullscreen options * @param options useElementFullscreen options
* *
* 使 API使 css * @description
* transition * 使 API使 css
* transition
* *
* positionz-indextransitiontransformwidthheight * positionz-indextransitiontransformwidthheight
* *
* @example * @example
* <template> * <template>
@ -102,6 +107,13 @@ export const useElementFullscreen = (
transition = 'all 0.3s var(--r-bezier)', transition = 'all 0.3s var(--r-bezier)',
} = options ?? {} } = options ?? {}
let isSetup = false let isSetup = false
const catchBoundingClientRect: {
x: number | null
y: number | null
} = {
x: null,
y: null,
}
const updateStyle = () => { const updateStyle = () => {
const element = unrefElement(target) as HTMLElement | null const element = unrefElement(target) as HTMLElement | null
@ -111,20 +123,38 @@ export const useElementFullscreen = (
} }
const { left, top } = element.getBoundingClientRect() const { left, top } = element.getBoundingClientRect()
if (
catchBoundingClientRect.x === null &&
catchBoundingClientRect.y === null
) {
catchBoundingClientRect.x = -left
catchBoundingClientRect.y = -top
}
setStyle(document.body, {
'--element-fullscreen-z-index':
isValueType<null>(zIndex, 'Null') ||
isValueType<undefined>(zIndex, 'Undefined')
? currentZIndex
: zIndex,
'--element-fullscreen-transition': transition,
'--element-fullscreen-background-color': backgroundColor,
'--element-fullscreen-width': `${width.value}px`,
'--element-fullscreen-height': `${height.value}px`,
'--element-fullscreen-transform-x': `${catchBoundingClientRect.x}px`,
'--element-fullscreen-transform-y': `${catchBoundingClientRect.y}px`,
})
const cssContent = ` const cssContent = `
[${ID_TAG}] { [${ID_TAG}] {
position: fixed; position: fixed;
width: ${width.value}px !important; width: var(--element-fullscreen-width) !important;
height: ${height.value}px !important; height: var(--element-fullscreen-height) !important;
transform: translate(-${left}px, -${top}px) !important; transform: translate(var(--element-fullscreen-transform-x), var(--element-fullscreen-transform-y)) !important;
transition: ${transition}; transition: var(--element-fullscreen-transition);
z-index: ${ z-index: var(--element-fullscreen-z-index) !important;
isValueType<null>(zIndex, 'Null') || background-color: var(--element-fullscreen-background-color);
isValueType<undefined>(zIndex, 'Undefined')
? currentZIndex
: zIndex
} !important;
background-color: ${backgroundColor ?? null};
} }
` `
@ -206,6 +236,10 @@ export const useElementFullscreen = (
enter, enter,
exit, exit,
toggleFullscreen, toggleFullscreen,
currentWindowSize: {
width,
height,
},
} }
} }

View File

@ -11,6 +11,7 @@
/** /**
* *
* @description
* : * :
* - 关闭全部: 关闭所有标签页 rootRoute.path * - 关闭全部: 关闭所有标签页 rootRoute.path
* - 关闭右侧: 关闭右侧所有标签 * - 关闭右侧: 关闭右侧所有标签
@ -18,15 +19,15 @@
* - 关闭其他: 关闭其他所有标签 * - 关闭其他: 关闭其他所有标签
* - 关闭所有: 关闭所有标签页 root page * - 关闭所有: 关闭所有标签页 root page
* *
* root path * root path
* key tag * key tag
* *
* MENU_TAG_DATA MenuTag * MENU_TAG_DATA MenuTag
* *
* Root Path MenuTag Root Tag * Root Path MenuTag Root Tag
* *
* outsideClick contextmenu * outsideClick contextmenu
* 使 throttle * 使 throttle
*/ */
import './index.scss' import './index.scss'
@ -49,6 +50,7 @@ import { hasClass, uuid, queryElements } from '@/utils'
import { useMaximize, useSpinning, useAppRoot, useSiderBar } from '@/hooks' import { useMaximize, useSpinning, useAppRoot, useSiderBar } from '@/hooks'
import { throttle } from 'lodash-es' import { throttle } from 'lodash-es'
import { getVariableToRefs } from '@/global-variable' import { getVariableToRefs } from '@/global-variable'
import { useTemplateRef } from 'vue'
import type { ScrollbarInst } from 'naive-ui' import type { ScrollbarInst } from 'naive-ui'
import type { MenuTagOptions, AppMenuOption } from '@/types' import type { MenuTagOptions, AppMenuOption } from '@/types'
@ -56,12 +58,11 @@ import type { MenuTagOptions, AppMenuOption } from '@/types'
export default defineComponent({ export default defineComponent({
name: 'AppMenuTag', name: 'AppMenuTag',
setup(_, { expose }) { setup(_, { expose }) {
const scrollRef = ref<ScrollbarInst | null>(null) const scrollRef = useTemplateRef<ScrollbarInst | null>('scrollRef')
const { getMenuKey, getMenuTagOptions } = useMenuGetters() const { getMenuKey, getMenuTagOptions } = useMenuGetters()
const { changeMenuModelValue } = useMenuActions() const { changeMenuModelValue } = useMenuActions()
const { getRootPath } = useAppRoot() const { getRootPath } = useAppRoot()
const { maximize } = useMaximize() const { maximize, isLayoutContentMaximized } = useMaximize()
const { reload } = useSpinning() const { reload } = useSpinning()
const { const {
close, close,
@ -72,18 +73,20 @@ export default defineComponent({
checkCloseLeft, checkCloseLeft,
checkCloseRight, checkCloseRight,
} = useSiderBar() } = useSiderBar()
// 哪些下拉框允许禁用
const canDisabledOptions = [ const canDisabledOptions = [
'closeAll', 'closeAll',
'closeRight', 'closeRight',
'closeLeft', 'closeLeft',
'closeOther', 'closeOther',
'closeCurrentPage', 'closeCurrentPage',
] // 哪些下拉框允许禁用 ]
let currentContextmenuIndex = Infinity // 当前右键标签页索引位置 // 当前右键标签页索引位置
let currentContextmenuIndex = Infinity
const iconConfig = { const iconConfig = {
size: 16, size: 16,
} }
// 下拉菜单
const moreOptions = ref([ const moreOptions = ref([
{ {
label: '刷新页面', label: '刷新页面',
@ -124,8 +127,9 @@ export default defineComponent({
icon: () => <RIcon name="resize_h" size={iconConfig.size} />, icon: () => <RIcon name="resize_h" size={iconConfig.size} />,
disabled: false, disabled: false,
}, },
]) // 下拉菜单 ])
const uuidScrollBar = uuid(16) // scroll bar uuid // scroll bar uuid
const uuidScrollBar = uuid(16)
const actionMap = { const actionMap = {
closeCurrentPage: () => { closeCurrentPage: () => {
getMenuKey.value !== getRootPath.value && close(currentContextmenuIndex) getMenuKey.value !== getRootPath.value && close(currentContextmenuIndex)
@ -146,53 +150,47 @@ export default defineComponent({
$closeOther(currentContextmenuIndex) $closeOther(currentContextmenuIndex)
}, },
} }
/** 右键菜单 */ // 右键菜单
const actionState = reactive({ const actionState = reactive({
x: 0, x: 0,
y: 0, y: 0,
actionDropdownShow: false, actionDropdownShow: false,
}) })
const MENU_TAG_DATA = 'menu_tag_data' // 注入 tag 前缀 // 注入 tag 前缀
const MENU_TAG_DATA = 'menu_tag_data'
const globalMainLayoutLoad = getVariableToRefs('globalMainLayoutLoad') const globalMainLayoutLoad = getVariableToRefs('globalMainLayoutLoad')
const naiveScrollbarContainerClass = 'n-scrollbar-container' // naive scrollbar 容器 class // naive scrollbar 容器 class
const naiveScrollbarContainerClass = 'n-scrollbar-container'
// 缓存上一次的菜单 key
let catchMenuKey = getMenuKey.value
/** // 关闭当前菜单标签,如果只有一个标签,则不允许关闭
*
* @param idx
*
* @remark `tag` ,
*/
const closeCurrentMenuTag = (idx: number) => { const closeCurrentMenuTag = (idx: number) => {
close(idx) close(idx)
} }
// 动态设置右键菜单的禁用项
const setMoreOptionsDisabled = ( const setMoreOptionsDisabled = (
key: (typeof moreOptions.value)[number]['key'], key: (typeof moreOptions.value)[number]['key'],
disabled: boolean, disabled: boolean,
) => { ) => {
moreOptions.value.forEach((curr) => { for (const curr of moreOptions.value) {
if (curr.key === key) { if (curr.key === key) {
curr.disabled = disabled curr.disabled = disabled
return break
} }
}) }
} }
/** // 菜单标签点击更新当前菜单激活项
*
* @param option
*/
const menuTagClick = (option: AppMenuOption) => { const menuTagClick = (option: AppMenuOption) => {
actionState.actionDropdownShow = false actionState.actionDropdownShow = false
changeMenuModelValue(option.fullPath, option) changeMenuModelValue(option.fullPath, option)
} }
/** // 获取滚动条容器
*
*
*/
const getScrollElement = () => { const getScrollElement = () => {
const scroll = document.getElementById(uuidScrollBar) // 获取滚动条容器 const scroll = document.getElementById(uuidScrollBar) // 获取滚动条容器
@ -208,25 +206,15 @@ export default defineComponent({
return findElement return findElement
} }
return
} }
/** // 手动滚动容器
*
* @param type
*
*
*/
const scrollX = (type: 'left' | 'right') => { const scrollX = (type: 'left' | 'right') => {
const el = getScrollElement() const el = getScrollElement()
if (el) { if (el) {
/** // 找到实际横向滚动元素classn-scrollbar-container
* // 获取 scrollLeft 属性后, 用于左右滚动边界值进行处理
* (class: n-scrollbar-container)
* scrollLeft ,
*/
const scrollX = el!.scrollLeft || 0 const scrollX = el!.scrollLeft || 0
const rolling = const rolling =
type === 'left' ? Math.max(0, scrollX - 200) : scrollX + 200 type === 'left' ? Math.max(0, scrollX - 200) : scrollX + 200
@ -238,23 +226,17 @@ export default defineComponent({
} }
} }
/** 更多操作操作栏 */ // 更多操作操作栏
const actionDropdownSelect = (key: string | number) => { const actionDropdownSelect = (key: string | number) => {
actionState.actionDropdownShow = false actionState.actionDropdownShow = false
const fn = actionMap[key as keyof typeof actionMap] const fn = actionMap[key as keyof typeof actionMap]
if (fn) { fn?.()
fn()
}
} }
/** // 右键点击标签页
* // 缓存当前点击标签页索引值(用于关闭左或者右侧标签页操作)
*
*
* ()
*/
const menuTagContextMenu = (idx: number, e: MouseEvent) => { const menuTagContextMenu = (idx: number, e: MouseEvent) => {
e.preventDefault() e.preventDefault()
@ -268,10 +250,7 @@ export default defineComponent({
}) })
} }
/** // 动态设置某些项禁用
*
*
*/
const setDisabledAccordionToIndex = () => { const setDisabledAccordionToIndex = () => {
const { closeable } = const { closeable } =
getMenuTagOptions.value[currentContextmenuIndex] ?? getMenuTagOptions.value[currentContextmenuIndex] ??
@ -291,12 +270,8 @@ export default defineComponent({
: setMoreOptionsDisabled('closeLeft', true) : setMoreOptionsDisabled('closeLeft', true)
} }
/** // 如果通过更多按钮触发关闭事件,则根据当前标签所在索引值为 currentContextmenuIndex
* // 并且动态设置是否可操作状态
* , currentContextmenuIndex
*
*
*/
const setCurrentContextmenuIndex = () => { const setCurrentContextmenuIndex = () => {
const index = getMenuTagOptions.value.findIndex( const index = getMenuTagOptions.value.findIndex(
(curr) => curr.fullPath === getMenuKey.value, (curr) => curr.fullPath === getMenuKey.value,
@ -307,7 +282,7 @@ export default defineComponent({
setDisabledAccordionToIndex() setDisabledAccordionToIndex()
} }
/** 仅有 getMenuTagOptions 长度大于 1 并且非 root path 时, 才激活关闭按钮 */ // 仅有 getMenuTagOptions 长度大于 1 并且非 root path 时,才激活关闭按钮
const menuTagMouseenter = (option: MenuTagOptions) => { const menuTagMouseenter = (option: MenuTagOptions) => {
if ( if (
getMenuTagOptions.value.length > 1 && getMenuTagOptions.value.length > 1 &&
@ -317,18 +292,14 @@ export default defineComponent({
} }
} }
/** 移出 MenuTag 时, 判断是否为当前已激活 key */ // 移出 MenuTag 时,判断是否为当前已激活 key
const menuTagMouseleave = (option: MenuTagOptions) => { const menuTagMouseleave = (option: MenuTagOptions) => {
if (option.fullPath !== getMenuKey.value) { if (option.fullPath !== getMenuKey.value) {
option.closeable = false option.closeable = false
} }
} }
/** // 每当新的页面打开后,将滚动条横向滚到至底部,使用 nextTick 避免元素未渲染挂载至页面
*
* ,
* 使 nextTick
*/
const updateScrollBarPosition = () => { const updateScrollBarPosition = () => {
const el = getScrollElement() const el = getScrollElement()
@ -342,7 +313,7 @@ export default defineComponent({
} }
} }
/** 动态更新 menu tag 所在位置 */ // 动态更新 menu tag 所在位置
const positionMenuTag = () => { const positionMenuTag = () => {
nextTick().then(() => { nextTick().then(() => {
const tags = queryElements<HTMLElement>( const tags = queryElements<HTMLElement>(
@ -362,7 +333,11 @@ export default defineComponent({
}) })
} }
/** 如果有且只有一个标签页时, 禁止全部关闭操作 */ // 最大化内容区域按钮点击
const maximizeBtnClick = () => {
maximize(true)
}
watch( watch(
() => getMenuTagOptions.value, () => getMenuTagOptions.value,
(ndata, odata) => { (ndata, odata) => {
@ -391,16 +366,18 @@ export default defineComponent({
immediate: true, immediate: true,
}, },
) )
/** 动态设置关闭按钮是否可操作 */ watchEffect(() => {
watch( if (actionState.actionDropdownShow) {
() => actionState.actionDropdownShow,
(ndata) => {
// 使用节流函数,避免右键菜单闪烁问题 // 使用节流函数,避免右键菜单闪烁问题
if (ndata) { throttle(setDisabledAccordionToIndex, 300)?.()
throttle(setDisabledAccordionToIndex, 100)?.() }
}
}, if (catchMenuKey !== getMenuKey.value) {
) catchMenuKey = getMenuKey.value
positionMenuTag()
}
})
expose({}) expose({})
@ -425,22 +402,21 @@ export default defineComponent({
height: 22, height: 22,
}, },
maximize, maximize,
getRootPath,
reload, reload,
globalMainLayoutLoad, globalMainLayoutLoad,
maximizeBtnClick,
} }
}, },
render() { render() {
const { const {
iconConfig, iconConfig,
getRootPath,
uuidScrollBar, uuidScrollBar,
getMenuTagOptions, getMenuTagOptions,
MENU_TAG_DATA, MENU_TAG_DATA,
globalMainLayoutLoad, globalMainLayoutLoad,
} = this } = this
const { const {
maximize, maximizeBtnClick,
closeCurrentMenuTag, closeCurrentMenuTag,
scrollX, scrollX,
$t, $t,
@ -496,7 +472,6 @@ export default defineComponent({
}} }}
> >
<NFlex <NFlex
ref="menuTagSpaceRef"
class="menu-tag-wrapper" class="menu-tag-wrapper"
wrap={false} wrap={false}
align="center" align="center"
@ -516,7 +491,7 @@ export default defineComponent({
onContextmenu: menuTagContextMenu.bind(this, idx), onContextmenu: menuTagContextMenu.bind(this, idx),
onMouseenter: menuTagMouseenter.bind(this, curr), onMouseenter: menuTagMouseenter.bind(this, curr),
onMouseleave: menuTagMouseleave.bind(this, curr), onMouseleave: menuTagMouseleave.bind(this, curr),
[MENU_TAG_DATA]: curr.path, [MENU_TAG_DATA]: curr.fullPath,
}} }}
size="small" size="small"
> >
@ -535,29 +510,14 @@ export default defineComponent({
}, },
}} }}
</span> </span>
{(curr.closeable || getMenuTagOptions.length === 1) && <NIcon
curr.fullPath !== getRootPath ? ( class="menu-tag__btn-icon"
<NIcon {...{
class="menu-tag__btn-icon" onMousedown: closeCurrentMenuTag.bind(this, idx),
{...{ }}
onMousedown: closeCurrentMenuTag.bind( >
this, <RIcon name="close" size="14" />
idx, </NIcon>
),
}}
>
<RIcon name="close" size="14" />
</NIcon>
) : (
// 默认使用一个空 NIcon 占位,避免不能正确的触发动画
<NIcon
class={[
curr.fullPath !== getRootPath
? 'menu-tag__btn-icon'
: 'menu-tag__btn-icon--hidden',
]}
/>
)}
</> </>
), ),
}} }}
@ -584,9 +544,7 @@ export default defineComponent({
width={iconConfig.width} width={iconConfig.width}
height={iconConfig.height} height={iconConfig.height}
customClassName="menu-tag__right-setting" customClassName="menu-tag__right-setting"
onClick={() => { onClick={maximizeBtnClick}
maximize(true)
}}
/> />
<RIcon <RIcon
name="reload" name="reload"

View File

@ -1,15 +1,4 @@
/** import { useElementBounding, useWindowSize } from '@vueuse/core'
*
* @author Ray <https://github.com/XiaoDaiGua-Ray>
*
* @date 2023-06-02
*
* @workspace ray-template
*
* @remark
*/
import { useElementBounding } from '@vueuse/core'
import type { Ref } from 'vue' import type { Ref } from 'vue'
@ -29,10 +18,14 @@ export const layoutCssVars = (
const siderBar = useElementBounding(element[0]) const siderBar = useElementBounding(element[0])
const menuTag = useElementBounding(element[1]) const menuTag = useElementBounding(element[1])
const footer = useElementBounding(element[2]) const footer = useElementBounding(element[2])
const { height, width } = useWindowSize()
return computed(() => { return computed(() => {
return { return {
'--layout-content-height': `calc(100% - ${siderBar.height.value}px - ${menuTag.height.value}px - ${footer.height.value}px)`, '--window-width': `${width.value}px`,
'--window-height': `${height.value}px`,
'--layout-content-height': `calc(${height.value}px - ${siderBar.height.value}px - ${menuTag.height.value}px - ${footer.height.value}px)`,
'--layout-content-width': `${siderBar.width.value}px`,
'--layout-siderbar-height': `${siderBar.height.value}px`, '--layout-siderbar-height': `${siderBar.height.value}px`,
'--layout-menutag-height': `${menuTag.height.value}px`, '--layout-menutag-height': `${menuTag.height.value}px`,
'--layout-footer-height': `${footer.height.value}px`, '--layout-footer-height': `${footer.height.value}px`,

View File

@ -27,10 +27,11 @@ export const useSigningGetters = () => {
} }
export const useSigningActions = () => { export const useSigningActions = () => {
const { signing, logout } = piniaSigningStore() const { signing, logout, clearSigningCallback } = piniaSigningStore()
return { return {
signing, signing,
logout, logout,
clearSigningCallback,
} }
} }

View File

@ -308,6 +308,15 @@ export const piniaMenuStore = defineStore(
// 直接使用完整 url检查是否在 routes 中 // 直接使用完整 url检查是否在 routes 中
const findMenuOption = getRoutes().find((curr) => curr.path === routePath) const findMenuOption = getRoutes().find((curr) => curr.path === routePath)
// 避免匹配根页面路由
if (
findMenuOption?.path === '/' ||
!findMenuOption?.path ||
findMenuOption?.path === '/login'
) {
return
}
if (findMenuOption) { if (findMenuOption) {
// 使用 pick 提取仅需要的字段,避免 vue 抛错空引用,导致性能损耗 // 使用 pick 提取仅需要的字段,避免 vue 抛错空引用,导致性能损耗
const pickOption = pick( const pickOption = pick(

View File

@ -75,30 +75,58 @@ export const piniaSigningStore = defineStore(
/** /**
* *
* 退 * @param toSigning 退
* 300ms *
* @description
*
* toSigning true
*/ */
const logout = () => { const clearSigningCallback = (toSigning: boolean) => {
const { closeAll } = useSiderBar() const { closeAll } = useSiderBar()
const { appPiniaMenuStore, appPiniaSigningStore } = APP_CATCH_KEY const {
appPiniaMenuStore,
appPiniaSigningStore,
token,
signing,
appMenuKey,
} = APP_CATCH_KEY
// 提示信息 // 提示信息
window.$message.info('账号退出中...') window.$message.info('账号退出中...')
// 移除所有 sessionStorage 缓存 // 移除所有 sessionStorage 缓存
removeStorage('__all_sessionStorage__', 'sessionStorage') removeStorage('__all_sessionStorage__', 'sessionStorage')
// 移除指定 localStorage 缓存 // 移除指定 localStorage 缓存
removeStorage(appPiniaMenuStore, 'localStorage')
removeStorage(appPiniaSigningStore, 'localStorage') removeStorage(appPiniaSigningStore, 'localStorage')
removeStorage(appPiniaMenuStore, 'localStorage')
removeStorage(token, 'localStorage')
removeStorage(signing, 'localStorage')
removeStorage(appMenuKey, 'localStorage')
// 关闭所有侧边栏标签 // 关闭所有侧边栏标签
closeAll() closeAll()
// 延迟 300ms 后强制刷新当前系统
setTimeout(() => window.location.reload()) if (toSigning) {
window.location.replace('#/')
setTimeout(() => {
window.location.reload()
}, 0)
}
}
/**
*
* 退
* 300ms
*/
const logout = () => {
clearSigningCallback(true)
} }
return { return {
...toRefs(state), ...toRefs(state),
signing, signing,
logout, logout,
clearSigningCallback,
} }
}, },
{ {

View File

@ -40,6 +40,7 @@ export interface AppPrimaryColor {
} }
export interface Config { export interface Config {
cdn: boolean
server: ServerOptions server: ServerOptions
buildOptions: (mode: string) => BuildOptions buildOptions: (mode: string) => BuildOptions
alias: AliasOptions alias: AliasOptions

View File

@ -49,11 +49,13 @@ import type { AppConfigExport } from '@/types'
import type { BuildOptions } from 'vite' import type { BuildOptions } from 'vite'
const config: AppConfigExport = { const config: AppConfigExport = {
/** 公共基础路径配置, 如果为空则会默认以 '/' 填充 */ // 是否启用 cdn 构建项目
cdn: false,
// 公共基础路径配置, 如果为空则会默认以 '/' 填充
base: '/ray-template/', base: '/ray-template/',
/** 配置首屏加载信息 */ // 配置首屏加载信息
preloadingConfig: PRE_LOADING_CONFIG, preloadingConfig: PRE_LOADING_CONFIG,
/** 默认主题色(不可省略, 必填), 也用于 ejs 注入 */ // 默认主题色(不可省略,必填),也用于 ejs 注入
appPrimaryColor: APP_THEME.appPrimaryColor, appPrimaryColor: APP_THEME.appPrimaryColor,
sideBarLogo: SIDE_BAR_LOGO_DEFAULT, sideBarLogo: SIDE_BAR_LOGO_DEFAULT,
/** /**
@ -79,10 +81,7 @@ const config: AppConfigExport = {
* *
*/ */
title: htmlTitlePlugin(PRE_LOADING_CONFIG.title || 'Ray Template'), title: htmlTitlePlugin(PRE_LOADING_CONFIG.title || 'Ray Template'),
/** // 配置 HMR 特定选项(端口、主机、路径和协议)
*
* HMR ()
*/
server: { server: {
host: '0.0.0.0', host: '0.0.0.0',
port: 9527, port: 9527,
@ -100,10 +99,7 @@ const config: AppConfigExport = {
}, },
}, },
}, },
/** // 打包相关配置
*
*
*/
buildOptions: (mode: string): BuildOptions => { buildOptions: (mode: string): BuildOptions => {
const productionBuildOptions = { const productionBuildOptions = {
sourcemap: false, sourcemap: false,

View File

@ -55,74 +55,78 @@ function onlyReportOptions(mode: string): PluginOption[] {
// 仅适用于构建模式任何构建模式preview、build、report... // 仅适用于构建模式任何构建模式preview、build、report...
function onlyBuildOptions(mode: string): PluginOption[] { function onlyBuildOptions(mode: string): PluginOption[] {
const { cdn } = config
return [ return [
viteCDNPlugin({ viteCDNPlugin({
// modules 顺序 vue, vue-demi 必须保持当前顺序加载,否则会出现加载错误问题 // modules 顺序 vue, vue-demi 必须保持当前顺序加载,否则会出现加载错误问题
resolve: cdnResolve(), resolve: cdnResolve(),
modules: [ modules: cdn
{ ? [
name: 'vue', {
global: 'Vue', name: 'vue',
relativeModule: 'vue.global.min.js', global: 'Vue',
}, relativeModule: 'vue.global.min.js',
{ },
name: 'vue-demi', {
global: 'VueDemi', name: 'vue-demi',
relativeModule: 'index.iife.min.js', global: 'VueDemi',
}, relativeModule: 'index.iife.min.js',
{ },
name: 'naive-ui', {
global: 'naive', name: 'naive-ui',
relativeModule: 'index.prod.js', global: 'naive',
}, relativeModule: 'index.prod.js',
{ },
name: 'pinia', {
global: 'Pinia', name: 'pinia',
relativeModule: 'pinia.iife.min.js', global: 'Pinia',
}, relativeModule: 'pinia.iife.min.js',
{ },
name: 'vue-router', {
global: 'VueRouter', name: 'vue-router',
relativeModule: 'vue-router.global.min.js', global: 'VueRouter',
}, relativeModule: 'vue-router.global.min.js',
{ },
name: 'vue-i18n', {
global: 'VueI18n', name: 'vue-i18n',
relativeModule: 'vue-i18n.global.min.js', global: 'VueI18n',
}, relativeModule: 'vue-i18n.global.min.js',
{ },
name: 'echarts', {
global: 'echarts', name: 'echarts',
relativeModule: 'echarts.min.js', global: 'echarts',
}, relativeModule: 'echarts.min.js',
{ },
name: 'axios', {
global: 'axios', name: 'axios',
relativeModule: 'axios.min.js', global: 'axios',
}, relativeModule: 'axios.min.js',
{ },
name: 'jsbarcode', {
global: 'JsBarcode', name: 'jsbarcode',
relativeModule: 'JsBarcode.all.min.js', global: 'JsBarcode',
}, relativeModule: 'JsBarcode.all.min.js',
{ },
name: 'dayjs', {
global: 'dayjs', name: 'dayjs',
relativeModule: 'dayjs.min.js', global: 'dayjs',
}, relativeModule: 'dayjs.min.js',
{ },
name: 'dom-to-image', {
global: 'domtoimage', name: 'dom-to-image',
relativeModule: 'dom-to-image.min.js', global: 'domtoimage',
}, relativeModule: 'dom-to-image.min.js',
{ },
// 如果需要修改版本,需要同时修改 index.html 中对应的 css {
// 可以全局搜索 https://lib.baomitu.com/print-js/1.6.0/print.min.css // 如果需要修改版本,需要同时修改 index.html 中对应的 css
name: 'print-js', // 可以全局搜索 https://lib.baomitu.com/print-js/1.6.0/print.min.css
global: 'printJS', name: 'print-js',
relativeModule: 'print.min.js', global: 'printJS',
}, relativeModule: 'print.min.js',
], },
]
: [],
}), }),
] ]
} }