更新依赖

This commit is contained in:
Hooray
2026-03-07 11:59:50 +08:00
parent 7c17dd6e5a
commit fed4dbcbde
18 changed files with 2728 additions and 2446 deletions
+1
View File
@@ -10,6 +10,7 @@ export default antfu(
},
{
rules: {
'e18e/prefer-static-regex': 'off',
'eslint-comments/no-unlimited-disable': 'off',
'curly': ['error', 'all'],
'ts/no-unused-expressions': ['error', {
+57 -56
View File
@@ -1,6 +1,6 @@
{
"type": "module",
"packageManager": "pnpm@10.26.2",
"packageManager": "pnpm@10.30.3",
"engines": {
"node": "^20.19.0 || >=22.12.0"
},
@@ -25,28 +25,28 @@
"@bytemd/vue-next": "^1.22.0",
"@tinymce/tinymce-vue": "^6.3.0",
"@vee-validate/zod": "^4.15.1",
"@visactor/vchart": "^2.0.12",
"@visactor/vchart": "^2.0.19",
"@vue-office/docx": "^1.6.3",
"@vue-office/excel": "^1.7.14",
"@vueuse/components": "^14.1.0",
"@vueuse/core": "^14.1.0",
"@vueuse/integrations": "^14.1.0",
"@vueuse/components": "^14.2.1",
"@vueuse/core": "^14.2.1",
"@vueuse/integrations": "^14.2.1",
"animate.css": "^4.1.1",
"axios": "^1.13.2",
"axios": "^1.13.6",
"bytemd": "^1.22.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"cropperjs": "^1.6.2",
"cropperjs": "1.6.2",
"dayjs": "^1.11.19",
"defu": "^6.1.4",
"disable-devtool": "^0.3.9",
"echarts": "^6.0.0",
"element-plus": "^2.13.0",
"element-plus": "^2.13.4",
"eruda": "^3.4.3",
"es-toolkit": "^1.43.0",
"es-toolkit": "^1.45.1",
"filesize": "^11.0.13",
"hotkeys-js": "^4.0.0",
"lucide-vue-next": "^0.562.0",
"hotkeys-js": "^4.0.2",
"lucide-vue-next": "^0.577.0",
"mitt": "^3.0.1",
"nprogress": "^0.2.0",
"path-browserify": "^1.0.1",
@@ -54,84 +54,85 @@
"pinia": "^3.0.4",
"print-js": "^1.6.0",
"qrcode": "^1.5.4",
"qs": "^6.14.0",
"reka-ui": "^2.7.0",
"qs": "^6.15.0",
"reka-ui": "^2.9.0",
"scule": "^1.3.0",
"splitpanes": "^4.0.4",
"swiper": "^12.0.3",
"tailwind-merge": "^3.4.0",
"tinymce": "^7.9.1",
"ua-parser-js": "^2.0.7",
"swiper": "^12.1.2",
"tailwind-merge": "^3.5.0",
"tinymce": "7.9.2",
"ua-parser-js": "^2.0.9",
"vconsole": "^3.15.1",
"vee-validate": "^4.15.1",
"vue": "^3.5.26",
"vue": "^3.5.29",
"vue-currency-input": "^3.2.2",
"vue-data-ui": "^3.9.19",
"vue-data-ui": "^3.15.10",
"vue-esign": "^1.1.4",
"vue-hooks-plus": "^2.4.1",
"vue-router": "^4.6.4",
"vue-hooks-plus": "^2.4.3",
"vue-router": "^5.0.3",
"vue-sonner": "^2.0.9",
"vxe-table": "^4.17.35",
"xe-utils": "^3.8.2",
"zod": "^4.2.1"
"vxe-table": "^4.17.49",
"xe-utils": "^4.0.1",
"zod": "^4.3.6"
},
"devDependencies": {
"@antfu/eslint-config": "^6.7.3",
"@clack/prompts": "^0.11.0",
"@faker-js/faker": "^10.1.0",
"@iconify/json": "^2.2.417",
"@antfu/eslint-config": "^7.7.0",
"@clack/prompts": "^1.1.0",
"@faker-js/faker": "^10.3.0",
"@iconify/json": "^2.2.447",
"@iconify/vue": "^5.0.0",
"@stylistic/stylelint-config": "^3.0.1",
"@stylistic/stylelint-config": "^4.0.0",
"@types/nprogress": "^0.2.3",
"@types/path-browserify": "^1.0.3",
"@types/qrcode": "^1.5.6",
"@types/qs": "^6.14.0",
"@types/qs": "^6.15.0",
"@types/splitpanes": "^2.2.6",
"@unocss/eslint-plugin": "^66.5.11",
"@unocss/preset-legacy-compat": "^66.5.11",
"@unocss/eslint-plugin": "^66.6.6",
"@unocss/preset-legacy-compat": "^66.6.6",
"@unocss/reset": "^66.6.6",
"@vitejs/plugin-legacy": "^7.2.1",
"@vitejs/plugin-vue": "^6.0.3",
"@vitejs/plugin-vue-jsx": "^5.1.3",
"@vue/tsconfig": "^0.8.1",
"autoprefixer": "^10.4.23",
"@vitejs/plugin-vue": "^6.0.4",
"@vitejs/plugin-vue-jsx": "^5.1.4",
"@vue/tsconfig": "^0.9.0",
"autoprefixer": "^10.4.27",
"boxen": "^8.0.1",
"eslint": "^9.39.2",
"fs-extra": "^11.3.3",
"eslint": "^9.39.4",
"fs-extra": "^11.3.4",
"http-server": "^14.1.1",
"lint-staged": "^16.2.7",
"lint-staged": "^16.3.2",
"npm-run-all2": "^8.0.4",
"picocolors": "^1.1.1",
"plop": "^4.0.4",
"postcss": "^8.5.6",
"plop": "^4.0.5",
"postcss": "^8.5.8",
"postcss-nested": "^7.0.2",
"sass-embedded": "^1.97.1",
"sass-embedded": "^1.97.3",
"simple-git-hooks": "^2.13.1",
"stylelint": "^16.26.1",
"stylelint-config-recess-order": "^7.4.0",
"stylelint-config-standard-scss": "^16.0.0",
"stylelint": "^17.4.0",
"stylelint-config-recess-order": "^7.6.1",
"stylelint-config-standard-scss": "^17.0.0",
"stylelint-config-standard-vue": "^1.0.0",
"stylelint-scss": "^6.13.0",
"svgo": "^4.0.0",
"taze": "^19.9.2",
"stylelint-scss": "^7.0.0",
"svgo": "^4.0.1",
"taze": "^19.10.0",
"tsx": "^4.21.0",
"typescript": "^5.9.3",
"unocss": "^66.5.11",
"unocss": "^66.6.6",
"unocss-preset-animations": "^1.3.0",
"unplugin-auto-import": "^20.3.0",
"unplugin-auto-import": "^21.0.0",
"unplugin-turbo-console": "^2.3.0",
"unplugin-vue-components": "^30.0.0",
"vite": "^7.3.0",
"unplugin-vue-components": "^31.0.0",
"vite": "^7.3.1",
"vite-plugin-app-loading": "^0.4.0",
"vite-plugin-archiver": "^0.2.0",
"vite-plugin-banner": "^0.8.1",
"vite-plugin-compression2": "^2.4.0",
"vite-plugin-compression2": "^2.5.0",
"vite-plugin-env-parse": "^1.0.15",
"vite-plugin-fake-server": "^2.2.2",
"vite-plugin-pages": "^0.33.2",
"vite-plugin-pages": "^0.33.3",
"vite-plugin-svg-icons": "^2.0.1",
"vite-plugin-vue-devtools": "^8.0.5",
"vite-plugin-vue-devtools": "^8.0.7",
"vite-plugin-vue-meta-layouts": "^0.6.1",
"vue-tsc": "^3.2.1"
"vue-tsc": "^3.2.5"
},
"simple-git-hooks": {
"pre-commit": "pnpm lint-staged",
+2625 -2353
View File
File diff suppressed because it is too large Load Diff
@@ -55,7 +55,7 @@ const onSubmit = form.handleSubmit((values) => {
<FormField v-slot="{ componentField, errors }" name="password">
<FormItem class="relative pb-6 space-y-0">
<FormControl>
<FaInput type="password" placeholder="请输入原密码" class="w-full" :class="errors.length && 'border-destructive'" v-bind="componentField" />
<FaInput type="password" placeholder="请输入原密码" class="w-full" :class="errors.length > 0 && 'border-destructive'" v-bind="componentField" />
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="absolute bottom-1 text-xs" />
@@ -65,7 +65,7 @@ const onSubmit = form.handleSubmit((values) => {
<FormField v-slot="{ componentField, errors }" name="newPassword">
<FormItem class="relative pb-6 space-y-0">
<FormControl>
<FaInput type="password" placeholder="请输入新密码" class="w-full" :class="errors.length && 'border-destructive'" v-bind="componentField" />
<FaInput type="password" placeholder="请输入新密码" class="w-full" :class="errors.length > 0 && 'border-destructive'" v-bind="componentField" />
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="absolute bottom-1 text-xs" />
@@ -75,7 +75,7 @@ const onSubmit = form.handleSubmit((values) => {
<FormField v-slot="{ componentField, errors }" name="checkPassword">
<FormItem class="relative pb-6 space-y-0">
<FormControl>
<FaInput type="password" placeholder="请确认新密码" class="w-full" :class="errors.length && 'border-destructive'" v-bind="componentField" />
<FaInput type="password" placeholder="请确认新密码" class="w-full" :class="errors.length > 0 && 'border-destructive'" v-bind="componentField" />
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="absolute bottom-1 text-xs" />
+2 -2
View File
@@ -83,7 +83,7 @@ function testAccount(account: string) {
<FormField v-slot="{ componentField, errors }" name="account">
<FormItem class="relative pb-6 space-y-0">
<FormControl>
<FaInput type="text" placeholder="请输入用户名" class="w-full" :class="errors.length && 'border-destructive'" v-bind="componentField" />
<FaInput type="text" placeholder="请输入用户名" class="w-full" :class="errors.length > 0 && 'border-destructive'" v-bind="componentField" />
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="absolute bottom-1 text-xs" />
@@ -93,7 +93,7 @@ function testAccount(account: string) {
<FormField v-slot="{ componentField, errors }" name="password">
<FormItem class="relative pb-6 space-y-0">
<FormControl>
<FaInput type="password" placeholder="请输入密码" class="w-full" :class="errors.length && 'border-destructive'" v-bind="componentField" />
<FaInput type="password" placeholder="请输入密码" class="w-full" :class="errors.length > 0 && 'border-destructive'" v-bind="componentField" />
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="absolute bottom-1 text-xs" />
+3 -3
View File
@@ -56,7 +56,7 @@ const onSubmit = form.handleSubmit((values) => {
<FormField v-slot="{ componentField, errors }" name="account">
<FormItem class="relative pb-6 space-y-0">
<FormControl>
<FaInput type="text" placeholder="请输入用户名" class="w-full" :class="errors.length && 'border-destructive'" v-bind="componentField" />
<FaInput type="text" placeholder="请输入用户名" class="w-full" :class="errors.length > 0 && 'border-destructive'" v-bind="componentField" />
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="absolute bottom-1 text-xs" />
@@ -66,7 +66,7 @@ const onSubmit = form.handleSubmit((values) => {
<FormField v-slot="{ componentField, value, errors }" name="password">
<FormItem class="relative pb-6 space-y-0">
<FormControl>
<FaInput type="password" placeholder="请输入密码" class="w-full" :class="errors.length && 'border-destructive'" v-bind="componentField" />
<FaInput type="password" placeholder="请输入密码" class="w-full" :class="errors.length > 0 && 'border-destructive'" v-bind="componentField" />
</FormControl>
<FormDescription>
<FaPasswordStrength :password="value" class="mt-2" />
@@ -79,7 +79,7 @@ const onSubmit = form.handleSubmit((values) => {
<FormField v-slot="{ componentField, errors }" name="checkPassword">
<FormItem class="relative pb-6 space-y-0">
<FormControl>
<FaInput type="password" placeholder="请再次输入密码" class="w-full" :class="errors.length && 'border-destructive'" v-bind="componentField" />
<FaInput type="password" placeholder="请再次输入密码" class="w-full" :class="errors.length > 0 && 'border-destructive'" v-bind="componentField" />
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="absolute bottom-1 text-xs" />
@@ -63,7 +63,7 @@ function handleSendCaptcha() {
<FormField v-slot="{ componentField, errors }" name="account">
<FormItem class="relative pb-6 space-y-0">
<FormControl>
<FaInput type="text" placeholder="请输入用户名" class="w-full" :class="errors.length && 'border-destructive'" v-bind="componentField" />
<FaInput type="text" placeholder="请输入用户名" class="w-full" :class="errors.length > 0 && 'border-destructive'" v-bind="componentField" />
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="absolute bottom-1 text-xs" />
@@ -88,7 +88,7 @@ function handleSendCaptcha() {
<FormField v-slot="{ componentField, errors }" name="newPassword">
<FormItem class="relative pb-6 space-y-0">
<FormControl>
<FaInput type="password" placeholder="请输入新密码" class="w-full" :class="errors.length && 'border-destructive'" v-bind="componentField" />
<FaInput type="password" placeholder="请输入新密码" class="w-full" :class="errors.length > 0 && 'border-destructive'" v-bind="componentField" />
</FormControl>
<Transition enter-active-class="transition-opacity" enter-from-class="opacity-0" leave-active-class="transition-opacity" leave-to-class="opacity-0">
<FormMessage class="absolute bottom-1 text-xs" />
@@ -173,7 +173,12 @@ onMounted(() => {
}
// 切换到最后一个标签页
case 'alt+0':
router.push(tabbarStore.list[tabbarStore.list.length - 1].fullPath)
{
const last = tabbarStore.list.at(-1)
if (last) {
router.push(last.fullPath)
}
}
break
}
}
@@ -33,7 +33,7 @@ function toggleColorScheme(event: MouseEvent) {
]
document.documentElement.animate(
{
clipPath: settingsStore.currentColorScheme === 'light' ? clipPath : [...clipPath].reverse(),
clipPath: settingsStore.currentColorScheme === 'light' ? clipPath : clipPath.toReversed(),
},
{
duration: 500,
+1 -1
View File
@@ -94,7 +94,7 @@ export function useFaDrawer() {
}
// 监听 visible 和 options 变化,自动重新渲染
watch([visible, options], () => {
watch([visible, options as object], () => {
updateVNode()
}, {
immediate: true,
+1 -1
View File
@@ -80,7 +80,7 @@ function onSelectFile(files: FileList | File[] | null) {
if (!files) {
return
}
const selectedFiles = Array.from(files)
const selectedFiles = [...files]
// 数量限制
const remain = props.max > 0 ? props.max - fileList.value.length : selectedFiles.length
const filesToAdd: File[] = []
+1 -1
View File
@@ -54,7 +54,7 @@ function onSelectFile(e: Event) {
if (!input.files) {
return
}
const selectedFiles = Array.from(input.files)
const selectedFiles = [...input.files]
const remain = props.max === 0 ? selectedFiles.length : props.max - images.value.length
const filesToAdd: File[] = []
for (const file of selectedFiles.slice(0, remain)) {
+1 -1
View File
@@ -102,7 +102,7 @@ export function useFaModal() {
}
// 监听 visible 和 options 变化,自动重新渲染
watch([visible, options], () => {
watch([visible, options as object], () => {
updateVNode()
}, {
immediate: true,
@@ -80,11 +80,11 @@ const state = ref<State>({
function dispatch(action: Action) {
switch (action.type) {
case actionTypes.ADD_TOAST:
state.value.toasts = [action.toast, ...state.value.toasts].slice(0, TOAST_LIMIT)
state.value.toasts = [action.toast as any, ...state.value.toasts as any].slice(0, TOAST_LIMIT)
break
case actionTypes.UPDATE_TOAST:
state.value.toasts = state.value.toasts.map(t =>
state.value.toasts = state.value.toasts.map((t: any) =>
t.id === action.toast.id ? { ...t, ...action.toast } : t,
)
break
@@ -101,7 +101,7 @@ function dispatch(action: Action) {
})
}
state.value.toasts = state.value.toasts.map(t =>
state.value.toasts = state.value.toasts.map((t: any) =>
t.id === toastId || toastId === undefined
? {
...t,
@@ -116,7 +116,7 @@ function dispatch(action: Action) {
if (action.toastId === undefined) {
state.value.toasts = []
}
else { state.value.toasts = state.value.toasts.filter(t => t.id !== action.toastId) }
else { state.value.toasts = state.value.toasts.filter((t: any) => t.id !== action.toastId) }
break
}
+1 -1
View File
@@ -30,7 +30,7 @@ if (isSupprotColorMix) {
</script>
<template>
<ElConfigProvider :locale="zhCN" :button="{ autoInsertSpace: true }">
<ElConfigProvider :locale="zhCN as any" :button="{ autoInsertSpace: true }">
<slot />
</ElConfigProvider>
</template>
+1 -1
View File
@@ -41,7 +41,7 @@ function open(url: string) {
<template #description>
<p>
安装命令:
<Command text="pnpm add cropperjs" />
<Command text="pnpm add cropperjs@1.6.2" />
</p>
</template>
<FaButton variant="outline" @click="open('https://github.com/fengyuanchen/cropperjs')">
+1 -1
View File
@@ -72,7 +72,7 @@ function open(url: string) {
<div class="space-y-2">
<p>
安装命令:
<Command text="pnpm add tinymce @tinymce/tinymce-vue" />
<Command text="pnpm add tinymce@7.9.2 @tinymce/tinymce-vue" />
</p>
<p>
安装成功后,在框架 /public 目录下创建 tinymce 文件夹,并将 /node_modules/tinymce 目录下的 skins 文件夹复制到 /public/tinymce 目录下;然后在到 TinyMCE 官网
+17 -14
View File
@@ -131,16 +131,18 @@ export default function createVitePlugins(mode: string, isBuild = false) {
transform: (code, id) => {
if (/src\/main.ts$/.test(id)) {
if (viteEnv.VITE_APP_DEBUG_TOOL === 'eruda') {
code = code.concat(`
import eruda from 'eruda'
eruda.init()
`)
code = `
${code}
import eruda from 'eruda'
eruda.init()
`
}
else if (viteEnv.VITE_APP_DEBUG_TOOL === 'vconsole') {
code = code.concat(`
import VConsole from 'vconsole'
new VConsole()
`)
code = `
${code}
import VConsole from 'vconsole'
new VConsole()
`
}
return {
code,
@@ -157,12 +159,13 @@ export default function createVitePlugins(mode: string, isBuild = false) {
if (/src\/main.ts$/.test(id)) {
if (viteEnv.VITE_APP_DISABLE_DEVTOOL) {
// ?ddtk=example
code = code.concat(`
import DisableDevtool from 'disable-devtool'
DisableDevtool({
md5: '1a79a4d60de6718e8e5b326e338ae533',
})
`)
code = `
${code}
import DisableDevtool from 'disable-devtool'
DisableDevtool({
md5: '1a79a4d60de6718e8e5b326e338ae533',
})
`
}
return {
code,