version: v5.0.10

This commit is contained in:
XiaoDaiGua-Ray 2025-01-15 16:32:36 +08:00
parent 4bfdbccd88
commit 0bb707bba0
28 changed files with 477 additions and 490 deletions

View File

@ -1,3 +1,17 @@
## 5.0.10
## Feats
- `RDraggableCard` 组件现在不会在抛出获取 `dom` 失败的异常,因为可能存在异步组件加载的可能
- `RModal`, `useModal` 方法,移除 `dad` 相关所有配置,使用 `draggable` 配置项替代
- 刷新的样式现在会跟随主题变化
- 锁屏密码现在会进行加密存储,并且会进行校验处理了
- 新增 `decrypt`, `decrypt` 方法,放置于 `utils/c` 包中
## Fixes
- 修复因为错误的注册全局事件,导致事件污染的问题,但是默认的 `ctrl + k`, `cmd + k` 快捷键依旧保留为全局按键
## 5.0.9
## Feats

View File

@ -15,6 +15,27 @@
--preloading-title-color: <%= preloadingConfig.titleColor %>;
--ray-theme-primary-fade-color: <%= appPrimaryColor.primaryFadeColor %>;
--ray-theme-primary-color: <%= appPrimaryColor.primaryColor %>;
--global-loading-bg-color: #ffffff;
}
@media (prefers-color-scheme: dark) {
#pre-loading-animation {
background-color: var(--global-loading-bg-color);
}
}
@media (prefers-color-scheme: light) {
#pre-loading-animation {
background-color: var(--global-loading-bg-color);
}
}
html.dark #pre-loading-animation {
background-color: var(--global-loading-bg-color);
}
html.light #pre-loading-animation {
background-color: var(--global-loading-bg-color);
}
#pre-loading-animation {
@ -23,13 +44,9 @@
right: 0;
top: 0;
bottom: 0;
background-color: #ffffff;
color: var(--preloading-title-color);
text-align: center;
}
.ray-template--dark #pre-loading-animation {
background-color: #2a3146;
background-color: var(--global-loading-bg-color);
}
#pre-loading-animation .pre-loading-animation__wrapper {
@ -95,6 +112,18 @@
}
}
</style>
<script>
;(function () {
const html = document.documentElement
const store = window.localStorage.getItem('piniaSettingStore')
const { _appTheme = false } = store ? JSON.parse(store) : {}
const loadingBgColor = _appTheme ? '#1c1e23' : '#ffffff'
html.classList.add(_appTheme ? 'dark' : 'light')
html.style.setProperty('--global-loading-bg-color', loadingBgColor)
html.style.setProperty('background-color', loadingBgColor)
})()
</script>
<body>
<div id="app"></div>
<div id="pre-loading-animation">

View File

