diff --git a/components.d.ts b/components.d.ts
index af5bcef8..51d9ae36 100644
--- a/components.d.ts
+++ b/components.d.ts
@@ -43,29 +43,31 @@ declare module 'vue' {
Empty: typeof import('./src/components/Empty.vue')['default']
FeedbackModal: typeof import('./src/components/toolbar/FeedbackModal.vue')['default']
Fireworks: typeof import('./src/components/Fireworks.vue')['default']
- Footer: typeof import('./src/components/Practice/Footer.vue')['default']
+ Footer: typeof import('./src/pages/practice/Footer.vue')['default']
IconWrapper: typeof import('./src/components/IconWrapper.vue')['default']
Input: typeof import('./src/components/Input.vue')['default']
List: typeof import('./src/components/list/List.vue')['default']
ListItem: typeof import('./src/components/list/ListItem.vue')['default']
MiniDialog: typeof import('./src/components/dialog/MiniDialog.vue')['default']
- Options: typeof import('./src/components/Practice/Options.vue')['default']
- Panel: typeof import('./src/components/Practice/Panel.vue')['default']
+ Options: typeof import('./src/pages/practice/Options.vue')['default']
+ Panel: typeof import('./src/pages/practice/Panel.vue')['default']
PopConfirm: typeof import('./src/components/PopConfirm.vue')['default']
- Practice: typeof import('./src/components/Practice/index.vue')['default']
- PracticeArticle: typeof import('./src/components/Practice/practice-article/index.vue')['default']
- PracticeWord: typeof import('./src/components/Practice/practice-word/index.vue')['default']
+ Practice: typeof import('./src/pages/practice/index.vue')['default']
+ PracticeArticle: typeof import('./src/pages/practice/practice-article/index.vue')['default']
+ PracticeWord: typeof import('./src/pages/practice/practice-word/index.vue')['default']
RepeatSetting: typeof import('./src/components/toolbar/RepeatSetting.vue')['default']
Ring: typeof import('./src/components/Ring.vue')['default']
+ RouterLink: typeof import('vue-router')['RouterLink']
+ RouterView: typeof import('vue-router')['RouterView']
SettingDialog: typeof import('./src/components/dialog/SettingDialog.vue')['default']
Slide: typeof import('./src/components/Slide.vue')['default']
- Statistics: typeof import('./src/components/Practice/Statistics.vue')['default']
+ Statistics: typeof import('./src/pages/practice/Statistics.vue')['default']
Toolbar: typeof import('./src/components/toolbar/index.vue')['default']
Tooltip: typeof import('./src/components/Tooltip.vue')['default']
TranslateSetting: typeof import('./src/components/toolbar/TranslateSetting.vue')['default']
- Typing: typeof import('./src/components/Practice/practice-word/Typing.vue')['default']
- TypingArticle: typeof import('./src/components/Practice/practice-article/TypingArticle.vue')['default']
- TypingWord: typeof import('./src/components/Practice/practice-word/TypingWord.vue')['default']
+ Typing: typeof import('./src/pages/practice/practice-word/Typing.vue')['default']
+ TypingArticle: typeof import('./src/pages/practice/practice-article/TypingArticle.vue')['default']
+ TypingWord: typeof import('./src/pages/practice/practice-word/TypingWord.vue')['default']
VirtualWordList: typeof import('./src/components/list/VirtualWordList.vue')['default']
VolumeIcon: typeof import('./src/components/icon/VolumeIcon.vue')['default']
VolumeSetting: typeof import('./src/components/toolbar/VolumeSetting.vue')['default']
diff --git a/package.json b/package.json
index 9aaf5360..a55bd44a 100644
--- a/package.json
+++ b/package.json
@@ -36,6 +36,7 @@
"vue": "^3.3.4",
"vue-activity-calendar": "^1.2.2",
"vue-i18n": "9",
+ "vue-router": "4",
"vue-virtual-list-v3": "^1.5.1"
},
"devDependencies": {
@@ -47,6 +48,8 @@
"@vue/compiler-sfc": "^3.3.4",
"commitizen": "^4.3.0",
"cz-conventional-changelog": "^3.3.0",
+ "esm": "^3.2.25",
+ "gulp": "^4.0.2",
"husky": "^8.0.3",
"push-dir": "^0.4.1",
"rollup-plugin-visualizer": "^5.9.2",
@@ -57,8 +60,6 @@
"unplugin-vue-components": "^0.25.2",
"vite": "^4.4.5",
"vue-tsc": "^1.8.5",
- "esm": "^3.2.25",
- "gulp": "^4.0.2",
"xlsx": "^0.18.5"
},
"config": {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index bd124d58..d2f7b80f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -65,6 +65,9 @@ dependencies:
vue-i18n:
specifier: '9'
version: 9.6.5(vue@3.3.4)
+ vue-router:
+ specifier: '4'
+ version: 4.2.5(vue@3.3.4)
vue-virtual-list-v3:
specifier: ^1.5.1
version: 1.5.1
@@ -5077,6 +5080,15 @@ packages:
vue: 3.3.4
dev: false
+ /vue-router@4.2.5(vue@3.3.4):
+ resolution: {integrity: sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==}
+ peerDependencies:
+ vue: ^3.2.0
+ dependencies:
+ '@vue/devtools-api': 6.5.0
+ vue: 3.3.4
+ dev: false
+
/vue-template-compiler@2.7.14:
resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==}
dependencies:
diff --git a/src/App.vue b/src/App.vue
index 34bc04ea..5a7ef85a 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -3,7 +3,7 @@
import {onMounted, watch} from "vue";
import {BaseState, useBaseStore} from "@/stores/base.ts";
import {DictType, SaveConfig, SaveDict} from "@/types.ts"
-import Practice from "@/components/Practice/index.vue"
+import Practice from "@/pages/practice/index.vue"
import {useRuntimeStore} from "@/stores/runtime.ts";
import {useSettingStore} from "@/stores/setting.ts";
import {cloneDeep} from "lodash-es";
@@ -65,9 +65,7 @@ onMounted(() => {
-
+
\ No newline at end of file
diff --git a/src/components/Practice/Footer.vue b/src/pages/practice/Footer.vue
similarity index 100%
rename from src/components/Practice/Footer.vue
rename to src/pages/practice/Footer.vue
diff --git a/src/components/Practice/Options.vue b/src/pages/practice/Options.vue
similarity index 100%
rename from src/components/Practice/Options.vue
rename to src/pages/practice/Options.vue
diff --git a/src/components/Practice/Panel.vue b/src/pages/practice/Panel.vue
similarity index 99%
rename from src/components/Practice/Panel.vue
rename to src/pages/practice/Panel.vue
index 4b120dce..3dcdc45b 100644
--- a/src/components/Practice/Panel.vue
+++ b/src/pages/practice/Panel.vue
@@ -213,7 +213,7 @@ const {