diff --git a/components.d.ts b/components.d.ts index 9fc75307..3ed930b1 100644 --- a/components.d.ts +++ b/components.d.ts @@ -44,6 +44,7 @@ declare module 'vue' { IconFluentArrowLeft16Regular: typeof import('~icons/fluent/arrow-left16-regular')['default'] IconFluentArrowMove20Regular: typeof import('~icons/fluent/arrow-move20-regular')['default'] IconFluentArrowRight16Regular: typeof import('~icons/fluent/arrow-right16-regular')['default'] + IconFluentArrowShuffle16Regular: typeof import('~icons/fluent/arrow-shuffle16-regular')['default'] IconFluentArrowSort20Regular: typeof import('~icons/fluent/arrow-sort20-regular')['default'] IconFluentBookLetter20Regular: typeof import('~icons/fluent/book-letter20-regular')['default'] IconFluentCheckmark20Regular: typeof import('~icons/fluent/checkmark20-regular')['default'] diff --git a/package.json b/package.json index 4cada8f7..306fd8a8 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "i18n:write": "gulp i18nwrite", "deploy-oss": "node scripts/deploy-oss.js" }, + "type": "module", "dependencies": { "@imengyu/vue3-context-menu": "^1.5.1", "axios": "^1.10.0", diff --git a/src/components/list/WordList.vue b/src/components/list/WordList.vue index 46637238..3d068536 100644 --- a/src/components/list/WordList.vue +++ b/src/components/list/WordList.vue @@ -47,7 +47,8 @@ defineExpose({scrollToBottom, scrollToItem}) diff --git a/src/pages/setting/Setting.vue b/src/pages/setting/Setting.vue index 3ffc53ae..f1af2864 100644 --- a/src/pages/setting/Setting.vue +++ b/src/pages/setting/Setting.vue @@ -152,7 +152,9 @@ function getShortcutKeyName(key: string): string { 'ToggleDictation': '切换默写模式', 'ToggleTheme': '切换主题', 'ToggleConciseMode': '切换简洁模式', - 'TogglePanel': '切换面板' + 'TogglePanel': '切换面板', + 'RandomWrite': '随机默写', + 'NextRandomWrite': '继续随机默写' } return shortcutKeyNameMap[key] || key diff --git a/src/pages/word/PracticeWords.vue b/src/pages/word/PracticeWords.vue index 0aacca14..1630202c 100644 --- a/src/pages/word/PracticeWords.vue +++ b/src/pages/word/PracticeWords.vue @@ -57,6 +57,8 @@ let data = $ref({ wrongWords: [], }) +let isRandomWrite = false; + async function loadDict() { // console.log('load好了开始加载') let dict = getDefaultDict() @@ -229,7 +231,8 @@ function next(isTyping: boolean = true) { //开始默写新词 if (statStore.step === 0) { - if (settingStore.wordPracticeMode === 1) { + if (settingStore.wordPracticeMode === 1 || isRandomWrite) { + isRandomWrite = false console.log('自由模式,全完学完了') showStatDialog = true localStorage.removeItem(PracticeSaveWordKey.key) @@ -380,9 +383,24 @@ function continueStudy() { initData(getCurrentStudyWord()) } +function randomWrite() { + console.log('随机默写') + data.words = shuffle(data.words); + data.index = 0 + settingStore.dictation = true + isRandomWrite = true +} +function nextRandomWrite() { + console.log('继续随机默写') + initData(getCurrentStudyWord()) + randomWrite(); + showStatDialog = false +} + useEvents([ [EventKey.repeatStudy, repeat], [EventKey.continueStudy, continueStudy], + [EventKey.randomWrite, nextRandomWrite], [EventKey.changeDict, () => { initData(getCurrentStudyWord()) }], @@ -401,6 +419,8 @@ useEvents([ [ShortcutKey.ToggleTheme, toggleTheme], [ShortcutKey.ToggleConciseMode, toggleConciseMode], [ShortcutKey.TogglePanel, togglePanel], + [ShortcutKey.RandomWrite, randomWrite], + [ShortcutKey.NextRandomWrite, nextRandomWrite], ]) @@ -453,6 +473,11 @@ useEvents([ :title="`下一组(${settingStore.shortcutKeyMap[ShortcutKey.NextChapter]})`"> + + +
diff --git a/src/pages/word/Statistics.vue b/src/pages/word/Statistics.vue index ca090289..f6a5cafe 100644 --- a/src/pages/word/Statistics.vue +++ b/src/pages/word/Statistics.vue @@ -168,6 +168,11 @@ function options(emitType: string) { @click="options(EventKey.continueStudy)"> {{ dictIsEnd ? '重新练习' : '再来一组' }} + + 继续默写 + 返回主页 diff --git a/src/types/types.ts b/src/types/types.ts index 0f2cca47..68b2bd7e 100644 --- a/src/types/types.ts +++ b/src/types/types.ts @@ -115,7 +115,9 @@ export enum ShortcutKey { ToggleDictation = 'ToggleDictation', ToggleTheme = 'ToggleTheme', ToggleConciseMode = 'ToggleConciseMode', - TogglePanel = 'TogglePanel' + TogglePanel = 'TogglePanel', + RandomWrite = 'RandomWrite', + NextRandomWrite = 'NextRandomWrite' } export const DefaultShortcutKeyMap = { @@ -135,6 +137,8 @@ export const DefaultShortcutKeyMap = { [ShortcutKey.ToggleTheme]: 'Ctrl+Q', [ShortcutKey.ToggleConciseMode]: 'Ctrl+M', [ShortcutKey.TogglePanel]: 'Ctrl+L', + [ShortcutKey.RandomWrite]: 'Ctrl+R', + [ShortcutKey.NextRandomWrite]: 'Ctrl+Shift+R', } export enum TranslateEngine { diff --git a/src/utils/eventBus.ts b/src/utils/eventBus.ts index 4ce756ce..6fb47c48 100644 --- a/src/utils/eventBus.ts +++ b/src/utils/eventBus.ts @@ -17,6 +17,7 @@ export const EventKey = { editDict: 'editDict', openMyDictDialog: 'openMyDictDialog', stateInitEnd: 'stateInitEnd', + randomWrite: 'randomWrite', } export function useEvent(key: string, func: any) {