@ -1,7 +1,7 @@
{
"name": "ray-template",
"private": false,
"version": "5.0.9",
"version": "5.0.10",
"type": "module",
"engines": {
"node": "^18.0.0 || ^20.0.0 || >=22.0.0",
@ -38,6 +38,7 @@
"@vueuse/core": "^12.0.0",
"axios": "^1.7.9",
"clipboard": "^2.0.11",
"crypto-js": "4.2.0",
"currency.js": "^2.0.4",
"dayjs": "^1.11.13",
"echarts": "^5.5.1",
@ -46,7 +47,7 @@
"jsbarcode": "3.11.6",
"lodash-es": "^4.17.21",
"mockjs": "1.1.0",
"naive-ui": "^2.40.4",
"naive-ui": "^2.41.0",
"pinia": "^2.3.0",
"pinia-plugin-persistedstate": "^4.1.3",
"print-js": "^1.6.0",
@ -106,7 +107,7 @@
"vite-plugin-svg-icons": "2.0.1",
"vite-svg-loader": "5.1.0",
"vitest": "2.0.5",
"vue-tsc": "2.1.10"
"vue-tsc": "2.2.0"
},
"description": "<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->",
"main": "index.ts",

376
pnpm-lock.yaml generated
View File

@ -23,6 +23,9 @@ importers:
clipboard:
specifier: ^2.0.11
version: 2.0.11
crypto-js:
specifier: 4.2.0
version: 4.2.0
currency.js:
specifier: ^2.0.4
version: 2.0.4
@ -48,14 +51,14 @@ importers:
specifier: 1.1.0
version: 1.1.0
naive-ui:
specifier: ^2.40.4
version: 2.40.4(vue@3.5.13(typescript@5.6.3))
specifier: ^2.41.0
version: 2.41.0(vue@3.5.13(typescript@5.6.3))
pinia:
specifier: ^2.3.0
version: 2.3.0(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3))
pinia-plugin-persistedstate:
specifier: ^4.1.3
version: 4.1.3(pinia@2.3.0(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3)))(rollup@4.29.1)(webpack-sources@3.2.3)
version: 4.1.3(pinia@2.3.0(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3)))(rollup@4.30.0)(webpack-sources@3.2.3)
print-js:
specifier: ^1.6.0
version: 1.6.0
@ -95,7 +98,7 @@ importers:
version: 1.10.27
'@intlify/unplugin-vue-i18n':
specifier: 4.0.0
version: 4.0.0(rollup@4.29.1)(vue-i18n@9.13.1(vue@3.5.13(typescript@5.6.3)))(webpack-sources@3.2.3)
version: 4.0.0(rollup@4.30.0)(vue-i18n@9.13.1(vue@3.5.13(typescript@5.6.3)))(webpack-sources@3.2.3)
'@types/crypto-js':
specifier: 4.2.2
version: 4.2.2
@ -176,7 +179,7 @@ importers:
version: 3.3.2
rollup-plugin-gzip:
specifier: 4.0.1
version: 4.0.1(rollup@4.29.1)
version: 4.0.1(rollup@4.30.0)
sass:
specifier: 1.83.0
version: 1.83.0
@ -188,10 +191,10 @@ importers:
version: 5.6.3
unplugin-auto-import:
specifier: 0.19.0
version: 0.19.0(@nuxt/kit@3.13.2(rollup@4.29.1)(webpack-sources@3.2.3))(@vueuse/core@12.0.0(typescript@5.6.3))(rollup@4.29.1)
version: 0.19.0(@nuxt/kit@3.13.2(rollup@4.30.0)(webpack-sources@3.2.3))(@vueuse/core@12.0.0(typescript@5.6.3))(rollup@4.30.0)
unplugin-vue-components:
specifier: 0.28.0
version: 0.28.0(@babel/parser@7.26.2)(@nuxt/kit@3.13.2(rollup@4.29.1)(webpack-sources@3.2.3))(rollup@4.29.1)(vue@3.5.13(typescript@5.6.3))
version: 0.28.0(@babel/parser@7.26.3)(@nuxt/kit@3.13.2(rollup@4.30.0)(webpack-sources@3.2.3))(rollup@4.30.0)(vue@3.5.13(typescript@5.6.3))
vite:
specifier: 6.0.7
version: 6.0.7(@types/node@22.5.5)(jiti@1.21.6)(sass@1.83.0)
@ -200,7 +203,7 @@ importers:
version: 0.15.2
vite-plugin-cdn2:
specifier: 1.1.0
version: 1.1.0(rollup@4.29.1)
version: 1.1.0(rollup@4.30.0)
vite-plugin-ejs:
specifier: 1.7.0
version: 1.7.0(vite@6.0.7(@types/node@22.5.5)(jiti@1.21.6)(sass@1.83.0))
@ -209,10 +212,10 @@ importers:
version: 1.8.1(eslint@9.11.0(jiti@1.21.6))(vite@6.0.7(@types/node@22.5.5)(jiti@1.21.6)(sass@1.83.0))
vite-plugin-inspect:
specifier: 0.8.4
version: 0.8.4(@nuxt/kit@3.13.2(rollup@4.29.1)(webpack-sources@3.2.3))(rollup@4.29.1)(vite@6.0.7(@types/node@22.5.5)(jiti@1.21.6)(sass@1.83.0))
version: 0.8.4(@nuxt/kit@3.13.2(rollup@4.30.0)(webpack-sources@3.2.3))(rollup@4.30.0)(vite@6.0.7(@types/node@22.5.5)(jiti@1.21.6)(sass@1.83.0))
vite-plugin-mock-dev-server:
specifier: 1.8.3
version: 1.8.3(esbuild@0.24.2)(rollup@4.29.1)(vite@6.0.7(@types/node@22.5.5)(jiti@1.21.6)(sass@1.83.0))
version: 1.8.3(esbuild@0.24.2)(rollup@4.30.0)(vite@6.0.7(@types/node@22.5.5)(jiti@1.21.6)(sass@1.83.0))
vite-plugin-svg-icons:
specifier: 2.0.1
version: 2.0.1(vite@6.0.7(@types/node@22.5.5)(jiti@1.21.6)(sass@1.83.0))
@ -223,8 +226,8 @@ importers:
specifier: 2.0.5
version: 2.0.5(@types/node@22.5.5)(@vitest/ui@1.5.2)(happy-dom@14.12.3)(sass@1.83.0)
vue-tsc:
specifier: 2.1.10
version: 2.1.10(typescript@5.6.3)
specifier: 2.2.0
version: 2.2.0(typescript@5.6.3)
packages:
@ -405,6 +408,11 @@ packages:
engines: {node: '>=6.0.0'}
hasBin: true
'@babel/parser@7.26.3':
resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==}
engines: {node: '>=6.0.0'}
hasBin: true
'@babel/plugin-syntax-jsx@7.25.9':
resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==}
engines: {node: '>=6.9.0'}
@ -451,6 +459,10 @@ packages:
resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==}
engines: {node: '>=6.9.0'}
'@babel/types@7.26.3':
resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==}
engines: {node: '>=6.9.0'}
'@commitlint/cli@19.3.0':
resolution: {integrity: sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g==}
engines: {node: '>=v18'}
@ -1105,98 +1117,98 @@ packages:
rollup:
optional: true
'@rollup/rollup-android-arm-eabi@4.29.1':
resolution: {integrity: sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw==}
'@rollup/rollup-android-arm-eabi@4.30.0':
resolution: {integrity: sha512-qFcFto9figFLz2g25DxJ1WWL9+c91fTxnGuwhToCl8BaqDsDYMl/kOnBXAyAqkkzAWimYMSWNPWEjt+ADAHuoQ==}
cpu: [arm]
os: [android]
'@rollup/rollup-android-arm64@4.29.1':
resolution: {integrity: sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==}
'@rollup/rollup-android-arm64@4.30.0':
resolution: {integrity: sha512-vqrQdusvVl7dthqNjWCL043qelBK+gv9v3ZiqdxgaJvmZyIAAXMjeGVSqZynKq69T7062T5VrVTuikKSAAVP6A==}
cpu: [arm64]
os: [android]
'@rollup/rollup-darwin-arm64@4.29.1':
resolution: {integrity: sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==}
'@rollup/rollup-darwin-arm64@4.30.0':
resolution: {integrity: sha512-617pd92LhdA9+wpixnzsyhVft3szYiN16aNUMzVkf2N+yAk8UXY226Bfp36LvxYTUt7MO/ycqGFjQgJ0wlMaWQ==}
cpu: [arm64]
os: [darwin]
'@rollup/rollup-darwin-x64@4.29.1':
resolution: {integrity: sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==}
'@rollup/rollup-darwin-x64@4.30.0':
resolution: {integrity: sha512-Y3b4oDoaEhCypg8ajPqigKDcpi5ZZovemQl9Edpem0uNv6UUjXv7iySBpGIUTSs2ovWOzYpfw9EbFJXF/fJHWw==}
cpu: [x64]
os: [darwin]
'@rollup/rollup-freebsd-arm64@4.29.1':
resolution: {integrity: sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==}
'@rollup/rollup-freebsd-arm64@4.30.0':
resolution: {integrity: sha512-3REQJ4f90sFIBfa0BUokiCdrV/E4uIjhkWe1bMgCkhFXbf4D8YN6C4zwJL881GM818qVYE9BO3dGwjKhpo2ABA==}
cpu: [arm64]
os: [freebsd]
'@rollup/rollup-freebsd-x64@4.29.1':
resolution: {integrity: sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==}
'@rollup/rollup-freebsd-x64@4.30.0':
resolution: {integrity: sha512-ZtY3Y8icbe3Cc+uQicsXG5L+CRGUfLZjW6j2gn5ikpltt3Whqjfo5mkyZ86UiuHF9Q3ZsaQeW7YswlHnN+lAcg==}
cpu: [x64]
os: [freebsd]
'@rollup/rollup-linux-arm-gnueabihf@4.29.1':
resolution: {integrity: sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==}
'@rollup/rollup-linux-arm-gnueabihf@4.30.0':
resolution: {integrity: sha512-bsPGGzfiHXMhQGuFGpmo2PyTwcrh2otL6ycSZAFTESviUoBOuxF7iBbAL5IJXc/69peXl5rAtbewBFeASZ9O0g==}
cpu: [arm]
os: [linux]
'@rollup/rollup-linux-arm-musleabihf@4.29.1':
resolution: {integrity: sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==}
'@rollup/rollup-linux-arm-musleabihf@4.30.0':
resolution: {integrity: sha512-kvyIECEhs2DrrdfQf++maCWJIQ974EI4txlz1nNSBaCdtf7i5Xf1AQCEJWOC5rEBisdaMFFnOWNLYt7KpFqy5A==}
cpu: [arm]
os: [linux]
'@rollup/rollup-linux-arm64-gnu@4.29.1':
resolution: {integrity: sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==}
'@rollup/rollup-linux-arm64-gnu@4.30.0':
resolution: {integrity: sha512-CFE7zDNrokaotXu+shwIrmWrFxllg79vciH4E/zeK7NitVuWEaXRzS0mFfFvyhZfn8WfVOG/1E9u8/DFEgK7WQ==}
cpu: [arm64]
os: [linux]
'@rollup/rollup-linux-arm64-musl@4.29.1':
resolution: {integrity: sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==}
'@rollup/rollup-linux-arm64-musl@4.30.0':
resolution: {integrity: sha512-MctNTBlvMcIBP0t8lV/NXiUwFg9oK5F79CxLU+a3xgrdJjfBLVIEHSAjQ9+ipofN2GKaMLnFFXLltg1HEEPaGQ==}
cpu: [arm64]
os: [linux]
'@rollup/rollup-linux-loongarch64-gnu@4.29.1':
resolution: {integrity: sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==}
'@rollup/rollup-linux-loongarch64-gnu@4.30.0':
resolution: {integrity: sha512-fBpoYwLEPivL3q368+gwn4qnYnr7GVwM6NnMo8rJ4wb0p/Y5lg88vQRRP077gf+tc25akuqd+1Sxbn9meODhwA==}
cpu: [loong64]
os: [linux]
'@rollup/rollup-linux-powerpc64le-gnu@4.29.1':
resolution: {integrity: sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==}
'@rollup/rollup-linux-powerpc64le-gnu@4.30.0':
resolution: {integrity: sha512-1hiHPV6dUaqIMXrIjN+vgJqtfkLpqHS1Xsg0oUfUVD98xGp1wX89PIXgDF2DWra1nxAd8dfE0Dk59MyeKaBVAw==}
cpu: [ppc64]
os: [linux]
'@rollup/rollup-linux-riscv64-gnu@4.29.1':
resolution: {integrity: sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==}
'@rollup/rollup-linux-riscv64-gnu@4.30.0':
resolution: {integrity: sha512-U0xcC80SMpEbvvLw92emHrNjlS3OXjAM0aVzlWfar6PR0ODWCTQtKeeB+tlAPGfZQXicv1SpWwRz9Hyzq3Jx3g==}
cpu: [riscv64]
os: [linux]
'@rollup/rollup-linux-s390x-gnu@4.29.1':
resolution: {integrity: sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==}
'@rollup/rollup-linux-s390x-gnu@4.30.0':
resolution: {integrity: sha512-VU/P/IODrNPasgZDLIFJmMiLGez+BN11DQWfTVlViJVabyF3JaeaJkP6teI8760f18BMGCQOW9gOmuzFaI1pUw==}
cpu: [s390x]
os: [linux]
'@rollup/rollup-linux-x64-gnu@4.29.1':
resolution: {integrity: sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==}
'@rollup/rollup-linux-x64-gnu@4.30.0':
resolution: {integrity: sha512-laQVRvdbKmjXuFA3ZiZj7+U24FcmoPlXEi2OyLfbpY2MW1oxLt9Au8q9eHd0x6Pw/Kw4oe9gwVXWwIf2PVqblg==}
cpu: [x64]
os: [linux]
'@rollup/rollup-linux-x64-musl@4.29.1':
resolution: {integrity: sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==}
'@rollup/rollup-linux-x64-musl@4.30.0':
resolution: {integrity: sha512-3wzKzduS7jzxqcOvy/ocU/gMR3/QrHEFLge5CD7Si9fyHuoXcidyYZ6jyx8OPYmCcGm3uKTUl+9jUSAY74Ln5A==}
cpu: [x64]
os: [linux]
'@rollup/rollup-win32-arm64-msvc@4.29.1':
resolution: {integrity: sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==}
'@rollup/rollup-win32-arm64-msvc@4.30.0':
resolution: {integrity: sha512-jROwnI1+wPyuv696rAFHp5+6RFhXGGwgmgSfzE8e4xfit6oLRg7GyMArVUoM3ChS045OwWr9aTnU+2c1UdBMyw==}
cpu: [arm64]
os: [win32]
'@rollup/rollup-win32-ia32-msvc@4.29.1':
resolution: {integrity: sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==}
'@rollup/rollup-win32-ia32-msvc@4.30.0':
resolution: {integrity: sha512-duzweyup5WELhcXx5H1jokpr13i3BV9b48FMiikYAwk/MT1LrMYYk2TzenBd0jj4ivQIt58JWSxc19y4SvLP4g==}
cpu: [ia32]
os: [win32]
'@rollup/rollup-win32-x64-msvc@4.29.1':
resolution: {integrity: sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==}
'@rollup/rollup-win32-x64-msvc@4.30.0':
resolution: {integrity: sha512-DYvxS0M07PvgvavMIybCOBYheyrqlui6ZQBHJs6GqduVzHSZ06TPPvlfvnYstjODHQ8UUXFwt5YE+h0jFI8kwg==}
cpu: [x64]
os: [win32]
@ -1247,6 +1259,9 @@ packages:
'@types/lodash-es@4.17.12':
resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==}
'@types/lodash@4.17.13':
resolution: {integrity: sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==}
'@types/lodash@4.17.6':
resolution: {integrity: sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==}
@ -1367,14 +1382,14 @@ packages:
'@vitest/utils@2.0.5':
resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==}
'@volar/language-core@2.4.9':
resolution: {integrity: sha512-t++GIrUeQnKCieZdY9e+Uar2VmTqOE4Z9KcEcdSHKmKZPuqpbbWow1YKe1i3HpU2s1JqLRVM8y/n87WKXyxJAg==}
'@volar/language-core@2.4.11':
resolution: {integrity: sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==}
'@volar/source-map@2.4.9':
resolution: {integrity: sha512-UGE+WgJwk64OcfBwBOBKIzmF+uNx4dC5GzOvaVsHbTBp/IVqeTVsGiO5CwBAt6l3vVXYbMuddG2DU8FEnBRxTg==}
'@volar/source-map@2.4.11':
resolution: {integrity: sha512-ZQpmafIGvaZMn/8iuvCFGrW3smeqkq/IIh9F1SdSx9aUl0J4Iurzd6/FhmjNO5g2ejF3rT45dKskgXWiofqlZQ==}
'@volar/typescript@2.4.9':
resolution: {integrity: sha512-Zmh3Bq8CFD6OANKYsi4vs/l7togwfjFH0kgrT12uAsDff2AJQjbEUKTVUnxmHbnbH2B9ja7Lb6Mu/Wj9wBuJlg==}
'@volar/typescript@2.4.11':
resolution: {integrity: sha512-2DT+Tdh88Spp5PyPbqhyoYavYCPDsqbHLFwcUI9K1NlY1YgUJvujGdrqUp0zWxnW7KWNTr3xSpMuv2WnaTKDAw==}
'@vue/babel-helper-vue-transform-on@1.2.5':
resolution: {integrity: sha512-lOz4t39ZdmU4DJAa2hwPYmKc8EsuGa2U0L9KaZaOJUt0UwQNjNA3AZTq6uEivhOKhhG1Wvy96SvYBoFmCg3uuw==}
@ -1433,8 +1448,8 @@ packages:
typescript:
optional: true
'@vue/language-core@2.1.10':
resolution: {integrity: sha512-DAI289d0K3AB5TUG3xDp9OuQ71CnrujQwJrQnfuZDwo6eGNf0UoRlPuaVNO+Zrn65PC3j0oB2i7mNmVPggeGeQ==}
'@vue/language-core@2.2.0':
resolution: {integrity: sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
@ -1559,8 +1574,8 @@ packages:
ajv@8.17.1:
resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
alien-signals@0.2.0:
resolution: {integrity: sha512-StlonZhBBrsPPwrDjiPAiVTf/rolxffLxVPT60Qv/t88BZ81BvUVzHgGqEFvJ1ii8HXtm1+zU2Icr59tfWEcag==}
alien-signals@0.4.12:
resolution: {integrity: sha512-Og0PgAihxlp1R22bsoBsyhhMG4+qhU+fkkLPoGBQkYVc3qt9rYnrwYTf+M6kqUqUZpf3rXDnpL90iKa0QcSVVg==}
ansi-escapes@6.2.1:
resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==}
@ -1949,6 +1964,9 @@ packages:
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
engines: {node: '>= 8'}
crypto-js@4.2.0:
resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==}
css-render@0.15.14:
resolution: {integrity: sha512-9nF4PdUle+5ta4W5SyZdLCCmFd37uVimSjg1evcTqKJCyvCEEj12WKzOSBNak6r4im4J4iYXKH1OWpUV5LBYFg==}
@ -2001,10 +2019,10 @@ packages:
resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==}
engines: {node: '>=12'}
date-fns-tz@3.1.3:
resolution: {integrity: sha512-ZfbMu+nbzW0mEzC8VZrLiSWvUIaI3aRHeq33mTe7Y38UctKukgqPR4nTDwcwS4d64Gf8GghnVsroBuMY3eiTeA==}
date-fns-tz@3.2.0:
resolution: {integrity: sha512-sg8HqoTEulcbbbVXeg84u5UnlsQa8GS5QXMqjjYIhS4abEVVKIUwe0/l/UhrZdKaL/W5eWZNlbTeEIiOXTcsBQ==}
peerDependencies:
date-fns: ^3.0.0
date-fns: ^3.0.0 || ^4.0.0
date-fns@3.6.0:
resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==}
@ -2667,8 +2685,8 @@ packages:
resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==}
engines: {node: '>=8'}
highlight.js@11.9.0:
resolution: {integrity: sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==}
highlight.js@11.11.1:
resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==}
engines: {node: '>=12.0.0'}
hoist-non-react-statics@2.5.5:
@ -3266,8 +3284,8 @@ packages:
resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==}
engines: {node: '>=10'}
naive-ui@2.40.4:
resolution: {integrity: sha512-SDFbW9/VEZix/gmzj54jH6c0YDBVM6o0mG1520RAWKtPSqVrAp5r8qLi8dYvvDmcs/qoRbzM3QGuA4GxQJ/iEg==}
naive-ui@2.41.0:
resolution: {integrity: sha512-KnmLg+xPLwXV8QVR7ZZ69eCjvel7R5vru8+eFe4VoAJHEgqAJgVph6Zno9K2IVQRpSF3GBGea3tjavslOR4FAA==}
peerDependencies:
vue: ^3.0.0
@ -3678,8 +3696,8 @@ packages:
engines: {node: '>=10.0.0'}
hasBin: true
rollup@4.29.1:
resolution: {integrity: sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==}
rollup@4.30.0:
resolution: {integrity: sha512-sDnr1pcjTgUT69qBksNF1N1anwfbyYG6TBQ22b03bII8EdiUQ7J0TlozVaTMjT/eEJAO49e1ndV7t+UZfL1+vA==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
@ -3715,8 +3733,8 @@ packages:
scule@1.3.0:
resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==}
seemly@0.3.8:
resolution: {integrity: sha512-MW8Qs6vbzo0pHmDpFSYPna+lwpZ6Zk1ancbajw/7E8TKtHdV+1DfZZD+kKJEhG/cAoB/i+LiT+5msZOqj0DwRA==}
seemly@0.3.9:
resolution: {integrity: sha512-bMLcaEqhIViiPbaumjLN8t1y+JpD/N8SiyYOyp0i0W6RgdyLWboIsUWAbZojF//JyerxPZR5Tgda+x3Pdne75A==}
select@1.1.2:
resolution: {integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==}
@ -4381,8 +4399,8 @@ packages:
peerDependencies:
vue: ^3.2.0
vue-tsc@2.1.10:
resolution: {integrity: sha512-RBNSfaaRHcN5uqVqJSZh++Gy/YUzryuv9u1aFWhsammDJXNtUiJMNoJ747lZcQ68wUQFx6E73y4FY3D8E7FGMA==}
vue-tsc@2.2.0:
resolution: {integrity: sha512-gtmM1sUuJ8aSb0KoAFmK9yMxb8TxjewmxqTJ1aKphD5Cbu0rULFY6+UQT51zW7SpUcenfPUuflKyVwyx9Qdnxg==}
hasBin: true
peerDependencies:
typescript: '>=5.0.0'
@ -4769,6 +4787,10 @@ snapshots:
dependencies:
'@babel/types': 7.26.0
'@babel/parser@7.26.3':
dependencies:
'@babel/types': 7.26.3
'@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)':
dependencies:
'@babel/core': 7.26.0
@ -4842,6 +4864,11 @@ snapshots:
'@babel/helper-string-parser': 7.25.9
'@babel/helper-validator-identifier': 7.25.9
'@babel/types@7.26.3':
dependencies:
'@babel/helper-string-parser': 7.25.9
'@babel/helper-validator-identifier': 7.25.9
'@commitlint/cli@19.3.0(@types/node@22.5.5)(typescript@5.6.3)':
dependencies:
'@commitlint/format': 19.3.0
@ -5187,11 +5214,11 @@ snapshots:
'@intlify/shared@9.13.1': {}
'@intlify/unplugin-vue-i18n@4.0.0(rollup@4.29.1)(vue-i18n@9.13.1(vue@3.5.13(typescript@5.6.3)))(webpack-sources@3.2.3)':
'@intlify/unplugin-vue-i18n@4.0.0(rollup@4.30.0)(vue-i18n@9.13.1(vue@3.5.13(typescript@5.6.3)))(webpack-sources@3.2.3)':
dependencies:
'@intlify/bundle-utils': 8.0.0(vue-i18n@9.13.1(vue@3.5.13(typescript@5.6.3)))
'@intlify/shared': 9.13.1
'@rollup/pluginutils': 5.1.2(rollup@4.29.1)
'@rollup/pluginutils': 5.1.2(rollup@4.30.0)
'@vue/compiler-sfc': 3.5.13
debug: 4.3.7
fast-glob: 3.3.2
@ -5275,9 +5302,9 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.17.1
'@nuxt/kit@3.13.2(rollup@4.29.1)(webpack-sources@3.2.3)':
'@nuxt/kit@3.13.2(rollup@4.30.0)(webpack-sources@3.2.3)':
dependencies:
'@nuxt/schema': 3.13.2(rollup@4.29.1)(webpack-sources@3.2.3)
'@nuxt/schema': 3.13.2(rollup@4.30.0)(webpack-sources@3.2.3)
c12: 1.11.2
consola: 3.2.3
defu: 6.1.4
@ -5295,7 +5322,7 @@ snapshots:
semver: 7.6.3
ufo: 1.5.4
unctx: 2.3.1(webpack-sources@3.2.3)
unimport: 3.13.1(rollup@4.29.1)(webpack-sources@3.2.3)
unimport: 3.13.1(rollup@4.30.0)(webpack-sources@3.2.3)
untyped: 1.4.2
transitivePeerDependencies:
- magicast
@ -5303,7 +5330,7 @@ snapshots:
- supports-color
- webpack-sources
'@nuxt/schema@3.13.2(rollup@4.29.1)(webpack-sources@3.2.3)':
'@nuxt/schema@3.13.2(rollup@4.30.0)(webpack-sources@3.2.3)':
dependencies:
compatx: 0.1.8
consola: 3.2.3
@ -5315,7 +5342,7 @@ snapshots:
std-env: 3.7.0
ufo: 1.5.4
uncrypto: 0.1.3
unimport: 3.13.1(rollup@4.29.1)(webpack-sources@3.2.3)
unimport: 3.13.1(rollup@4.30.0)(webpack-sources@3.2.3)
untyped: 1.4.2
transitivePeerDependencies:
- rollup
@ -5399,85 +5426,85 @@ snapshots:
estree-walker: 2.0.2
picomatch: 2.3.1
'@rollup/pluginutils@5.1.0(rollup@4.29.1)':
'@rollup/pluginutils@5.1.0(rollup@4.30.0)':
dependencies:
'@types/estree': 1.0.5
estree-walker: 2.0.2
picomatch: 2.3.1
optionalDependencies:
rollup: 4.29.1
rollup: 4.30.0
'@rollup/pluginutils@5.1.2(rollup@4.29.1)':
'@rollup/pluginutils@5.1.2(rollup@4.30.0)':
dependencies:
'@types/estree': 1.0.6
estree-walker: 2.0.2
picomatch: 2.3.1
optionalDependencies:
rollup: 4.29.1
rollup: 4.30.0
'@rollup/pluginutils@5.1.4(rollup@4.29.1)':
'@rollup/pluginutils@5.1.4(rollup@4.30.0)':
dependencies:
'@types/estree': 1.0.6
estree-walker: 2.0.2
picomatch: 4.0.2
optionalDependencies:
rollup: 4.29.1
rollup: 4.30.0
'@rollup/rollup-android-arm-eabi@4.29.1':
'@rollup/rollup-android-arm-eabi@4.30.0':
optional: true
'@rollup/rollup-android-arm64@4.29.1':
'@rollup/rollup-android-arm64@4.30.0':
optional: true
'@rollup/rollup-darwin-arm64@4.29.1':
'@rollup/rollup-darwin-arm64@4.30.0':
optional: true
'@rollup/rollup-darwin-x64@4.29.1':
'@rollup/rollup-darwin-x64@4.30.0':
optional: true
'@rollup/rollup-freebsd-arm64@4.29.1':
'@rollup/rollup-freebsd-arm64@4.30.0':
optional: true
'@rollup/rollup-freebsd-x64@4.29.1':
'@rollup/rollup-freebsd-x64@4.30.0':
optional: true
'@rollup/rollup-linux-arm-gnueabihf@4.29.1':
'@rollup/rollup-linux-arm-gnueabihf@4.30.0':
optional: true
'@rollup/rollup-linux-arm-musleabihf@4.29.1':
'@rollup/rollup-linux-arm-musleabihf@4.30.0':
optional: true
'@rollup/rollup-linux-arm64-gnu@4.29.1':
'@rollup/rollup-linux-arm64-gnu@4.30.0':
optional: true
'@rollup/rollup-linux-arm64-musl@4.29.1':
'@rollup/rollup-linux-arm64-musl@4.30.0':
optional: true
'@rollup/rollup-linux-loongarch64-gnu@4.29.1':
'@rollup/rollup-linux-loongarch64-gnu@4.30.0':
optional: true
'@rollup/rollup-linux-powerpc64le-gnu@4.29.1':
'@rollup/rollup-linux-powerpc64le-gnu@4.30.0':
optional: true
'@rollup/rollup-linux-riscv64-gnu@4.29.1':
'@rollup/rollup-linux-riscv64-gnu@4.30.0':
optional: true
'@rollup/rollup-linux-s390x-gnu@4.29.1':
'@rollup/rollup-linux-s390x-gnu@4.30.0':
optional: true
'@rollup/rollup-linux-x64-gnu@4.29.1':
'@rollup/rollup-linux-x64-gnu@4.30.0':
optional: true
'@rollup/rollup-linux-x64-musl@4.29.1':
'@rollup/rollup-linux-x64-musl@4.30.0':
optional: true
'@rollup/rollup-win32-arm64-msvc@4.29.1':
'@rollup/rollup-win32-arm64-msvc@4.30.0':
optional: true
'@rollup/rollup-win32-ia32-msvc@4.29.1':
'@rollup/rollup-win32-ia32-msvc@4.30.0':
optional: true
'@rollup/rollup-win32-x64-msvc@4.29.1':
'@rollup/rollup-win32-x64-msvc@4.30.0':
optional: true
'@sinclair/typebox@0.27.8': {}
@ -5519,6 +5546,8 @@ snapshots:
dependencies:
'@types/lodash': 4.17.6
'@types/lodash@4.17.13': {}
'@types/lodash@4.17.6': {}
'@types/minimatch@3.0.5': {}
@ -5697,15 +5726,15 @@ snapshots:
loupe: 3.1.1
tinyrainbow: 1.2.0
'@volar/language-core@2.4.9':
'@volar/language-core@2.4.11':
dependencies:
'@volar/source-map': 2.4.9
'@volar/source-map': 2.4.11
'@volar/source-map@2.4.9': {}
'@volar/source-map@2.4.11': {}
'@volar/typescript@2.4.9':
'@volar/typescript@2.4.11':
dependencies:
'@volar/language-core': 2.4.9
'@volar/language-core': 2.4.11
path-browserify: 1.0.1
vscode-uri: 3.0.8
@ -5741,7 +5770,7 @@ snapshots:
'@vue/compiler-core@3.5.13':
dependencies:
'@babel/parser': 7.26.2
'@babel/parser': 7.26.3
'@vue/shared': 3.5.13
entities: 4.5.0
estree-walker: 2.0.2
@ -5801,13 +5830,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@vue/language-core@2.1.10(typescript@5.6.3)':
'@vue/language-core@2.2.0(typescript@5.6.3)':
dependencies:
'@volar/language-core': 2.4.9
'@volar/language-core': 2.4.11
'@vue/compiler-dom': 3.5.13
'@vue/compiler-vue2': 2.7.16
'@vue/shared': 3.5.13
alien-signals: 0.2.0
alien-signals: 0.4.12
minimatch: 9.0.5
muggle-string: 0.4.1
path-browserify: 1.0.1
@ -5924,7 +5953,7 @@ snapshots:
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
alien-signals@0.2.0: {}
alien-signals@0.4.12: {}
ansi-escapes@6.2.1: {}
@ -6328,6 +6357,8 @@ snapshots:
shebang-command: 2.0.0
which: 2.0.2
crypto-js@4.2.0: {}
css-render@0.15.14:
dependencies:
'@emotion/hash': 0.8.0
@ -6384,7 +6415,7 @@ snapshots:
dargs@8.1.0: {}
date-fns-tz@3.1.3(date-fns@3.6.0):
date-fns-tz@3.2.0(date-fns@3.6.0):
dependencies:
date-fns: 3.6.0
@ -7126,7 +7157,7 @@ snapshots:
hexoid@1.0.0: {}
highlight.js@11.9.0: {}
highlight.js@11.11.1: {}
hoist-non-react-statics@2.5.5: {}
@ -7667,23 +7698,23 @@ snapshots:
arrify: 2.0.1
minimatch: 3.1.2
naive-ui@2.40.4(vue@3.5.13(typescript@5.6.3)):
naive-ui@2.41.0(vue@3.5.13(typescript@5.6.3)):
dependencies:
'@css-render/plugin-bem': 0.15.14(css-render@0.15.14)
'@css-render/vue3-ssr': 0.15.14(vue@3.5.13(typescript@5.6.3))
'@types/katex': 0.16.7
'@types/lodash': 4.17.6
'@types/lodash': 4.17.13
'@types/lodash-es': 4.17.12
async-validator: 4.2.5
css-render: 0.15.14
csstype: 3.1.3
date-fns: 3.6.0
date-fns-tz: 3.1.3(date-fns@3.6.0)
date-fns-tz: 3.2.0(date-fns@3.6.0)
evtd: 0.2.4
highlight.js: 11.9.0
highlight.js: 11.11.1
lodash: 4.17.21
lodash-es: 4.17.21
seemly: 0.3.8
seemly: 0.3.9
treemate: 0.3.11
vdirs: 0.1.8(vue@3.5.13(typescript@5.6.3))
vooks: 0.2.12(vue@3.5.13(typescript@5.6.3))
@ -7862,9 +7893,9 @@ snapshots:
pidtree@0.6.0: {}
pinia-plugin-persistedstate@4.1.3(pinia@2.3.0(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3)))(rollup@4.29.1)(webpack-sources@3.2.3):
pinia-plugin-persistedstate@4.1.3(pinia@2.3.0(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3)))(rollup@4.30.0)(webpack-sources@3.2.3):
dependencies:
'@nuxt/kit': 3.13.2(rollup@4.29.1)(webpack-sources@3.2.3)
'@nuxt/kit': 3.13.2(rollup@4.30.0)(webpack-sources@3.2.3)
deep-pick-omit: 1.2.1
defu: 6.1.4
destr: 2.0.3
@ -8072,37 +8103,37 @@ snapshots:
rfdc@1.3.1: {}
rollup-plugin-gzip@4.0.1(rollup@4.29.1):
rollup-plugin-gzip@4.0.1(rollup@4.30.0):
dependencies:
rollup: 4.29.1
rollup: 4.30.0
rollup@2.79.1:
optionalDependencies:
fsevents: 2.3.3
rollup@4.29.1:
rollup@4.30.0:
dependencies:
'@types/estree': 1.0.6
optionalDependencies:
'@rollup/rollup-android-arm-eabi': 4.29.1
'@rollup/rollup-android-arm64': 4.29.1
'@rollup/rollup-darwin-arm64': 4.29.1
'@rollup/rollup-darwin-x64': 4.29.1
'@rollup/rollup-freebsd-arm64': 4.29.1
'@rollup/rollup-freebsd-x64': 4.29.1
'@rollup/rollup-linux-arm-gnueabihf': 4.29.1
'@rollup/rollup-linux-arm-musleabihf': 4.29.1
'@rollup/rollup-linux-arm64-gnu': 4.29.1
'@rollup/rollup-linux-arm64-musl': 4.29.1
'@rollup/rollup-linux-loongarch64-gnu': 4.29.1
'@rollup/rollup-linux-powerpc64le-gnu': 4.29.1
'@rollup/rollup-linux-riscv64-gnu': 4.29.1
'@rollup/rollup-linux-s390x-gnu': 4.29.1
'@rollup/rollup-linux-x64-gnu': 4.29.1
'@rollup/rollup-linux-x64-musl': 4.29.1
'@rollup/rollup-win32-arm64-msvc': 4.29.1
'@rollup/rollup-win32-ia32-msvc': 4.29.1
'@rollup/rollup-win32-x64-msvc': 4.29.1
'@rollup/rollup-android-arm-eabi': 4.30.0
'@rollup/rollup-android-arm64': 4.30.0
'@rollup/rollup-darwin-arm64': 4.30.0
'@rollup/rollup-darwin-x64': 4.30.0
'@rollup/rollup-freebsd-arm64': 4.30.0
'@rollup/rollup-freebsd-x64': 4.30.0
'@rollup/rollup-linux-arm-gnueabihf': 4.30.0
'@rollup/rollup-linux-arm-musleabihf': 4.30.0
'@rollup/rollup-linux-arm64-gnu': 4.30.0
'@rollup/rollup-linux-arm64-musl': 4.30.0
'@rollup/rollup-linux-loongarch64-gnu': 4.30.0
'@rollup/rollup-linux-powerpc64le-gnu': 4.30.0
'@rollup/rollup-linux-riscv64-gnu': 4.30.0
'@rollup/rollup-linux-s390x-gnu': 4.30.0
'@rollup/rollup-linux-x64-gnu': 4.30.0
'@rollup/rollup-linux-x64-musl': 4.30.0
'@rollup/rollup-win32-arm64-msvc': 4.30.0
'@rollup/rollup-win32-ia32-msvc': 4.30.0
'@rollup/rollup-win32-x64-msvc': 4.30.0
fsevents: 2.3.3
rs-module-lexer@2.3.0:
@ -8143,7 +8174,7 @@ snapshots:
scule@1.3.0: {}
seemly@0.3.8: {}
seemly@0.3.9: {}
select@1.1.2: {}
@ -8515,9 +8546,9 @@ snapshots:
unidecode@0.1.8: {}
unimport@3.13.1(rollup@4.29.1)(webpack-sources@3.2.3):
unimport@3.13.1(rollup@4.30.0)(webpack-sources@3.2.3):
dependencies:
'@rollup/pluginutils': 5.1.2(rollup@4.29.1)
'@rollup/pluginutils': 5.1.2(rollup@4.30.0)
acorn: 8.12.1
escape-string-regexp: 5.0.0
estree-walker: 3.0.3
@ -8534,9 +8565,9 @@ snapshots:
- rollup
- webpack-sources
unimport@3.14.5(rollup@4.29.1):
unimport@3.14.5(rollup@4.30.0):
dependencies:
'@rollup/pluginutils': 5.1.4(rollup@4.29.1)
'@rollup/pluginutils': 5.1.4(rollup@4.30.0)
acorn: 8.14.0
escape-string-regexp: 5.0.0
estree-walker: 3.0.3
@ -8564,25 +8595,25 @@ snapshots:
unpipe@1.0.0: {}
unplugin-auto-import@0.19.0(@nuxt/kit@3.13.2(rollup@4.29.1)(webpack-sources@3.2.3))(@vueuse/core@12.0.0(typescript@5.6.3))(rollup@4.29.1):
unplugin-auto-import@0.19.0(@nuxt/kit@3.13.2(rollup@4.30.0)(webpack-sources@3.2.3))(@vueuse/core@12.0.0(typescript@5.6.3))(rollup@4.30.0):
dependencies:
'@antfu/utils': 0.7.10
'@rollup/pluginutils': 5.1.4(rollup@4.29.1)
'@rollup/pluginutils': 5.1.4(rollup@4.30.0)
local-pkg: 0.5.1
magic-string: 0.30.17
picomatch: 4.0.2
unimport: 3.14.5(rollup@4.29.1)
unimport: 3.14.5(rollup@4.30.0)
unplugin: 2.1.0
optionalDependencies:
'@nuxt/kit': 3.13.2(rollup@4.29.1)(webpack-sources@3.2.3)
'@nuxt/kit': 3.13.2(rollup@4.30.0)(webpack-sources@3.2.3)
'@vueuse/core': 12.0.0(typescript@5.6.3)
transitivePeerDependencies:
- rollup
unplugin-vue-components@0.28.0(@babel/parser@7.26.2)(@nuxt/kit@3.13.2(rollup@4.29.1)(webpack-sources@3.2.3))(rollup@4.29.1)(vue@3.5.13(typescript@5.6.3)):
unplugin-vue-components@0.28.0(@babel/parser@7.26.3)(@nuxt/kit@3.13.2(rollup@4.30.0)(webpack-sources@3.2.3))(rollup@4.30.0)(vue@3.5.13(typescript@5.6.3)):
dependencies:
'@antfu/utils': 0.7.10
'@rollup/pluginutils': 5.1.4(rollup@4.29.1)
'@rollup/pluginutils': 5.1.4(rollup@4.30.0)
chokidar: 3.6.0
debug: 4.4.0
fast-glob: 3.3.2
@ -8593,8 +8624,8 @@ snapshots:
unplugin: 2.1.0
vue: 3.5.13(typescript@5.6.3)
optionalDependencies:
'@babel/parser': 7.26.2
'@nuxt/kit': 3.13.2(rollup@4.29.1)(webpack-sources@3.2.3)
'@babel/parser': 7.26.3
'@nuxt/kit': 3.13.2(rollup@4.30.0)(webpack-sources@3.2.3)
transitivePeerDependencies:
- rollup
- supports-color
@ -8686,10 +8717,10 @@ snapshots:
- supports-color
- terser
vite-plugin-cdn2@1.1.0(rollup@4.29.1):
vite-plugin-cdn2@1.1.0(rollup@4.30.0):
dependencies:
'@babel/core': 7.24.1
'@rollup/pluginutils': 5.1.0(rollup@4.29.1)
'@rollup/pluginutils': 5.1.0(rollup@4.30.0)
'@xn-sakina/rml-wasm': 2.3.0
debug: 4.3.4
magic-string: 0.30.8
@ -8711,10 +8742,10 @@ snapshots:
rollup: 2.79.1
vite: 6.0.7(@types/node@22.5.5)(jiti@1.21.6)(sass@1.83.0)
vite-plugin-inspect@0.8.4(@nuxt/kit@3.13.2(rollup@4.29.1)(webpack-sources@3.2.3))(rollup@4.29.1)(vite@6.0.7(@types/node@22.5.5)(jiti@1.21.6)(sass@1.83.0)):
vite-plugin-inspect@0.8.4(@nuxt/kit@3.13.2(rollup@4.30.0)(webpack-sources@3.2.3))(rollup@4.30.0)(vite@6.0.7(@types/node@22.5.5)(jiti@1.21.6)(sass@1.83.0)):
dependencies:
'@antfu/utils': 0.7.10
'@rollup/pluginutils': 5.1.2(rollup@4.29.1)
'@rollup/pluginutils': 5.1.2(rollup@4.30.0)
debug: 4.3.7
error-stack-parser-es: 0.1.1
fs-extra: 11.2.0
@ -8724,15 +8755,15 @@ snapshots:
sirv: 2.0.4
vite: 6.0.7(@types/node@22.5.5)(jiti@1.21.6)(sass@1.83.0)
optionalDependencies:
'@nuxt/kit': 3.13.2(rollup@4.29.1)(webpack-sources@3.2.3)
'@nuxt/kit': 3.13.2(rollup@4.30.0)(webpack-sources@3.2.3)
transitivePeerDependencies:
- rollup
- supports-color
vite-plugin-mock-dev-server@1.8.3(esbuild@0.24.2)(rollup@4.29.1)(vite@6.0.7(@types/node@22.5.5)(jiti@1.21.6)(sass@1.83.0)):
vite-plugin-mock-dev-server@1.8.3(esbuild@0.24.2)(rollup@4.30.0)(vite@6.0.7(@types/node@22.5.5)(jiti@1.21.6)(sass@1.83.0)):
dependencies:
'@pengzhanbo/utils': 1.2.0
'@rollup/pluginutils': 5.1.4(rollup@4.29.1)
'@rollup/pluginutils': 5.1.4(rollup@4.30.0)
chokidar: 3.6.0
co-body: 6.2.0
cookies: 0.9.1
@ -8779,7 +8810,7 @@ snapshots:
dependencies:
esbuild: 0.21.5
postcss: 8.4.49
rollup: 4.29.1
rollup: 4.30.0
optionalDependencies:
'@types/node': 22.5.5
fsevents: 2.3.3
@ -8789,7 +8820,7 @@ snapshots:
dependencies:
esbuild: 0.24.2
postcss: 8.4.49
rollup: 4.29.1
rollup: 4.30.0
optionalDependencies:
'@types/node': 22.5.5
fsevents: 2.3.3
@ -8880,11 +8911,10 @@ snapshots:
'@vue/devtools-api': 6.6.4
vue: 3.5.13(typescript@5.6.3)
vue-tsc@2.1.10(typescript@5.6.3):
vue-tsc@2.2.0(typescript@5.6.3):
dependencies:
'@volar/typescript': 2.4.9
'@vue/language-core': 2.1.10(typescript@5.6.3)
semver: 7.6.3
'@volar/typescript': 2.4.11
'@vue/language-core': 2.2.0(typescript@5.6.3)
typescript: 5.6.3
vue3-next-qrcode@2.0.10(typescript@5.6.3):
@ -8910,7 +8940,7 @@ snapshots:
'@juggle/resize-observer': 3.4.0
css-render: 0.15.14
evtd: 0.2.4
seemly: 0.3.8
seemly: 0.3.9
vdirs: 0.1.8(vue@3.5.13(typescript@5.6.3))
vooks: 0.2.12(vue@3.5.13(typescript@5.6.3))
vue: 3.5.13(typescript@5.6.3)

