This commit is contained in:
zyronon
2024-06-05 23:50:16 +08:00
parent 9b5c007514
commit 682b692070
20 changed files with 313 additions and 476 deletions

View File

@@ -20,6 +20,7 @@
"axios": "^1.5.0",
"compromise": "^14.10.0",
"copy-to-clipboard": "^3.3.3",
"dayjs": "^1.11.11",
"element-plus": "^2.3.9",
"file-saver": "^2.0.5",
"git-last-commit": "^1.0.1",
@@ -70,6 +71,5 @@
"commitizen": {
"path": "./node_modules/cz-conventional-changelog"
}
},
"packageManager": "pnpm@9.1.4+sha512.9df9cf27c91715646c7d675d1c9c8e41f6fce88246f1318c1aa6a1ed1aeb3c4f032fcdf4ba63cc69c4fe6d634279176b5358727d8f2cc1e65b65f43ce2f8bfb0"
}
}

341
pnpm-lock.yaml generated
View File

@@ -23,9 +23,12 @@ importers:
copy-to-clipboard:
specifier: ^3.3.3
version: 3.3.3
dayjs:
specifier: ^1.11.11
version: 1.11.11
element-plus:
specifier: ^2.3.9
version: 2.7.3(vue@3.4.27)
version: 2.7.3(vue@3.4.27(typescript@5.4.5))
file-saver:
specifier: ^2.0.5
version: 2.0.5
@@ -52,7 +55,7 @@ importers:
version: 5.0.7
pinia:
specifier: ^2.1.6
version: 2.1.7(typescript@5.4.5)(vue@3.4.27)
version: 2.1.7(typescript@5.4.5)(vue@3.4.27(typescript@5.4.5))
sentence-splitter:
specifier: ^4.2.1
version: 4.4.1
@@ -61,7 +64,7 @@ importers:
version: 4.1.4
vant:
specifier: ^4.8.1
version: 4.9.0(vue@3.4.27)
version: 4.9.0(vue@3.4.27(typescript@5.4.5))
vue:
specifier: ^3.4.27
version: 3.4.27(typescript@5.4.5)
@@ -70,17 +73,17 @@ importers:
version: 1.2.2
vue-i18n:
specifier: '9'
version: 9.13.1(vue@3.4.27)
version: 9.13.1(vue@3.4.27(typescript@5.4.5))
vue-router:
specifier: '4'
version: 4.3.2(vue@3.4.27)
version: 4.3.2(vue@3.4.27(typescript@5.4.5))
vue-virtual-scroller:
specifier: 2.0.0-beta.8
version: 2.0.0-beta.8(vue@3.4.27)
version: 2.0.0-beta.8(vue@3.4.27(typescript@5.4.5))
devDependencies:
'@iconify/vue':
specifier: ^4.1.1
version: 4.1.2(vue@3.4.27)
version: 4.1.2(vue@3.4.27(typescript@5.4.5))
'@types/file-saver':
specifier: ^2.0.5
version: 2.0.7
@@ -92,13 +95,13 @@ importers:
version: 0.60.3(postcss@8.4.38)
'@vitejs/plugin-vue':
specifier: ^4.2.3
version: 4.6.2(vite@5.2.12)(vue@3.4.27)
version: 4.6.2(vite@5.2.12(@types/node@20.12.13)(sass@1.77.4))(vue@3.4.27(typescript@5.4.5))
'@vitejs/plugin-vue-jsx':
specifier: ^3.0.1
version: 3.1.0(vite@5.2.12)(vue@3.4.27)
version: 3.1.0(vite@5.2.12(@types/node@20.12.13)(sass@1.77.4))(vue@3.4.27(typescript@5.4.5))
'@vue-macros/reactivity-transform':
specifier: ^0.4.5
version: 0.4.6(vue@3.4.27)
version: 0.4.6(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue/compiler-sfc':
specifier: ^3.3.4
version: 3.4.27
@@ -119,7 +122,7 @@ importers:
version: 8.0.3
rollup-plugin-visualizer:
specifier: ^5.9.2
version: 5.12.0
version: 5.12.0(rollup@4.18.0)
sass:
specifier: ^1.64.2
version: 1.77.4
@@ -131,19 +134,19 @@ importers:
version: 5.4.5
unocss:
specifier: ^0.60.2
version: 0.60.3(postcss@8.4.38)(vite@5.2.12)
version: 0.60.3(postcss@8.4.38)(rollup@4.18.0)(vite@5.2.12(@types/node@20.12.13)(sass@1.77.4))
unplugin-auto-import:
specifier: ^0.16.6
version: 0.16.7
version: 0.16.7(@vueuse/core@9.13.0(vue@3.4.27(typescript@5.4.5)))(rollup@4.18.0)
unplugin-vue-components:
specifier: ^0.25.2
version: 0.25.2(vue@3.4.27)
version: 0.25.2(@babel/parser@7.24.6)(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
unplugin-vue-define-options:
specifier: ^1.4.1
version: 1.4.5(vue@3.4.27)
version: 1.4.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
unplugin-vue-macros:
specifier: ^2.9.3
version: 2.9.3(typescript@5.4.5)(vite@5.2.12)(vue@3.4.27)
version: 2.9.3(@vueuse/core@9.13.0(vue@3.4.27(typescript@5.4.5)))(esbuild@0.20.2)(rollup@4.18.0)(typescript@5.4.5)(vite@5.2.12(@types/node@20.12.13)(sass@1.77.4))(vue@3.4.27(typescript@5.4.5))
vite:
specifier: ^5.2.11
version: 5.2.12(@types/node@20.12.13)(sass@1.77.4)
@@ -3707,7 +3710,7 @@ snapshots:
'@commitlint/types': 19.0.3
chalk: 5.3.0
cosmiconfig: 9.0.0(typescript@5.4.5)
cosmiconfig-typescript-loader: 5.0.0(@types/node@20.12.13)(cosmiconfig@9.0.0)(typescript@5.4.5)
cosmiconfig-typescript-loader: 5.0.0(@types/node@20.12.13)(cosmiconfig@9.0.0(typescript@5.4.5))(typescript@5.4.5)
lodash.isplainobject: 4.0.6
lodash.merge: 4.6.2
lodash.uniq: 4.5.0
@@ -3734,7 +3737,7 @@ snapshots:
'@ctrl/tinycolor@3.6.1': {}
'@element-plus/icons-vue@2.3.1(vue@3.4.27)':
'@element-plus/icons-vue@2.3.1(vue@3.4.27(typescript@5.4.5))':
dependencies:
vue: 3.4.27(typescript@5.4.5)
@@ -3832,7 +3835,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@iconify/vue@4.1.2(vue@3.4.27)':
'@iconify/vue@4.1.2(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@iconify/types': 2.0.0
vue: 3.4.27(typescript@5.4.5)
@@ -3900,11 +3903,13 @@ snapshots:
'@polka/url@1.0.0-next.25': {}
'@rollup/pluginutils@5.1.0':
'@rollup/pluginutils@5.1.0(rollup@4.18.0)':
dependencies:
'@types/estree': 1.0.5
estree-walker: 2.0.2
picomatch: 2.3.1
optionalDependencies:
rollup: 4.18.0
'@rollup/rollup-android-arm-eabi@4.18.0':
optional: true
@@ -3978,24 +3983,26 @@ snapshots:
'@types/node@20.12.13':
dependencies:
undici-types: 5.26.5
optional: true
'@types/qs@6.9.15': {}
'@types/web-bluetooth@0.0.16': {}
'@unocss/astro@0.60.3(vite@5.2.12)':
'@unocss/astro@0.60.3(rollup@4.18.0)(vite@5.2.12(@types/node@20.12.13)(sass@1.77.4))':
dependencies:
'@unocss/core': 0.60.3
'@unocss/reset': 0.60.3
'@unocss/vite': 0.60.3(vite@5.2.12)
'@unocss/vite': 0.60.3(rollup@4.18.0)(vite@5.2.12(@types/node@20.12.13)(sass@1.77.4))
optionalDependencies:
vite: 5.2.12(@types/node@20.12.13)(sass@1.77.4)
transitivePeerDependencies:
- rollup
'@unocss/cli@0.60.3':
'@unocss/cli@0.60.3(rollup@4.18.0)':
dependencies:
'@ampproject/remapping': 2.3.0
'@rollup/pluginutils': 5.1.0
'@rollup/pluginutils': 5.1.0(rollup@4.18.0)
'@unocss/config': 0.60.3
'@unocss/core': 0.60.3
'@unocss/preset-uno': 0.60.3
@@ -4119,10 +4126,10 @@ snapshots:
dependencies:
'@unocss/core': 0.60.3
'@unocss/vite@0.60.3(vite@5.2.12)':
'@unocss/vite@0.60.3(rollup@4.18.0)(vite@5.2.12(@types/node@20.12.13)(sass@1.77.4))':
dependencies:
'@ampproject/remapping': 2.3.0
'@rollup/pluginutils': 5.1.0
'@rollup/pluginutils': 5.1.0(rollup@4.18.0)
'@unocss/config': 0.60.3
'@unocss/core': 0.60.3
'@unocss/inspector': 0.60.3
@@ -4137,11 +4144,11 @@ snapshots:
'@vant/popperjs@1.3.0': {}
'@vant/use@1.6.0(vue@3.4.27)':
'@vant/use@1.6.0(vue@3.4.27(typescript@5.4.5))':
dependencies:
vue: 3.4.27(typescript@5.4.5)
'@vitejs/plugin-vue-jsx@3.1.0(vite@5.2.12)(vue@3.4.27)':
'@vitejs/plugin-vue-jsx@3.1.0(vite@5.2.12(@types/node@20.12.13)(sass@1.77.4))(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@babel/core': 7.24.6
'@babel/plugin-transform-typescript': 7.24.6(@babel/core@7.24.6)
@@ -4151,7 +4158,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@vitejs/plugin-vue@4.6.2(vite@5.2.12)(vue@3.4.27)':
'@vitejs/plugin-vue@4.6.2(vite@5.2.12(@types/node@20.12.13)(sass@1.77.4))(vue@3.4.27(typescript@5.4.5))':
dependencies:
vite: 5.2.12(@types/node@20.12.13)(sass@1.77.4)
vue: 3.4.27(typescript@5.4.5)
@@ -4169,175 +4176,179 @@ snapshots:
'@volar/language-core': 2.2.5
path-browserify: 1.0.1
'@vue-macros/api@0.9.7(vue@3.4.27)':
'@vue-macros/api@0.9.7(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@babel/types': 7.24.6
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
resolve.exports: 2.0.2
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/better-define@1.7.7(vue@3.4.27)':
'@vue-macros/better-define@1.7.7(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue-macros/api': 0.9.7(vue@3.4.27)
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/api': 0.9.7(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
unplugin: 1.10.1
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/boolean-prop@0.3.5(vue@3.4.27)':
'@vue-macros/boolean-prop@0.3.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue/compiler-core': 3.4.27
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/chain-call@0.2.5(vue@3.4.27)':
'@vue-macros/chain-call@0.2.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
unplugin: 1.10.1
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/common@1.10.4(vue@3.4.27)':
'@vue-macros/common@1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@babel/types': 7.24.6
'@rollup/pluginutils': 5.1.0
'@rollup/pluginutils': 5.1.0(rollup@4.18.0)
'@vue/compiler-sfc': 3.4.27
ast-kit: 0.12.1
local-pkg: 0.5.0
magic-string-ast: 0.6.1
optionalDependencies:
vue: 3.4.27(typescript@5.4.5)
transitivePeerDependencies:
- rollup
'@vue-macros/define-emit@0.2.7(vue@3.4.27)':
'@vue-macros/define-emit@0.2.7(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue-macros/api': 0.9.7(vue@3.4.27)
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/api': 0.9.7(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
unplugin: 1.10.1
vue: 3.4.27(typescript@5.4.5)
transitivePeerDependencies:
- rollup
'@vue-macros/define-models@1.2.5(vue@3.4.27)':
'@vue-macros/define-models@1.2.5(@vueuse/core@9.13.0(vue@3.4.27(typescript@5.4.5)))(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
ast-walker-scope: 0.6.1
unplugin: 1.10.1
optionalDependencies:
'@vueuse/core': 9.13.0(vue@3.4.27(typescript@5.4.5))
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/define-prop@0.3.7(vue@3.4.27)':
'@vue-macros/define-prop@0.3.7(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue-macros/api': 0.9.7(vue@3.4.27)
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/api': 0.9.7(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
unplugin: 1.10.1
vue: 3.4.27(typescript@5.4.5)
transitivePeerDependencies:
- rollup
'@vue-macros/define-props-refs@1.2.5(vue@3.4.27)':
'@vue-macros/define-props-refs@1.2.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
unplugin: 1.10.1
vue: 3.4.27(typescript@5.4.5)
transitivePeerDependencies:
- rollup
'@vue-macros/define-props@2.0.6(@vue-macros/reactivity-transform@0.4.6)(vue@3.4.27)':
'@vue-macros/define-props@2.0.6(@vue-macros/reactivity-transform@0.4.6(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5)))(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/reactivity-transform': 0.4.6(vue@3.4.27)
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/reactivity-transform': 0.4.6(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
unplugin: 1.10.1
vue: 3.4.27(typescript@5.4.5)
transitivePeerDependencies:
- rollup
'@vue-macros/define-render@1.5.5(vue@3.4.27)':
'@vue-macros/define-render@1.5.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
unplugin: 1.10.1
vue: 3.4.27(typescript@5.4.5)
transitivePeerDependencies:
- rollup
'@vue-macros/define-slots@1.1.5(vue@3.4.27)':
'@vue-macros/define-slots@1.1.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
unplugin: 1.10.1
vue: 3.4.27(typescript@5.4.5)
transitivePeerDependencies:
- rollup
'@vue-macros/devtools@0.2.0(typescript@5.4.5)(vite@5.2.12)':
'@vue-macros/devtools@0.2.0(typescript@5.4.5)(vite@5.2.12(@types/node@20.12.13)(sass@1.77.4))':
dependencies:
sirv: 2.0.4
vite: 5.2.12(@types/node@20.12.13)(sass@1.77.4)
vue: 3.4.27(typescript@5.4.5)
optionalDependencies:
vite: 5.2.12(@types/node@20.12.13)(sass@1.77.4)
transitivePeerDependencies:
- typescript
'@vue-macros/export-expose@0.1.5(vue@3.4.27)':
'@vue-macros/export-expose@0.1.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue/compiler-sfc': 3.4.27
unplugin: 1.10.1
vue: 3.4.27(typescript@5.4.5)
transitivePeerDependencies:
- rollup
'@vue-macros/export-props@0.4.5(vue@3.4.27)':
'@vue-macros/export-props@0.4.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
unplugin: 1.10.1
vue: 3.4.27(typescript@5.4.5)
transitivePeerDependencies:
- rollup
'@vue-macros/export-render@0.2.5(vue@3.4.27)':
'@vue-macros/export-render@0.2.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue/compiler-sfc': 3.4.27
unplugin: 1.10.1
vue: 3.4.27(typescript@5.4.5)
transitivePeerDependencies:
- rollup
'@vue-macros/hoist-static@1.5.5(vue@3.4.27)':
'@vue-macros/hoist-static@1.5.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
unplugin: 1.10.1
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/jsx-directive@0.8.14(vue@3.4.27)':
'@vue-macros/jsx-directive@0.8.14(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
unplugin: 1.10.1
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/named-template@0.4.5(vue@3.4.27)':
'@vue-macros/named-template@0.4.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue/compiler-dom': 3.4.27
unplugin: 1.10.1
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/reactivity-transform@0.4.6(vue@3.4.27)':
'@vue-macros/reactivity-transform@0.4.6(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@babel/parser': 7.24.6
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue/compiler-core': 3.4.27
'@vue/shared': 3.4.27
magic-string: 0.30.10
@@ -4346,50 +4357,50 @@ snapshots:
transitivePeerDependencies:
- rollup
'@vue-macros/setup-block@0.3.5(vue@3.4.27)':
'@vue-macros/setup-block@0.3.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue/compiler-dom': 3.4.27
unplugin: 1.10.1
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/setup-component@0.17.5(vue@3.4.27)':
'@vue-macros/setup-component@0.17.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
unplugin: 1.10.1
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/setup-sfc@0.17.5(vue@3.4.27)':
'@vue-macros/setup-sfc@0.17.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
unplugin: 1.10.1
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/short-bind@0.2.5(vue@3.4.27)':
'@vue-macros/short-bind@0.2.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue/compiler-core': 3.4.27
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/short-emits@1.5.5(vue@3.4.27)':
'@vue-macros/short-emits@1.5.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
unplugin: 1.10.1
transitivePeerDependencies:
- rollup
- vue
'@vue-macros/short-vmodel@1.4.5(vue@3.4.27)':
'@vue-macros/short-vmodel@1.4.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue/compiler-core': 3.4.27
transitivePeerDependencies:
- rollup
@@ -4399,7 +4410,6 @@ snapshots:
'@vue/babel-plugin-jsx@1.2.2(@babel/core@7.24.6)':
dependencies:
'@babel/core': 7.24.6
'@babel/helper-module-imports': 7.22.15
'@babel/helper-plugin-utils': 7.24.6
'@babel/plugin-syntax-jsx': 7.24.6(@babel/core@7.24.6)
@@ -4411,6 +4421,8 @@ snapshots:
camelcase: 6.3.0
html-tags: 3.3.1
svg-tags: 1.0.0
optionalDependencies:
'@babel/core': 7.24.6
transitivePeerDependencies:
- supports-color
@@ -4463,8 +4475,9 @@ snapshots:
computeds: 0.0.1
minimatch: 9.0.4
path-browserify: 1.0.1
typescript: 5.4.5
vue-template-compiler: 2.7.16
optionalDependencies:
typescript: 5.4.5
'@vue/reactivity@3.4.27':
dependencies:
@@ -4481,7 +4494,7 @@ snapshots:
'@vue/shared': 3.4.27
csstype: 3.1.3
'@vue/server-renderer@3.4.27(vue@3.4.27)':
'@vue/server-renderer@3.4.27(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue/compiler-ssr': 3.4.27
'@vue/shared': 3.4.27
@@ -4489,21 +4502,21 @@ snapshots:
'@vue/shared@3.4.27': {}
'@vueuse/core@9.13.0(vue@3.4.27)':
'@vueuse/core@9.13.0(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@types/web-bluetooth': 0.0.16
'@vueuse/metadata': 9.13.0
'@vueuse/shared': 9.13.0(vue@3.4.27)
vue-demi: 0.14.8(vue@3.4.27)
'@vueuse/shared': 9.13.0(vue@3.4.27(typescript@5.4.5))
vue-demi: 0.14.8(vue@3.4.27(typescript@5.4.5))
transitivePeerDependencies:
- '@vue/composition-api'
- vue
'@vueuse/metadata@9.13.0': {}
'@vueuse/shared@9.13.0(vue@3.4.27)':
'@vueuse/shared@9.13.0(vue@3.4.27(typescript@5.4.5))':
dependencies:
vue-demi: 0.14.8(vue@3.4.27)
vue-demi: 0.14.8(vue@3.4.27(typescript@5.4.5))
transitivePeerDependencies:
- '@vue/composition-api'
- vue
@@ -4964,7 +4977,7 @@ snapshots:
core-util-is@1.0.3: {}
cosmiconfig-typescript-loader@5.0.0(@types/node@20.12.13)(cosmiconfig@9.0.0)(typescript@5.4.5):
cosmiconfig-typescript-loader@5.0.0(@types/node@20.12.13)(cosmiconfig@9.0.0(typescript@5.4.5))(typescript@5.4.5):
dependencies:
'@types/node': 20.12.13
cosmiconfig: 9.0.0(typescript@5.4.5)
@@ -4978,6 +4991,7 @@ snapshots:
import-fresh: 3.3.0
js-yaml: 4.1.0
parse-json: 5.2.0
optionalDependencies:
typescript: 5.4.5
optional: true
@@ -5104,15 +5118,15 @@ snapshots:
electron-to-chromium@1.4.787: {}
element-plus@2.7.3(vue@3.4.27):
element-plus@2.7.3(vue@3.4.27(typescript@5.4.5)):
dependencies:
'@ctrl/tinycolor': 3.6.1
'@element-plus/icons-vue': 2.3.1(vue@3.4.27)
'@element-plus/icons-vue': 2.3.1(vue@3.4.27(typescript@5.4.5))
'@floating-ui/dom': 1.6.5
'@popperjs/core': '@sxzz/popperjs-es@2.11.7'
'@types/lodash': 4.17.4
'@types/lodash-es': 4.17.12
'@vueuse/core': 9.13.0(vue@3.4.27)
'@vueuse/core': 9.13.0(vue@3.4.27(typescript@5.4.5))
async-validator: 4.2.5
dayjs: 1.11.11
escape-html: 1.0.3
@@ -6277,12 +6291,13 @@ snapshots:
pify@2.3.0: {}
pinia@2.1.7(typescript@5.4.5)(vue@3.4.27):
pinia@2.1.7(typescript@5.4.5)(vue@3.4.27(typescript@5.4.5)):
dependencies:
'@vue/devtools-api': 6.6.1
typescript: 5.4.5
vue: 3.4.27(typescript@5.4.5)
vue-demi: 0.14.8(vue@3.4.27)
vue-demi: 0.14.8(vue@3.4.27(typescript@5.4.5))
optionalDependencies:
typescript: 5.4.5
pinkie-promise@2.0.1:
dependencies:
@@ -6446,12 +6461,14 @@ snapshots:
reusify@1.0.4: {}
rollup-plugin-visualizer@5.12.0:
rollup-plugin-visualizer@5.12.0(rollup@4.18.0):
dependencies:
open: 8.4.2
picomatch: 2.3.1
source-map: 0.7.4
yargs: 17.7.2
optionalDependencies:
rollup: 4.18.0
rollup@4.18.0:
dependencies:
@@ -6811,11 +6828,12 @@ snapshots:
object.reduce: 1.0.1
undertaker-registry: 1.0.1
undici-types@5.26.5: {}
undici-types@5.26.5:
optional: true
unimport@3.7.2:
unimport@3.7.2(rollup@4.18.0):
dependencies:
'@rollup/pluginutils': 5.1.0
'@rollup/pluginutils': 5.1.0(rollup@4.18.0)
acorn: 8.11.3
escape-string-regexp: 5.0.0
estree-walker: 3.0.3
@@ -6845,10 +6863,10 @@ snapshots:
universalify@2.0.1: {}
unocss@0.60.3(postcss@8.4.38)(vite@5.2.12):
unocss@0.60.3(postcss@8.4.38)(rollup@4.18.0)(vite@5.2.12(@types/node@20.12.13)(sass@1.77.4)):
dependencies:
'@unocss/astro': 0.60.3(vite@5.2.12)
'@unocss/cli': 0.60.3
'@unocss/astro': 0.60.3(rollup@4.18.0)(vite@5.2.12(@types/node@20.12.13)(sass@1.77.4))
'@unocss/cli': 0.60.3(rollup@4.18.0)
'@unocss/core': 0.60.3
'@unocss/extractor-arbitrary-variants': 0.60.3
'@unocss/postcss': 0.60.3(postcss@8.4.38)
@@ -6866,36 +6884,42 @@ snapshots:
'@unocss/transformer-compile-class': 0.60.3
'@unocss/transformer-directives': 0.60.3
'@unocss/transformer-variant-group': 0.60.3
'@unocss/vite': 0.60.3(vite@5.2.12)
'@unocss/vite': 0.60.3(rollup@4.18.0)(vite@5.2.12(@types/node@20.12.13)(sass@1.77.4))
optionalDependencies:
vite: 5.2.12(@types/node@20.12.13)(sass@1.77.4)
transitivePeerDependencies:
- postcss
- rollup
- supports-color
unplugin-auto-import@0.16.7:
unplugin-auto-import@0.16.7(@vueuse/core@9.13.0(vue@3.4.27(typescript@5.4.5)))(rollup@4.18.0):
dependencies:
'@antfu/utils': 0.7.8
'@rollup/pluginutils': 5.1.0
'@rollup/pluginutils': 5.1.0(rollup@4.18.0)
fast-glob: 3.3.2
local-pkg: 0.5.0
magic-string: 0.30.10
minimatch: 9.0.4
unimport: 3.7.2
unimport: 3.7.2(rollup@4.18.0)
unplugin: 1.10.1
optionalDependencies:
'@vueuse/core': 9.13.0(vue@3.4.27(typescript@5.4.5))
transitivePeerDependencies:
- rollup
unplugin-combine@1.0.0(vite@5.2.12):
unplugin-combine@1.0.0(esbuild@0.20.2)(rollup@4.18.0)(vite@5.2.12(@types/node@20.12.13)(sass@1.77.4)):
dependencies:
'@antfu/utils': 0.7.8
unplugin: 1.10.1
optionalDependencies:
esbuild: 0.20.2
rollup: 4.18.0
vite: 5.2.12(@types/node@20.12.13)(sass@1.77.4)
unplugin-vue-components@0.25.2(vue@3.4.27):
unplugin-vue-components@0.25.2(@babel/parser@7.24.6)(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5)):
dependencies:
'@antfu/utils': 0.7.8
'@rollup/pluginutils': 5.1.0
'@rollup/pluginutils': 5.1.0(rollup@4.18.0)
chokidar: 3.6.0
debug: 4.3.4
fast-glob: 3.3.2
@@ -6905,49 +6929,51 @@ snapshots:
resolve: 1.22.8
unplugin: 1.10.1
vue: 3.4.27(typescript@5.4.5)
optionalDependencies:
'@babel/parser': 7.24.6
transitivePeerDependencies:
- rollup
- supports-color
unplugin-vue-define-options@1.4.5(vue@3.4.27):
unplugin-vue-define-options@1.4.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5)):
dependencies:
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
ast-walker-scope: 0.6.1
unplugin: 1.10.1
transitivePeerDependencies:
- rollup
- vue
unplugin-vue-macros@2.9.3(typescript@5.4.5)(vite@5.2.12)(vue@3.4.27):
unplugin-vue-macros@2.9.3(@vueuse/core@9.13.0(vue@3.4.27(typescript@5.4.5)))(esbuild@0.20.2)(rollup@4.18.0)(typescript@5.4.5)(vite@5.2.12(@types/node@20.12.13)(sass@1.77.4))(vue@3.4.27(typescript@5.4.5)):
dependencies:
'@vue-macros/better-define': 1.7.7(vue@3.4.27)
'@vue-macros/boolean-prop': 0.3.5(vue@3.4.27)
'@vue-macros/chain-call': 0.2.5(vue@3.4.27)
'@vue-macros/common': 1.10.4(vue@3.4.27)
'@vue-macros/define-emit': 0.2.7(vue@3.4.27)
'@vue-macros/define-models': 1.2.5(vue@3.4.27)
'@vue-macros/define-prop': 0.3.7(vue@3.4.27)
'@vue-macros/define-props': 2.0.6(@vue-macros/reactivity-transform@0.4.6)(vue@3.4.27)
'@vue-macros/define-props-refs': 1.2.5(vue@3.4.27)
'@vue-macros/define-render': 1.5.5(vue@3.4.27)
'@vue-macros/define-slots': 1.1.5(vue@3.4.27)
'@vue-macros/devtools': 0.2.0(typescript@5.4.5)(vite@5.2.12)
'@vue-macros/export-expose': 0.1.5(vue@3.4.27)
'@vue-macros/export-props': 0.4.5(vue@3.4.27)
'@vue-macros/export-render': 0.2.5(vue@3.4.27)
'@vue-macros/hoist-static': 1.5.5(vue@3.4.27)
'@vue-macros/jsx-directive': 0.8.14(vue@3.4.27)
'@vue-macros/named-template': 0.4.5(vue@3.4.27)
'@vue-macros/reactivity-transform': 0.4.6(vue@3.4.27)
'@vue-macros/setup-block': 0.3.5(vue@3.4.27)
'@vue-macros/setup-component': 0.17.5(vue@3.4.27)
'@vue-macros/setup-sfc': 0.17.5(vue@3.4.27)
'@vue-macros/short-bind': 0.2.5(vue@3.4.27)
'@vue-macros/short-emits': 1.5.5(vue@3.4.27)
'@vue-macros/short-vmodel': 1.4.5(vue@3.4.27)
'@vue-macros/better-define': 1.7.7(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/boolean-prop': 0.3.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/chain-call': 0.2.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/common': 1.10.4(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/define-emit': 0.2.7(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/define-models': 1.2.5(@vueuse/core@9.13.0(vue@3.4.27(typescript@5.4.5)))(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/define-prop': 0.3.7(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/define-props': 2.0.6(@vue-macros/reactivity-transform@0.4.6(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5)))(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/define-props-refs': 1.2.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/define-render': 1.5.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/define-slots': 1.1.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/devtools': 0.2.0(typescript@5.4.5)(vite@5.2.12(@types/node@20.12.13)(sass@1.77.4))
'@vue-macros/export-expose': 0.1.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/export-props': 0.4.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/export-render': 0.2.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/hoist-static': 1.5.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/jsx-directive': 0.8.14(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/named-template': 0.4.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/reactivity-transform': 0.4.6(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/setup-block': 0.3.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/setup-component': 0.17.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/setup-sfc': 0.17.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/short-bind': 0.2.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/short-emits': 1.5.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
'@vue-macros/short-vmodel': 1.4.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
unplugin: 1.10.1
unplugin-combine: 1.0.0(vite@5.2.12)
unplugin-vue-define-options: 1.4.5(vue@3.4.27)
unplugin-combine: 1.0.0(esbuild@0.20.2)(rollup@4.18.0)(vite@5.2.12(@types/node@20.12.13)(sass@1.77.4))
unplugin-vue-define-options: 1.4.5(rollup@4.18.0)(vue@3.4.27(typescript@5.4.5))
vue: 3.4.27(typescript@5.4.5)
transitivePeerDependencies:
- '@vueuse/core'
@@ -6999,10 +7025,10 @@ snapshots:
value-or-function@3.0.0: {}
vant@4.9.0(vue@3.4.27):
vant@4.9.0(vue@3.4.27(typescript@5.4.5)):
dependencies:
'@vant/popperjs': 1.3.0
'@vant/use': 1.6.0(vue@3.4.27)
'@vant/use': 1.6.0(vue@3.4.27(typescript@5.4.5))
'@vue/shared': 3.4.27
vue: 3.4.27(typescript@5.4.5)
@@ -7047,36 +7073,36 @@ snapshots:
vite@5.2.12(@types/node@20.12.13)(sass@1.77.4):
dependencies:
'@types/node': 20.12.13
esbuild: 0.20.2
postcss: 8.4.38
rollup: 4.18.0
sass: 1.77.4
optionalDependencies:
'@types/node': 20.12.13
fsevents: 2.3.3
sass: 1.77.4
vue-activity-calendar@1.2.2: {}
vue-demi@0.14.8(vue@3.4.27):
vue-demi@0.14.8(vue@3.4.27(typescript@5.4.5)):
dependencies:
vue: 3.4.27(typescript@5.4.5)
vue-i18n@9.13.1(vue@3.4.27):
vue-i18n@9.13.1(vue@3.4.27(typescript@5.4.5)):
dependencies:
'@intlify/core-base': 9.13.1
'@intlify/shared': 9.13.1
'@vue/devtools-api': 6.6.1
vue: 3.4.27(typescript@5.4.5)
vue-observe-visibility@2.0.0-alpha.1(vue@3.4.27):
vue-observe-visibility@2.0.0-alpha.1(vue@3.4.27(typescript@5.4.5)):
dependencies:
vue: 3.4.27(typescript@5.4.5)
vue-resize@2.0.0-alpha.1(vue@3.4.27):
vue-resize@2.0.0-alpha.1(vue@3.4.27(typescript@5.4.5)):
dependencies:
vue: 3.4.27(typescript@5.4.5)
vue-router@4.3.2(vue@3.4.27):
vue-router@4.3.2(vue@3.4.27(typescript@5.4.5)):
dependencies:
'@vue/devtools-api': 6.6.1
vue: 3.4.27(typescript@5.4.5)
@@ -7093,20 +7119,21 @@ snapshots:
semver: 7.6.2
typescript: 5.4.5
vue-virtual-scroller@2.0.0-beta.8(vue@3.4.27):
vue-virtual-scroller@2.0.0-beta.8(vue@3.4.27(typescript@5.4.5)):
dependencies:
mitt: 2.1.0
vue: 3.4.27(typescript@5.4.5)
vue-observe-visibility: 2.0.0-alpha.1(vue@3.4.27)
vue-resize: 2.0.0-alpha.1(vue@3.4.27)
vue-observe-visibility: 2.0.0-alpha.1(vue@3.4.27(typescript@5.4.5))
vue-resize: 2.0.0-alpha.1(vue@3.4.27(typescript@5.4.5))
vue@3.4.27(typescript@5.4.5):
dependencies:
'@vue/compiler-dom': 3.4.27
'@vue/compiler-sfc': 3.4.27
'@vue/runtime-dom': 3.4.27
'@vue/server-renderer': 3.4.27(vue@3.4.27)
'@vue/server-renderer': 3.4.27(vue@3.4.27(typescript@5.4.5))
'@vue/shared': 3.4.27
optionalDependencies:
typescript: 5.4.5
wasm-feature-detect@1.6.1: {}

View File

@@ -4,7 +4,7 @@ import DictPlan from "@/pages/mobile/components/DictPlan.vue";
import NavBar from "@/pages/mobile/components/NavBar.vue";
import {onMounted} from "vue";
import {useRoute} from "vue-router";
import {DefaultDict, Dict} from "@/types.ts";
import {Dict, getDefaultDict} from "@/types.ts";
import {cloneDeep} from "lodash-es";
import {nanoid} from "nanoid";
import {dictionaryResources} from "@/assets/dictionary.ts";
@@ -27,7 +27,7 @@ onMounted(() => {
runtimeStore.editDict = cloneDeep(find)
} else {
runtimeStore.editDict = cloneDeep({
...cloneDeep(DefaultDict),
...getDefaultDict(),
...item,
})
runtimeStore.editDict.id = nanoid(6)

View File

@@ -3,7 +3,7 @@ import {useBaseStore} from "@/stores/base.ts"
import {computed, onMounted, onUnmounted, provide, watch} from "vue"
import {useSettingStore} from "@/stores/setting.ts";
import {emitter, EventKey} from "@/utils/eventBus.ts";
import {emitter, EventKey, useEvent} from "@/utils/eventBus.ts";
import SlideHorizontal from "@/components/slide/SlideHorizontal.vue";
import SlideItem from "@/components/slide/SlideItem.vue";
import CollectList from "@/pages/mobile/components/CollectList.vue";
@@ -21,14 +21,8 @@ watch(() => settingStore.showPanel, n => {
}
})
onMounted(() => {
emitter.on(EventKey.changeDict, () => {
tabIndex = 0
})
})
onUnmounted(() => {
emitter.off(EventKey.changeDict)
useEvent(EventKey.changeDict, () => {
tabIndex = 0
})

View File

@@ -39,26 +39,15 @@ const word: Word = $computed(() => {
})
function getCurrentPractice() {
if (store.chapter.length) {
data.words = store.chapter
data.index = 0
data.words = cloneDeep(store.chapter)
emitter.emit(EventKey.resetWord)
}
}
function sort(list: Word[]) {
store.currentDict.chapterWords[store.currentDict.chapterIndex] = data.words = list
data.index = 0
syncMyDictList(store.currentDict)
}
function nextChapter() {
if (store.currentDict.chapterIndex >= store.currentDict.chapterWords.length - 1) {
store.currentDict.chapterIndex = 0
} else store.currentDict.chapterIndex++
getCurrentPractice()
}
@@ -222,7 +211,6 @@ function unknow() {
<div class="list-header">
<div class="left">
<div class="title">
{{ store.chapterName }}
</div>
<BaseIcon title="切换词典"
@click="emitter.emit(EventKey.openDictModal,'list')"
@@ -249,7 +237,7 @@ function unknow() {
</div>
<BaseIcon icon="bi:arrow-right"
@click="next"
v-if="store.currentDict.chapterIndex < store.currentDict.chapterWords.length - 1"/>
/>
</div>
<div class="right">
{{ data.words.length }}个单词

View File

@@ -318,7 +318,6 @@ onMounted(() => {
<div class="list-header">
<div class="left">
<div class="title">
{{ store.chapterName }}
</div>
<BaseIcon title="切换词典"
@click="emitter.emit(EventKey.openDictModal,'list')"

View File

@@ -7,7 +7,7 @@ import {useBaseStore} from "@/stores/base.ts";
import {onMounted, onUnmounted} from "vue";
import {useRuntimeStore} from "@/stores/runtime.ts";
import {ShortcutKey, Word} from "@/types.ts";
import {emitter, EventKey} from "@/utils/eventBus.ts";
import {emitter, EventKey, useEvent, useEvents} from "@/utils/eventBus.ts";
import {useSettingStore} from "@/stores/setting.ts";
import {syncMyDictList} from "@/hooks/dict.ts";
@@ -29,31 +29,24 @@ function getCurrentPractice() {
}
function sort(list: Word[]) {
store.currentDict.chapterWords[store.currentDict.chapterIndex] = wordData.words = list
wordData.index = 0
syncMyDictList(store.currentDict)
}
function next() {
if (store.currentDict.chapterIndex >= store.currentDict.chapterWords.length - 1) {
store.currentDict.chapterIndex = 0
} else store.currentDict.chapterIndex++
getCurrentPractice()
}
onMounted(() => {
getCurrentPractice()
emitter.on(EventKey.changeDict, getCurrentPractice)
emitter.on(EventKey.next, next)
emitter.on(ShortcutKey.NextChapter, next)
})
onUnmounted(() => {
emitter.off(EventKey.changeDict, getCurrentPractice)
emitter.off(EventKey.next, next)
emitter.off(ShortcutKey.NextChapter, next)
})
useEvents([
[EventKey.changeDict, getCurrentPractice],
[EventKey.next, next],
[ShortcutKey.NextChapter, next],
])
defineExpose({getCurrentPractice})

View File

@@ -13,7 +13,7 @@ import {Icon} from "@iconify/vue";
import Tooltip from "@/pages/pc/components/Tooltip.vue";
import IconWrapper from "@/pages/pc/components/IconWrapper.vue";
import BaseIcon from "@/components/BaseIcon.vue";
import {emitter, EventKey} from "@/utils/eventBus.ts";
import {emitter, EventKey, useEvent} from "@/utils/eventBus.ts";
import {useRouter} from "vue-router";
import {useRuntimeStore} from "@/stores/runtime.ts";
import {cloneDeep} from "lodash-es";
@@ -46,14 +46,8 @@ function changeIndex(dict: Dict) {
store.changeDict(dict, practiceType)
}
onMounted(() => {
emitter.on(EventKey.changeDict, () => {
tabIndex = 0
})
})
onUnmounted(() => {
emitter.off(EventKey.changeDict)
useEvent(EventKey.changeDict, () => {
tabIndex = 0
})
const {

View File

@@ -5,7 +5,7 @@ import BaseButton from "@/components/BaseButton.vue";
import Empty from "@/components/Empty.vue";
import {useRuntimeStore} from "@/stores/runtime.ts";
import {cloneDeep} from "lodash-es";
import {Article, DefaultArticle, DefaultDict, Dict, DictResource, DictType, Sort, TranslateType} from "@/types.ts";
import {Article, DefaultArticle, Dict, DictResource, DictType, getDefaultDict, Sort, TranslateType} from "@/types.ts";
import {emitter, EventKey} from "@/utils/eventBus.ts";
import EditBatchArticleModal from "@/pages/pc/components/article/EditBatchArticleModal.vue";
import {Icon} from "@iconify/vue";
@@ -58,7 +58,7 @@ async function getDictDetail(val: {
runtimeStore.editDict = cloneDeep(find)
} else {
runtimeStore.editDict = cloneDeep({
...cloneDeep(DefaultDict),
...getDefaultDict(),
...item,
})
runtimeStore.editDict.id = nanoid(6)

View File

@@ -1,6 +1,6 @@
<script setup lang="ts">
import {DefaultDict, Dict, DictType} from "@/types.ts";
import {Dict, DictType, getDefaultDict} from "@/types.ts";
import {cloneDeep} from "lodash-es";
import {FormInstance, FormRules} from "element-plus";
@@ -54,7 +54,7 @@ async function onSubmit() {
await dictFormRef.validate((valid, fields) => {
if (valid) {
let data: Dict = cloneDeep({
...DefaultDict,
...getDefaultDict(),
...dictForm,
})
//任意修改,都将其变为自定义词典
@@ -100,7 +100,7 @@ onMounted(() => {
})
if (props.isAdd) {
dictForm = cloneDeep(DefaultDict)
dictForm = getDefaultDict()
} else {
dictForm = cloneDeep(runtimeStore.editDict)
}

View File

@@ -3,7 +3,7 @@
import BaseIcon from "@/components/BaseIcon.vue";
import BaseButton from "@/components/BaseButton.vue";
import {assign, chunk, cloneDeep, reverse, shuffle} from "lodash-es";
import {DefaultDict, Dict, DictResource, DictType, Sort, Word} from "@/types.ts";
import {Dict, DictResource, DictType, getDefaultDict, Sort, Word} from "@/types.ts";
import {nanoid} from "nanoid";
import {FormInstance, FormRules} from "element-plus";
import {reactive} from "vue";
@@ -78,7 +78,7 @@ async function getDictDetail(val: {
runtimeStore.editDict = cloneDeep(find)
} else {
runtimeStore.editDict = cloneDeep({
...cloneDeep(DefaultDict),
...getDefaultDict(),
...item,
})
runtimeStore.editDict.id = nanoid(6)

View File

@@ -19,7 +19,7 @@ import {MessageBox} from "@/utils/MessageBox.tsx";
import {useBaseStore} from "@/stores/base.ts";
import EditSingleArticleModal from "@/pages/pc/components/article/EditSingleArticleModal.vue";
import {usePracticeStore} from "@/stores/practice.ts";
import {emitter, EventKey} from "@/utils/eventBus.ts";
import {emitter, EventKey, useEvents} from "@/utils/eventBus.ts";
import IconWrapper from "@/pages/pc/components/IconWrapper.vue";
import {Icon} from "@iconify/vue";
import Tooltip from "@/pages/pc/components/Tooltip.vue";
@@ -284,27 +284,19 @@ function shortcutKeyEdit() {
onMounted(() => {
init()
emitter.on(EventKey.changeDict, init)
emitter.on(EventKey.next, next)
emitter.on(ShortcutKey.NextChapter, next)
emitter.on(ShortcutKey.PlayWordPronunciation, play)
emitter.on(ShortcutKey.ShowWord, show)
emitter.on(ShortcutKey.Next, skip)
emitter.on(ShortcutKey.ToggleCollect, collect)
emitter.on(ShortcutKey.EditArticle, shortcutKeyEdit)
})
onUnmounted(() => {
emitter.off(EventKey.changeDict, init)
emitter.off(EventKey.next, next)
emitter.off(ShortcutKey.NextChapter, next)
emitter.off(ShortcutKey.PlayWordPronunciation, play)
emitter.off(ShortcutKey.ShowWord, show)
emitter.off(ShortcutKey.Next, skip)
emitter.off(ShortcutKey.ToggleCollect, collect)
emitter.off(ShortcutKey.EditArticle, shortcutKeyEdit)
})
useEvents([
[EventKey.changeDict, init],
[EventKey.next, next],
[ShortcutKey.NextChapter, next],
[ShortcutKey.PlayWordPronunciation, play],
[ShortcutKey.ShowWord, show],
[ShortcutKey.Next, skip],
[ShortcutKey.ToggleCollect, collect],
[ShortcutKey.EditArticle, shortcutKeyEdit],
])
defineExpose({getCurrentPractice})

View File

@@ -6,10 +6,9 @@ import {useRoute} from "vue-router";
import {useRuntimeStore} from "@/stores/runtime.ts";
import {useBaseStore} from "@/stores/base.ts";
import {assign, cloneDeep, reverse, shuffle} from "lodash-es";
import {DefaultDict, Sort, Word} from "@/types.ts";
import {Sort, Word} from "@/types.ts";
import {nanoid} from "nanoid";
import BaseIcon from "@/components/BaseIcon.vue";
import {Icon} from "@iconify/vue";
import {useNav} from "@/utils";
import {FormInstance, FormRules} from "element-plus";
import MiniDialog from "@/pages/pc/components/dialog/MiniDialog.vue";
@@ -174,13 +173,11 @@ function sort(type: Sort) {
<template>
<BasePage>
<header class="flex gap-4">
<div class="back" @click.stop="back">
<Icon icon="octicon:arrow-left-24" width="20"/>
</div>
<header class="flex gap-4 items-center">
<BaseIcon @click="back" icon="octicon:arrow-left-24" width="20"/>
<div class="left">
<div class="top">
<div class="title">
<div class="text-xl">
{{ runtimeStore.editDict.name }}
</div>
</div>

View File

@@ -6,12 +6,13 @@ import "vue-activity-calendar/style.css";
import {useRouter} from "vue-router";
import BaseIcon from "@/components/BaseIcon.vue";
import Dialog from "@/pages/pc/components/dialog/Dialog.vue";
import {useNav} from "@/utils";
import {_getAccomplishDate, _getAccomplishDays, useNav} from "@/utils";
import BasePage from "@/pages/pc/components/BasePage.vue";
import {getDefaultDict} from "@/types.ts";
import {onMounted, watch} from "vue";
import {getCurrentStudyWord} from "@/hooks/dict.ts";
import {usePracticeStore} from "@/stores/practice.ts";
import {EventKey, useEvent} from "@/utils/eventBus.ts";
const store = useBaseStore()
const statStore = usePracticeStore()
@@ -34,11 +35,6 @@ let currentStudy = $ref({
review: [],
write: []
})
watch(() => store.load, n => {
if (n) {
currentStudy = getCurrentStudyWord()
}
})
onMounted(() => {
if (!currentStudy.new.length) {
@@ -46,12 +42,21 @@ onMounted(() => {
}
})
useEvent(EventKey.changeDict, () => {
currentStudy = getCurrentStudyWord()
})
function study() {
nav('study-word', {}, currentStudy)
}
let show = $ref(false)
let tempPerDayStudyNumber = $ref(0)
function changePerDayStudyNumber() {
store.sdict.perDayStudyNumber = tempPerDayStudyNumber
currentStudy = getCurrentStudyWord()
}
</script>
<template>
@@ -68,35 +73,27 @@ let tempPerDayStudyNumber = $ref(0)
@click="router.push('/dict')"/>
</div>
<div class="flex-1 flex flex-col justify-end items-end">
<div class="flex gap-3">
<div class="">
<div class="title">
每日目标
</div>
<div class="flex">
<div style="color:#ac6ed1;" class="cursor-pointer" v-if="false">
更改目标
</div>
<div class="text-xs">学习 {{ store.sdict.perDayStudyNumber }} 个单词</div>
</div>
</div>
<div class="flex gap-3 items-center">
每日目标
<div
style="color:#ac6ed1;"
@click="show = true;tempPerDayStudyNumber = store.sdict.perDayStudyNumber"
class="bg-slate-200 w-10 h-10 flex center text-2xl rounded cursor-pointer">
class="bg-slate-200 px-2 h-10 flex center text-2xl rounded cursor-pointer">
{{ store.sdict.perDayStudyNumber }}
</div>
个单词
</div>
<div class="mt-2">
<div>预计完成日期2024-04-01</div>
<div class="mt-2 text-sm">
预计完成日期{{ _getAccomplishDate(store.sdict.words.length, store.sdict.perDayStudyNumber) }}
</div>
</div>
</div>
<div class="mt-2">
<div class="text-sm flex justify-between">
已学习{{ store.currentStudyWordProgress }}%
<span>{{ store.currentStudyWordDict.lastLearnIndex }} /{{
<span>{{ store.currentStudyWordDict.lastLearnIndex }} / {{
store.currentStudyWordDict.words.length
}}</span>
}}</span>
</div>
<el-progress class="mt-1" :percentage="store.currentStudyWordProgress" :show-text="false"></el-progress>
</div>
@@ -205,7 +202,7 @@ let tempPerDayStudyNumber = $ref(0)
<Dialog v-model="show"
title="每日目标"
:footer="true"
@ok="store.sdict.perDayStudyNumber = tempPerDayStudyNumber"
@ok="changePerDayStudyNumber"
>
<div class="target-modal">
<div class="center text-2xl gap-2">
@@ -228,7 +225,7 @@ let tempPerDayStudyNumber = $ref(0)
<div>预计</div>
<span class="text-2xl"
style="color:rgb(176,116,211)">{{
Math.ceil(store.sdict.words.length / tempPerDayStudyNumber)
_getAccomplishDays(store.sdict.words.length, tempPerDayStudyNumber)
}}</span>天完成学习
</div>
<div>

View File

@@ -69,7 +69,7 @@ const router = VueRouter.createRouter({
},
})
router.beforeEach((to, from) => {
router.beforeEach((to: any, from: any) => {
// console.log('beforeEach-to',to.path)
// console.log('beforeEach-from',from.path)
const runtimeStore = useRuntimeStore()

View File

@@ -1,16 +1,14 @@
import {defineStore} from 'pinia'
import {Article, DefaultDict, Dict, DictType, DisplayStatistics, getDefaultDict, Sort, Word} from "../types.ts"
import {chunk, cloneDeep, merge, reverse, shuffle} from "lodash-es";
import {Dict, DictType, getDefaultDict, Sort, Word} from "../types.ts"
import {cloneDeep, merge, reverse, shuffle} from "lodash-es";
import {emitter, EventKey} from "@/utils/eventBus.ts"
import {useRuntimeStore} from "@/stores/runtime.ts";
import * as localforage from "localforage";
import {nanoid} from "nanoid";
import {SAVE_DICT_KEY, SAVE_SETTING_KEY} from "@/utils/const.ts";
import {checkAndUpgradeSaveDict, getDictFile} from "@/utils";
import {SAVE_DICT_KEY} from "@/utils/const.ts";
import {_checkDictWords, checkAndUpgradeSaveDict, getDictFile} from "@/utils";
export interface BaseState {
myDictList: Dict[],
collectDictIds: string[],
current: {
index: number,
practiceType: DictType,//练习类型目前仅词典为collect时判断是练单词还是文章使用
@@ -25,8 +23,6 @@ export interface BaseState {
currentStudy?: {
word: {
dictIndex: number,
perDayStudyNumber: number,
lastLearnIndex: number,
},
article: {
dictIndex: number,
@@ -37,6 +33,7 @@ export interface BaseState {
export const DefaultBaseState = (): BaseState => ({
commonDictList: [
getDefaultDict(),
{
...getDefaultDict(),
index: 1,
@@ -120,7 +117,7 @@ export const DefaultBaseState = (): BaseState => ({
articleDictList: [
{
...cloneDeep(DefaultDict),
...getDefaultDict(),
id: 'article_nce2',
name: "新概念英语2-课文",
description: '新概念英语2-课文',
@@ -175,7 +172,7 @@ export const DefaultBaseState = (): BaseState => ({
myDictList: [
{
...cloneDeep(DefaultDict),
...getDefaultDict(),
id: 'collect',
name: '收藏',
type: DictType.collect,
@@ -184,7 +181,7 @@ export const DefaultBaseState = (): BaseState => ({
isCustom: true,
},
{
...cloneDeep(DefaultDict),
...getDefaultDict(),
id: 'skip',
name: '简单词',
type: DictType.simple,
@@ -192,7 +189,7 @@ export const DefaultBaseState = (): BaseState => ({
isCustom: true,
},
{
...cloneDeep(DefaultDict),
...getDefaultDict(),
id: 'wrong',
name: '错词本',
type: DictType.wrong,
@@ -200,7 +197,7 @@ export const DefaultBaseState = (): BaseState => ({
isCustom: true,
},
{
...cloneDeep(DefaultDict),
...getDefaultDict(),
id: 'cet4',
name: 'CET-4',
description: '大学英语四级词库',
@@ -213,7 +210,7 @@ export const DefaultBaseState = (): BaseState => ({
type: DictType.word
},
{
...cloneDeep(DefaultDict),
...getDefaultDict(),
id: 'article_nce2',
name: "新概念英语2-课文",
description: '新概念英语2-课文',
@@ -226,26 +223,9 @@ export const DefaultBaseState = (): BaseState => ({
resourceId: 'article_nce2',
length: 96
},
// {
// ...cloneDeep(DefaultDict),
// id: 'nce-new-2',
// name: '新概念英语(新版)-2',
// description: '新概念英语新版第二册',
// category: '青少年英语',
// tags: ['新概念英语'],
// url: 'nce-new-2.json',
// translateLanguage: 'common',
// language: 'en',
// type: DictType.word,
// resourceId: 'nce-new-2',
// length: 862
// },
],
collectDictIds: [],
current: {
index: 4,
// dictType: DictType.article,
// dictIndex: 0,
practiceType: DictType.article,
},
simpleWords: [
@@ -324,21 +304,6 @@ export const useBaseStore = defineStore('base', {
chapter(state: BaseState): Word[] {
return this.currentDict.chapterWords[this.currentDict.chapterIndex] ?? []
},
chapterName(state: BaseState) {
let title = ''
switch (this.currentDict.type) {
case DictType.collect:
if (state.current.practiceType === DictType.article) {
return `${this.currentDict.chapterIndex + 1}`
}
case DictType.wrong:
case DictType.simple:
return this.currentDict.name
case DictType.word:
return `${this.currentDict.chapterIndex + 1}`
}
return title
}
},
actions: {
setState(obj: any) {
@@ -353,7 +318,7 @@ export const useBaseStore = defineStore('base', {
} else {
let configStr: string = await localforage.getItem(SAVE_DICT_KEY.key)
let data = checkAndUpgradeSaveDict(configStr)
// this.setState(data)
this.setState(data)
}
localforage.setItem(SAVE_DICT_KEY.key, JSON.stringify({val: this.$state, version: SAVE_DICT_KEY.version}))
} catch (e) {
@@ -368,21 +333,9 @@ export const useBaseStore = defineStore('base', {
}
if (this.currentStudy.word.dictIndex >= 0) {
let current = this.currentStudyWordDict
await _checkDictWords(this.currentStudyWordDict)
let current = this.articleDictList[this.currentStudy.article.dictIndex]
let dictResourceUrl = `./dicts/${current.language}/${current.type}/${current.translateLanguage}/${current.url}`;
if (!current.words.length) {
let v = await getDictFile(dictResourceUrl)
// v = v.slice(0, 50)
v.map(s => {
s.id = nanoid(6)
})
// current.originWords = cloneDeep(v)
// current.words = cloneDeep(v)
current.words = Object.freeze(v)
}
current = this.articleDictList[this.currentStudy.article.dictIndex]
dictResourceUrl = `./dicts/${current.language}/${current.type}/${current.translateLanguage}/${current.url}`;
if (!current.articles.length) {
let s = await getDictFile(dictResourceUrl)
current.articles = cloneDeep(s.map(v => {
@@ -398,96 +351,10 @@ export const useBaseStore = defineStore('base', {
})
},
async changeDict(dict: Dict, practiceType?: DictType, chapterIndex?: number, wordIndex?: number) {
//TODO 保存统计
// this.saveStatistics()
console.log('changeDict', cloneDeep(dict), chapterIndex, wordIndex)
if (practiceType === undefined) this.current.practiceType = practiceType
if ([DictType.collect,
DictType.simple,
DictType.wrong].includes(dict.type)) {
} else {
//TODO 需要和其他需要下载的地方统一
let url = `./dicts/${dict.language}/${dict.type}/${dict.translateLanguage}/${dict.url}`;
if (dict.type === DictType.article) {
if (!dict.articles.length) {
let r = await fetch(url)
let v = await r.json()
v.map(s => {
s.id = nanoid(6)
})
dict.articles = cloneDeep(v)
} else {
dict.length = dict.articles.length
}
if (chapterIndex > dict.articles.length) {
}
} else {
//如果不是自定义词典并且有url地址才去下载
if (!dict.isCustom && dict.url) {
if (!dict.originWords.length) {
let v = await getDictFile(url)
v.map(s => {
s.id = nanoid(6)
})
dict.originWords = cloneDeep(v)
if (dict.sort === Sort.normal) {
dict.words = cloneDeep(dict.originWords)
} else if (dict.sort === Sort.random) {
dict.words = shuffle(dict.originWords)
} else {
dict.words = reverse(dict.originWords)
}
dict.words.map(v => v.checked = false)
dict.length = dict.words.length
} else {
dict.length = dict.words.length
}
}
}
}
// await checkDictHasTranslate(dict)
let rIndex = this.myDictList.findIndex((v: Dict) => v.id === dict.id)
if (rIndex > -1) {
this.myDictList[rIndex] = dict
this.current.index = rIndex
} else {
this.myDictList.push(cloneDeep(dict))
this.current.index = this.myDictList.length - 1
}
emitter.emit(EventKey.changeDict)
},
async changeWordDict(dict: Dict) {
if ([DictType.collect,
DictType.simple,
DictType.wrong].includes(dict.type)) {
} else {
//TODO 需要和其他需要下载的地方统一
let url = `./dicts/${dict.language}/${dict.type}/${dict.translateLanguage}/${dict.url}`;
//如果不是自定义词典并且有url地址才去下载
if (!dict.isCustom && dict.url) {
if (!dict.words.length) {
let v = await getDictFile(url)
v.map(s => {
s.id = nanoid(6)
})
if (dict.sort === Sort.normal) {
dict.words = cloneDeep(v)
} else if (dict.sort === Sort.random) {
dict.words = shuffle(v)
} else {
dict.words = reverse(v)
}
}
}
}
console.log('changeDict', cloneDeep(dict),)
this.wordDictList.map(v => {
v.words = []
})
// await checkDictHasTranslate(dict)
this.wordDictList.map((v) => v.words = [])
// await checkDictHasTranslate(newDict)
let rIndex = this.wordDictList.findIndex((v: Dict) => v.id === dict.id)
if (rIndex > -1) {
this.wordDictList[rIndex] = Object.assign(dict, this.wordDictList[rIndex])
@@ -496,7 +363,9 @@ export const useBaseStore = defineStore('base', {
this.wordDictList.push(getDefaultDict(dict))
this.currentStudy.word.dictIndex = this.wordDictList.length - 1
}
await _checkDictWords(this.currentStudyWordDict)
console.log(' store.currentStudyWordDict', this.currentStudyWordDict)
emitter.emit(EventKey.changeDict)
},
async changeArticleDict(dict: Dict) {
@@ -566,6 +435,7 @@ export const useBaseStore = defineStore('base', {
if (rIndex > -1) {
this.currentStudy.word.dictIndex = rIndex
}
}
},
},
})

View File

@@ -1,6 +1,5 @@
import {defineStore} from "pinia"
import {DefaultDict, Dict} from "@/types.ts";
import {cloneDeep} from "lodash-es";
import {Dict, getDefaultDict} from "@/types.ts";
export interface RuntimeState {
disableEventListener: boolean,
@@ -18,7 +17,7 @@ export const useRuntimeStore = defineStore('runtime', {
routeData: null,
disableEventListener: false,
modalList: [],
editDict: cloneDeep(DefaultDict),
editDict: getDefaultDict(),
showDictModal: false,
showSettingModal: false,
excludeRoutes: [],

View File

@@ -236,26 +236,6 @@ export const languageCategoryOptions = [
{id: 'my', name: '我的', flag: myFlag},
]
export const DefaultDict: Dict = {
id: '',
name: '',
description: '',
sort: Sort.normal,
words: [],
articles: [],
statistics: [],
isCustom: false,
length: 0,
/*资源属性*/
resourceId: '',
url: '',
category: '',
tags: [],
translateLanguage: 'common',
type: DictType.word,
language: 'en',
}
export function getDefaultDict(val = {}): Dict {
return {
id: '',
@@ -288,7 +268,6 @@ export interface Dict {
perDayStudyNumber: number,
description: string,
sort: Sort,
originWords: Word[],//原始单词
words: Word[],
articles: Article[],
statistics: Statistics[],

View File

@@ -30,4 +30,14 @@ export function useEvent(key: string, func: () => void) {
onUnmounted(() => {
emitter.off(key, func)
})
}
export function useEvents(arrs: any[],) {
onMounted(() => {
arrs.map((arr) => emitter.on(arr[0], arr[1]))
})
onUnmounted(() => {
arrs.map((arr) => emitter.off(arr[0], arr[1]))
})
}

View File

@@ -6,6 +6,8 @@ import {Dict, DictType} from "@/types.ts";
import {ArchiveReader, libarchiveWasm} from "libarchive-wasm";
import {useRouter} from "vue-router";
import {useRuntimeStore} from "@/stores/runtime.ts";
import {nanoid} from "nanoid";
import dayjs from 'dayjs'
export function getRandom(a: number, b: number): number {
return Math.random() * (b - a) + a;
@@ -45,41 +47,8 @@ export function checkAndUpgradeSaveDict(val: any) {
}
return defaultBaseState
} else {
if (version <= 3) {
// if (false) {
let temp = (list: any[]): any[] => {
return list.map(a => {
return {
word: a.name,
trans: a.trans.map(b => {
return {
cn: b,
}
}),
phonetic0: a.usphone,
phonetic1: a.ukphone,
}
})
}
state.myDictList.map(v => {
if ([DictType.collect, DictType.simple, DictType.wrong].includes(v.type)) {
v.originWords = temp(v.originWords)
if (v.words) v.words = temp(v.words)
v.chapterWords.map((s, i) => {
v.chapterWords[i] = temp(s)
})
} else {
if (v.isCustom) {
if (v.type === DictType.word) {
v.originWords = temp(v.originWords)
if (v.words) v.words = temp(v.words)
v.chapterWords.map((s, i) => {
v.chapterWords[i] = temp(s)
})
}
}
}
})
if (version <= 4) {
state = defaultBaseState
}
//防止人为删除数据,导致数据不完整报错
for (const [key, value] of Object.entries(defaultBaseState)) {
@@ -236,4 +205,33 @@ export function _dateFormat(val, type?): string {
default:
return `${year}-${mStr}-${dayStr} ${hStr}:${minStr}:${secStr}`
}
}
export async function _checkDictWords(dict: Dict) {
if ([DictType.collect,
DictType.simple,
DictType.wrong].includes(dict.type)) {
} else {
//TODO 需要和其他需要下载的地方统一
let url = `./dicts/${dict.language}/${dict.type}/${dict.translateLanguage}/${dict.url}`;
//如果不是自定义词典并且有url地址才去下载
if (!dict.isCustom && dict.url) {
if (!dict.words.length) {
let v = await getDictFile(url)
v.map(s => {
s.id = nanoid(6)
})
dict.words = Object.freeze(v)
}
}
}
}
export function _getAccomplishDays(total: number, dayNumber: number) {
return Math.ceil(total / dayNumber)
}
export function _getAccomplishDate(total: number, dayNumber: number) {
let d = _getAccomplishDays(total, dayNumber)
return dayjs().add(d, 'day').format('YYYY-MM-DD')
}