View File

@ -7,6 +7,8 @@ import { rules, useCondition } from '@/app-components/app/AppLockScreen/shared'
import { useSettingActions } from '@/store'
import { useTemplateRef } from 'vue'
import { useForm } from '@/components'
import { APP_CATCH_KEY } from '@/app-config'
import { setStorage, encrypt } from '@/utils'
import type { InputInst } from 'naive-ui'
@ -27,6 +29,11 @@ const LockScreen = defineComponent({
validate().then(() => {
setLockAppScreen(true)
updateSettingState('lockScreenSwitch', false)
setStorage(
APP_CATCH_KEY.appLockScreenPasswordKey,
encrypt(state.lockCondition.lockPassword),
'localStorage',
)
state.lockCondition = useCondition()
})

View File

@ -10,6 +10,8 @@ import { rules, useCondition } from '@/app-components/app/AppLockScreen/shared'
import useAppLockScreen from '@/app-components/app/AppLockScreen/appLockVar'
import { useDevice } from '@/hooks'
import { useForm } from '@/components'
import { APP_CATCH_KEY } from '@/app-config'
import { removeStorage, decrypt, getStorage } from '@/utils'
export default defineComponent({
name: 'UnlockScreen',
@ -42,27 +44,56 @@ export default defineComponent({
state.DDD = dayjs().format(DDD_FORMAT)
}, 86_400_000)
const backToSigning = () => {
window.$dialog.warning({
title: '警告',
content: '是否返回到登陆页?',
positiveText: '确定',
negativeText: '取消',
onPositiveClick: () => {
const toSigningFn = () => {
removeStorage(APP_CATCH_KEY.appLockScreenPasswordKey, 'localStorage')
updateSettingState('lockScreenSwitch', false)
setTimeout(() => {
logout()
}, 100)
},
}
const backToSigning = () => {
window.$dialog.warning({
title: '警告',
content: '是否返回到登陆页并且重新登录',
positiveText: '确定',
negativeText: '重新登录',
onPositiveClick: toSigningFn,
})
}
const unlockScreen = () => {
const catchPassword = getStorage<string>(
APP_CATCH_KEY.appLockScreenPasswordKey,
'localStorage',
)
if (!catchPassword) {
window.$dialog.warning({
title: '警告',
content: () => '检测到锁屏密码被修改,请重新登录',
closable: false,
maskClosable: false,
closeOnEsc: false,
positiveText: '重新登录',
onPositiveClick: toSigningFn,
})
return
}
const dCatchPassword = decrypt(catchPassword)
validate().then(() => {
if (dCatchPassword === state.lockCondition.lockPassword) {
setLockAppScreen(false)
updateSettingState('lockScreenSwitch', false)
removeStorage(APP_CATCH_KEY.appLockScreenPasswordKey, 'localStorage')
state.lockCondition = useCondition()
} else {
window.$message.warning('密码错误,请重新输入')
}
})
}

View File

@ -53,7 +53,7 @@ export default defineComponent({
title="发现新版本"
content="当前版本已更新,点击确认加载新版本~"
zIndex={999999999}
dad
draggable
positiveText="确认"
negativeText="取消"
onPositiveClick={logout}

View File

@ -94,6 +94,7 @@ export const APP_CATCH_KEY_PREFIX = ''
* - appPiniaSigningStore: pinia signing store key
* - appVersionProvider: 版本信息缓存 key
* - appMenuTagOptions: 标签页菜单列表
* - appLockScreenPasswordKey: 锁屏密码缓存 key
*/
export const APP_CATCH_KEY = {
signing: 'signing',
@ -108,6 +109,7 @@ export const APP_CATCH_KEY = {
isAppLockScreen: 'isAppLockScreen',
appGlobalSearchOptions: 'appGlobalSearchOptions',
appMenuTagOptions: 'appMenuTagOptions',
appLockScreenPasswordKey: 'appLockScreenPasswordKey',
} as const
/**

View File

@ -1,10 +1,3 @@
/**
*
*
* , inject
*
*/
import axios from 'axios'
import { AXIOS_CONFIG } from '@/app-config'
import { useAxiosInterceptor } from '@/axios/utils/interceptor'
@ -17,23 +10,33 @@ import {
setupRequestErrorInterceptor,
} from '@/axios/axios-interceptor/request'
import type { AxiosInstanceExpand } from './types'
import type { AxiosInstanceExpand, RequestInterceptorConfig } from './types'
// 创建 axios 实例
const server: AxiosInstanceExpand = axios.create(AXIOS_CONFIG)
// 获取拦截器实例
const { createAxiosInstance, beforeFetch, fetchError } = useAxiosInterceptor()
// 请求拦截器
server.interceptors.request.use(
(request) => {
createAxiosInstance(request, 'requestInstance') // 生成 request instance
setupRequestInterceptor() // 初始化拦截器所有已注入方法
beforeFetch('requestInstance', 'implementRequestInterceptorArray', 'ok') // 执行拦截器所有已注入方法
// 生成 request instance
createAxiosInstance(
request as RequestInterceptorConfig<unknown>,
'requestInstance',
)
// 初始化拦截器所有已注入方法
setupRequestInterceptor()
// 执行拦截器所有已注入方法
beforeFetch('requestInstance', 'implementRequestInterceptorArray', 'ok')
return request
},
(error) => {
setupRequestErrorInterceptor() // 初始化拦截器所有已注入方法(错误状态)
fetchError('requestError', error, 'implementRequestInterceptorErrorArray') // 执行所有已注入方法
// 初始化拦截器所有已注入方法(错误状态)
setupRequestErrorInterceptor()
// 执行所有已注入方法
fetchError('requestError', error, 'implementRequestInterceptorErrorArray')
return Promise.reject(error)
},
@ -42,17 +45,22 @@ server.interceptors.request.use(
// 响应拦截器
server.interceptors.response.use(
(response) => {
createAxiosInstance(response, 'responseInstance') // 创建响应实例
setupResponseInterceptor() // 注入响应成功待执行队列
beforeFetch('responseInstance', 'implementResponseInterceptorArray', 'ok') // 执行响应成功拦截器
// 创建响应实例
createAxiosInstance(response, 'responseInstance')
// 注入响应成功待执行队列
setupResponseInterceptor()
// 执行响应成功拦截器
beforeFetch('responseInstance', 'implementResponseInterceptorArray', 'ok')
const { data } = response
return Promise.resolve(data)
},
(error) => {
setupResponseErrorInterceptor() // 注入响应失败待执行队列
fetchError('responseError', error, 'implementResponseInterceptorErrorArray') // 执行响应失败后拦截器
// 注入响应失败待执行队列
setupResponseErrorInterceptor()
// 执行响应失败后拦截器
fetchError('responseError', error, 'implementResponseInterceptorErrorArray')
return Promise.reject(error)
},

View File

@ -1,14 +1,3 @@
/**
*
* axios
*
*
*
*
* axios ,
* 使,
*/
import RequestCanceler from '@/axios/utils/RequestCanceler'
import { getAppEnvironment } from '@/utils'
@ -24,31 +13,36 @@ import type {
import type { AnyFC } from '@/types'
import type { AxiosError } from 'axios'
/** 当前请求的实例 */
// 当前请求的实例
const axiosFetchInstance: AxiosFetchInstance = {
requestInstance: null,
responseInstance: null,
}
/** 请求失败返回值 */
// 请求失败返回值
const axiosFetchError: AxiosFetchError<AxiosError<unknown, unknown>> = {
requestError: null,
responseError: null,
}
/** 请求队列(区分 resolve 与 reject 状态) */
// 请求队列(区分 resolve 与 reject 状态)
const implement: ImplementQueue = {
implementRequestInterceptorArray: [],
implementResponseInterceptorArray: [],
}
// 请求失败队列
const errorImplement: ErrorImplementQueue = {
implementRequestInterceptorErrorArray: [],
implementResponseInterceptorErrorArray: [],
}
/** 取消器实例 */
type ImplementKeys = keyof ImplementQueue
type ErrorImplementKeys = keyof ErrorImplementQueue
// 取消器实例
export const axiosCanceler = new RequestCanceler()
export const useAxiosInterceptor = () => {
/** 创建拦截器实例 */
// 创建拦截器实例
const createAxiosInstance = (
instance: RequestInterceptorConfig | ResponseInterceptorConfig,
instanceKey: keyof AxiosFetchInstance,
@ -60,33 +54,33 @@ export const useAxiosInterceptor = () => {
instance as ResponseInterceptorConfig)
}
/** 获取当前实例 */
// 获取当前实例
const getAxiosInstance = (instanceKey: keyof AxiosFetchInstance) => {
return axiosFetchInstance[instanceKey]
}
/** 设置注入方法队列 */
// 设置注入方法队列
const setImplement = (
key: keyof ImplementQueue | keyof ErrorImplementQueue,
key: ImplementKeys | ErrorImplementKeys,
func: AnyFC[],
fetchType: FetchType,
) => {
fetchType === 'ok'
? (implement[key as keyof ImplementQueue] = func)
: (errorImplement[key as keyof ErrorImplementQueue] = func)
? (implement[key as ImplementKeys] = func)
: (errorImplement[key as ErrorImplementKeys] = func)
}
/** 获取队列中所有的所有拦截器方法 */
// 获取队列中所有的所有拦截器方法
const getImplement = (
key: keyof ImplementQueue | keyof ErrorImplementQueue,
key: ImplementKeys | ErrorImplementKeys,
fetchType: FetchType,
): AnyFC[] => {
return fetchType === 'ok'
? implement[key as keyof ImplementQueue]
: errorImplement[key as keyof ErrorImplementQueue]
? implement[key as ImplementKeys]
: errorImplement[key as ErrorImplementKeys]
}
/** 队列执行器 */
// 队列执行器
const implementer = (funcs: AnyFC[], ...args: any[]) => {
if (Array.isArray(funcs)) {
funcs.forEach((curr) => {
@ -97,16 +91,16 @@ export const useAxiosInterceptor = () => {
}
}
/** 请求、响应前执行拦截器队列中的所有方法 */
// 请求、响应前执行拦截器队列中的所有方法
const beforeFetch = (
key: keyof AxiosFetchInstance,
implementKey: keyof ImplementQueue | keyof ErrorImplementQueue,
implementKey: ImplementKeys | ErrorImplementKeys,
fetchType: FetchType,
) => {
const funcArr =
fetchType === 'ok'
? implement[implementKey as keyof ImplementQueue]
: errorImplement[implementKey as keyof ErrorImplementQueue]
? implement[implementKey as ImplementKeys]
: errorImplement[implementKey as ErrorImplementKeys]
const instance = getAxiosInstance(key)
const { MODE } = getAppEnvironment()
@ -115,11 +109,11 @@ export const useAxiosInterceptor = () => {
}
}
/** 请求、响应错误时执行队列中所有方法 */
// 请求、响应错误时执行队列中所有方法
const fetchError = (
key: keyof AxiosFetchError,
error: AxiosError<unknown, unknown>,
errorImplementKey: keyof ErrorImplementQueue,
errorImplementKey: ErrorImplementKeys,
) => {
axiosFetchError[key] = error

View File

@ -167,12 +167,6 @@ export default defineComponent({
restrictionElement = unrefElement<HTMLElement>(re as any) as HTMLElement
}
if (!restrictionElement) {
throw new Error(
'[RDraggableCard]: if set restrictionElement, it must be a HTMLElement or a ref of HTMLElement.',
)
}
return {
card,
restrictionElement,

View File

@ -4,14 +4,12 @@ import { NModal } from 'naive-ui'
import props from './props'
import { completeSize, uuid } from '@/utils'
import { setupInteract } from './utils'
import {
FULLSCREEN_CARD_TYPE_CLASS,
R_MODAL_CLASS,
CSS_VARS_KEYS,
} from './constant'
import type interact from 'interactjs'
import type { ModalProps } from 'naive-ui'
export default defineComponent({
@ -24,57 +22,11 @@ export default defineComponent({
[CSS_VARS_KEYS['dialogWidth']]: completeSize(props.dialogWidth ?? 446),
}))
const uuidEl = uuid()
let intractable: null | ReturnType<typeof interact>
// 记录拖拽的位置
const position = {
x: 0,
y: 0,
}
// 当前是否为预设 card 类型并且设置了 fullscreen
const isFullscreenCardType = computed(
() => props.preset === 'card' && props.fullscreen,
)
watch(
() => props.show,
(ndata) => {
if (
ndata &&
props.dad &&
(props.preset === 'card' || props.preset === 'dialog')
) {
nextTick(() => {
const target = document.getElementById(uuidEl)
if (target) {
setupInteract(target, {
preset: props.preset,
x: position.x,
y: position.y,
dargCallback: (x, y) => {
position.x = x
position.y = y
},
}).then((res) => {
intractable = res
})
}
if (props.memo && target) {
target.style.transform = `translate(${position.x}px, ${position.y}px)`
}
})
} else {
intractable?.unset()
intractable = null
}
},
{
immediate: true,
},
)
return {
cssVars,
isFullscreenCardType,

View File

@ -1,5 +1,4 @@
import { useModal as useNaiveModal, NScrollbar } from 'naive-ui'
import { setupInteract } from '../utils'
import { queryElements, setStyle, completeSize, setClass } from '@/utils'
import { R_MODAL_CLASS, CSS_VARS_KEYS } from '../constant'
@ -21,10 +20,10 @@ const useModal = () => {
color: 'rgba(0, 0, 0, 0)',
colorHover: 'rgba(0, 0, 0, 0)',
},
trigger: 'none',
trigger: 'hover',
style: {
width: 'auto',
height:
maxHeight:
'calc(var(--html-height) - 29px - var(--n-padding-bottom) - var(--n-padding-bottom) - var(--n-padding-top))',
},
},
@ -35,7 +34,7 @@ const useModal = () => {
)
}
const { preset, dad, fullscreen, width, cardWidth, dialogWidth } = options
const { preset, fullscreen, width, cardWidth, dialogWidth } = options
const modalReactive = naiveCreate({
...rest,
content: contentNode,
@ -55,15 +54,6 @@ const useModal = () => {
return
}
// 是否启用拖拽
if (dad) {
setupInteract(modalElement, {
preset,
x: 0,
y: 0,
})
}
// preset 为 cardfullscreen 为 true 时,最大化 modal
if (fullscreen && preset === 'card') {
setStyle(modalElement, {

View File

@ -4,6 +4,11 @@
// 当设置全屏时启用滚动
& .n-card__content {
overflow: scroll;
max-height: calc(
var(--html-height) - var(--n-padding-bottom) - var(--n-padding-bottom) - var(
--n-padding-top
)
);
}
}

View File

@ -3,17 +3,6 @@ import type { PropType } from 'vue'
const props = {
...modalProps,
/**
*
* @description
*
*
* @default true
*/
memo: {
type: Boolean,
default: true,
},
/**
*
* @description
@ -58,18 +47,6 @@ const props = {
type: [String, Number] as PropType<string | number>,
default: 446,
},
/**
*
* @description
*
* header
*
* @default false
*/
dad: {
type: Boolean,
default: false,
},
}
export default props

View File

@ -1,14 +1,6 @@
import type { ModalOptions as NaiveModalOptions } from 'naive-ui'
export interface RModalProps extends NaiveModalOptions {
/**
*
* @description
*
*
* @default true
*/
memo?: boolean
/**
*
* @description
@ -41,13 +33,4 @@ export interface RModalProps extends NaiveModalOptions {
* @default 446
*/
dialogWidth?: number | string
/**
*
* @description
*
* header
*
* @default false
*/
dad?: boolean
}

View File

@ -1,101 +0,0 @@
import interact from 'interactjs'
import type { ModalProps } from 'naive-ui'
import type { RModalProps } from './types'
interface SetupDraggableOptions {
scheduler?: (event: Interact.DragEvent) => void
}
interface SetupInteractOptions {
preset: ModalProps['preset']
memo?: RModalProps['memo']
x: number
y: number
dargCallback?: (x: number, y: number, event: Interact.DragEvent) => void
}
/**
*
* @param bindModal modal
* @param preset
*
* @description
*
* card, dialog
*
* 30ms
*/
export const setupDraggable = (
bindModal: HTMLElement,
preset: ModalProps['preset'],
options?: SetupDraggableOptions,
): Promise<ReturnType<typeof interact>> => {
const { scheduler } = options ?? {}
return new Promise((resolve) => {
setTimeout(() => {
const allowFromStr =
preset === 'card' ? '.n-card-header__main' : '.n-dialog__title'
if (bindModal) {
const dad = interact(bindModal)
.draggable({
inertia: true,
autoScroll: true,
allowFrom: allowFromStr,
modifiers: [
interact.modifiers.restrictRect({
restriction: 'parent',
endOnly: true,
}),
],
listeners: {
move: (event) => {
scheduler?.(event)
},
},
})
.resizable(false)
resolve(dad)
}
}, 30)
})
}
export const setupInteract = (
target: HTMLElement | string,
options: SetupInteractOptions,
): Promise<ReturnType<typeof interact>> => {
const _target =
typeof target === 'string'
? (document.querySelector(target) as HTMLElement)
: target
return new Promise((resolve, reject) => {
if (_target) {
_target.setAttribute('can-drag', 'true')
const { preset, dargCallback } = options
let { x, y } = options
setupDraggable(_target, preset, {
scheduler: (event) => {
const target = event.target
x += event.dx
y += event.dy
target.style.transform = `translate(${x}px, ${y}px)`
dargCallback?.(x, y, event)
},
}).then((res) => {
resolve(res)
})
} else {
reject()
}
})
}

View File

@ -94,7 +94,6 @@ export default defineComponent({
return (
<NTabs
{...($props as TabsProps)}
ref="segmentRef"
style={[cssVars]}
class="r-segment"
type="segment"

View File

@ -84,7 +84,14 @@ export default defineComponent({
let searchElementIndex = 0
// 缓存索引
let preSearchElementIndex = searchElementIndex
const { isTabletOrSmaller } = useDevice()
const { isTabletOrSmaller } = useDevice({
observer: (val) => {
// 当处于小尺寸状态时,自动关闭搜索框
if (val) {
modelShow.value = false
}
},
})
const loading = ref(false)
// 激活样式 class name
const ACTIVE_CLASS = 'content-item--active'
@ -309,22 +316,7 @@ export default defineComponent({
</NFlex>
)
watchEffect(() => {
// 当处于小尺寸状态时,自动关闭搜索框
if (isTabletOrSmaller.value) {
modelShow.value = false
}
})
useEventListener(
window,
'keydown',
(e: KeyboardEvent) => {
registerArouseKeyboard(e)
registerChangeSearchElementIndex(e)
},
true,
)
useEventListener(window, 'keydown', registerArouseKeyboard)
return {
...toRefs(state),
@ -336,11 +328,16 @@ export default defineComponent({
isTabletOrSmaller,
SearchItem,
loading,
registerChangeSearchElementIndex,
}
},
render() {
const { isTabletOrSmaller, searchOptions, loading } = this
const { SearchItem, fuzzySearchMenuOptions } = this
const {
SearchItem,
fuzzySearchMenuOptions,
registerChangeSearchElementIndex,
} = this
return isTabletOrSmaller ? (
<div style="display: none;"></div>
@ -350,7 +347,11 @@ export default defineComponent({
transformOrigin="center"
displayDirective="if"
>
<div class="global-search global-search--dark global-search--light">
<div
class="global-search global-search--dark global-search--light"
tabindex="-1"
onKeydown={registerChangeSearchElementIndex}
>
<div class="global-search__wrapper">
<NCard
class="global-search__card"

View File

@ -37,21 +37,28 @@ import type { VNode } from 'vue'
export default defineComponent({
name: 'AppSiderBar',
setup() {
// 获取 setting 相关值
const { updateLocale, updateSettingState } = useSettingActions()
const { t } = useI18n()
// 获取全屏相关方法
const [isFullscreen, { toggleFullscreen, isEnabled }] = useFullscreen(
document.getElementsByTagName('html')[0],
)
// 获取设置相关方法
const { getDrawerPlacement, getBreadcrumbSwitch } = useSettingGetters()
const showSettings = ref(false) // 是否显示设置抽屉
const globalSearchShown = ref(false) // 是否展示全局搜索
// 是否显示设置抽屉
const showSettings = ref(false)
// 是否展示全局搜索
const globalSearchShown = ref(false)
// 当前是否为平板或者更小的设备
const { isTabletOrSmaller } = useDevice()
// 获取全局 drawer 的值
const globalDrawerValue = getVariableToRefs('globalDrawerValue')
/**
*
*
* @description
*
*/
const leftIconOptions = computed(() =>
createLeftIconOptions({
@ -61,7 +68,8 @@ export default defineComponent({
)
/**
*
*
* @description
*
*/
const rightTooltipIconOptions = computed(() =>
createRightIconOptions({

View File

@ -16,10 +16,6 @@ export const orderRoutes = (routes: AppRouteRecordRaw[]) => {
const currOrder = curr.meta?.order ?? 1
const nextOrder = next.meta?.order ?? 0
if (typeof currOrder !== 'number' || typeof nextOrder !== 'number') {
throw new TypeError('orderRoutes error: order must be a number!')
}
if (currOrder === nextOrder) {
// 如果两个路由的 order 值相同,则按照路由名进行排序
return curr.name

6
src/utils/c/constant.ts Normal file
View File

@ -0,0 +1,6 @@
/**
*
* @description
* key
*/
export const CRYPTO_KEY = '4cP+dX5FI2EVYzln'

32
src/utils/c/decrypt.ts Normal file
View File

@ -0,0 +1,32 @@
import { AES, enc } from 'crypto-js'
import { CRYPTO_KEY } from './constant'
import type { CipherParams, WordArray } from './types'
/**
*
* @param data AES
* @param key key
*
* @description
* 使 AES
*
* @example
* const data = 'U2FsdGVkX1+3Q
* const key = CRYPTO_KEY
*
* const decrypted = decrypt(data, key) // { name: 'John Doe' }
*/
export const decrypt = (
data: string | CipherParams,
key?: string | WordArray,
) => {
try {
const decrypted = AES.decrypt(data, key || CRYPTO_KEY)
const decryptedData = decrypted.toString(enc.Utf8)
return JSON.parse(decryptedData)
} catch (e) {
console.error(`Unknown error: ${e}`)
}
}

24
src/utils/c/encrypt.ts Normal file
View File

@ -0,0 +1,24 @@
import { AES } from 'crypto-js'
import { CRYPTO_KEY } from './constant'
import type { WordArray } from './types'
/**
*
* @param data
* @param key key
*
* @description
* 使 AES
*
* @example
* const data = { name: 'John Doe' }
* const key = CRYPTO_KEY
*
* const encrypted = encrypt(data, key) // 'U2FsdGVkX1+3Q'
*/
export const encrypt = (data: unknown, key?: string | WordArray) => {
const encrypted = AES.encrypt(JSON.stringify(data), key || CRYPTO_KEY)
return encrypted.toString()
}

5
src/utils/c/index.ts Normal file
View File

@ -0,0 +1,5 @@
import { CRYPTO_KEY } from './constant'
import { decrypt } from './decrypt'
import { encrypt } from './encrypt'
export { CRYPTO_KEY, decrypt, encrypt }

4
src/utils/c/types.ts Normal file
View File

@ -0,0 +1,4 @@
import type CryptoJS from 'crypto-js'
export type WordArray = CryptoJS.lib.WordArray
export type CipherParams = CryptoJS.lib.CipherParams

View File

@ -7,6 +7,7 @@ export * from './element'
export * from './precision'
export * from './vue'
export * from './app'
export * from './c'
export { positionSelectedMenuItem }
export { updateObjectValue } from './update-object-value'
export { removeDuplicateKeys } from './remove-duplicate-keys'

View File

@ -16,7 +16,7 @@ export default defineComponent({
const createCardModal = () => {
create({
title: '卡片模态框',
dad: true,
draggable: true,
preset: 'card',
content: () => (
<div style="height: 3000px;">card模态框</div>
@ -30,7 +30,7 @@ export default defineComponent({
title: '模态框',
content: '内容',
preset: 'dialog',
dad: true,
draggable: true,
})
}
@ -47,12 +47,7 @@ export default defineComponent({
<NFlex vertical>
<NCard title="props">
<NFlex vertical>
<h3>
memoryPosition: 是否记住上一次被拖拽的位置
true
</h3>
<h3>fullscreen: 全屏模态框</h3>
<h3>dad: 启用拖拽 false </h3>
</NFlex>
</NCard>
<RModal
@ -67,7 +62,7 @@ export default defineComponent({
v-model:show={this.modal2}
preset="card"
title="可拖拽卡片模态框"
dad
draggable
>
<p></p>
</RModal>
@ -75,7 +70,7 @@ export default defineComponent({
v-model:show={this.modal3}
preset="dialog"
title="可拖拽卡片模态框"
dad
draggable
>
<p></p>
</RModal>