2 Commits
master ... dev

Author SHA1 Message Date
Zyronon
91b66ee453 Merge branch 'master' into dev 2026-01-09 23:51:05 +08:00
Zyronon
1f3952a34c wip 2026-01-09 01:10:10 +08:00
26 changed files with 73 additions and 73 deletions

38
components.d.ts vendored
View File

@@ -9,7 +9,7 @@ export {}
declare module 'vue' {
export interface GlobalComponents {
About: typeof import('./src/components/About.vue')['default']
ArticleAudio: typeof import('./src/components/article/components/ArticleAudio.vue')['default']
ArticleAudio: typeof import('./src/components/article/ArticleAudio.vue')['default']
ArticleList: typeof import('./src/components/list/ArticleList.vue')['default']
ArticleSetting: typeof import('./src/components/setting/ArticleSetting.vue')['default']
Audio: typeof import('./src/components/base/Audio.vue')['default']
@@ -21,7 +21,7 @@ declare module 'vue' {
BasePage: typeof import('./src/components/BasePage.vue')['default']
BaseTable: typeof import('./src/components/BaseTable.vue')['default']
Book: typeof import('./src/components/Book.vue')['default']
ChangeLastPracticeIndexDialog: typeof import('./src/components/word/components/ChangeLastPracticeIndexDialog.vue')['default']
ChangeLastPracticeIndexDialog: typeof import('./src/components/word/ChangeLastPracticeIndexDialog.vue')['default']
ChannelIcons: typeof import('./src/components/ChannelIcons/ChannelIcons.vue')['default']
Checkbox: typeof import('./src/components/base/checkbox/Checkbox.vue')['default']
Close: typeof import('./src/components/icon/Close.vue')['default']
@@ -35,15 +35,15 @@ declare module 'vue' {
DictGroup: typeof import('./src/components/list/DictGroup.vue')['default']
DictList: typeof import('./src/components/list/DictList.vue')['default']
EditAbleText: typeof import('./src/components/EditAbleText.vue')['default']
EditArticle: typeof import('./src/components/article/components/EditArticle.vue')['default']
EditBook: typeof import('./src/components/article/components/EditBook.vue')['default']
EditSingleArticleModal: typeof import('./src/components/article/components/EditSingleArticleModal.vue')['default']
EditArticle: typeof import('./src/components/article/EditArticle.vue')['default']
EditBook: typeof import('./src/components/article/EditBook.vue')['default']
EditSingleArticleModal: typeof import('./src/components/article/EditSingleArticleModal.vue')['default']
Empty: typeof import('./src/components/Empty.vue')['default']
Footer: typeof import('./src/components/word/components/Footer.vue')['default']
Footer: typeof import('./src/components/word/Footer.vue')['default']
Form: typeof import('./src/components/base/form/Form.vue')['default']
FormItem: typeof import('./src/components/base/form/FormItem.vue')['default']
Github: typeof import('./src/components/ChannelIcons/Github.vue')['default']
GroupList: typeof import('./src/components/word/components/GroupList.vue')['default']
GroupList: typeof import('./src/components/word/GroupList.vue')['default']
Header: typeof import('./src/components/Header.vue')['default']
IconBxVolume: typeof import('~icons/bx/volume')['default']
IconBxVolumeFull: typeof import('~icons/bx/volume-full')['default']
@@ -156,39 +156,39 @@ declare module 'vue' {
Panel: typeof import('./src/components/Panel.vue')['default']
PopConfirm: typeof import('./src/components/PopConfirm.vue')['default']
PracticeLayout: typeof import('./src/components/PracticeLayout.vue')['default']
PracticeSettingDialog: typeof import('./src/components/word/components/PracticeSettingDialog.vue')['default']
PracticeWordListDialog: typeof import('./src/components/word/components/PracticeWordListDialog.vue')['default']
PracticeSettingDialog: typeof import('./src/components/word/PracticeSettingDialog.vue')['default']
PracticeWordListDialog: typeof import('./src/components/word/PracticeWordListDialog.vue')['default']
Progress: typeof import('./src/components/base/Progress.vue')['default']
QuestionForm: typeof import('./src/components/article/components/QuestionForm.vue')['default']
QuestionItem: typeof import('./src/components/article/components/QuestionItem.vue')['default']
QuestionForm: typeof import('./src/components/article/QuestionForm.vue')['default']
QuestionItem: typeof import('./src/components/article/QuestionItem.vue')['default']
Radio: typeof import('./src/components/base/radio/Radio.vue')['default']
RadioGroup: typeof import('./src/components/base/radio/RadioGroup.vue')['default']
ResourceCard: typeof import('./src/components/ResourceCard.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
Select: typeof import('./src/components/base/select/Select.vue')['default']
SentenceHightLightWord: typeof import('./src/components/word/components/SentenceHightLightWord.vue')['default']
SentenceHightLightWord: typeof import('./src/components/word/SentenceHightLightWord.vue')['default']
SettingDialog: typeof import('./src/components/setting/SettingDialog.vue')['default']
SettingItem: typeof import('./src/components/setting/SettingItem.vue')['default']
ShareIcon: typeof import('./src/components/ChannelIcons/ShareIcon.vue')['default']
ShufflePracticeSettingDialog: typeof import('./src/components/word/components/ShufflePracticeSettingDialog.vue')['default']
ShufflePracticeSettingDialog: typeof import('./src/components/word/ShufflePracticeSettingDialog.vue')['default']
Slide: typeof import('./src/components/Slide.vue')['default']
SlideHorizontal: typeof import('./src/components/slide/SlideHorizontal.vue')['default']
SlideItem: typeof import('./src/components/slide/SlideItem.vue')['default']
Slider: typeof import('./src/components/base/Slider.vue')['default']
Space: typeof import('./src/components/article/components/Space.vue')['default']
Space: typeof import('./src/components/article/Space.vue')['default']
StageProgress: typeof import('./src/components/StageProgress.vue')['default']
Statistics: typeof import('./src/components/word/components/Statistics.vue')['default']
Statistics: typeof import('./src/components/word/Statistics.vue')['default']
Switch: typeof import('./src/components/base/Switch.vue')['default']
Textarea: typeof import('./src/components/base/Textarea.vue')['default']
Toast: typeof import('./src/components/base/toast/Toast.vue')['default']
ToastComponent: typeof import('./src/components/base/toast/ToastComponent.vue')['default']
Tooltip: typeof import('./src/components/base/Tooltip.vue')['default']
TypeWord: typeof import('./src/components/word/components/TypeWord.vue')['default']
TypingArticle: typeof import('./src/components/article/components/TypingArticle.vue')['default']
TypingWord: typeof import('./src/components/article/components/TypingWord.vue')['default']
TypeWord: typeof import('./src/components/word/TypeWord.vue')['default']
TypingArticle: typeof import('./src/components/article/TypingArticle.vue')['default']
TypingWord: typeof import('./src/components/article/TypingWord.vue')['default']
VolumeIcon: typeof import('./src/components/icon/VolumeIcon.vue')['default']
VolumeSettingMiniDialog: typeof import('./src/components/word/components/VolumeSettingMiniDialog.vue')['default']
VolumeSettingMiniDialog: typeof import('./src/components/word/VolumeSettingMiniDialog.vue')['default']
WeChat: typeof import('./src/components/ChannelIcons/WeChat.vue')['default']
WordItem: typeof import('./src/components/WordItem.vue')['default']
WordList: typeof import('./src/components/list/WordList.vue')['default']

View File

@@ -17,7 +17,7 @@ import Tooltip from '@/components/base/Tooltip.vue'
import InputNumber from '@/components/base/InputNumber.vue'
import { nanoid } from 'nanoid'
import { update } from 'idb-keyval'
import ArticleAudio from '@/components/article/components/ArticleAudio.vue'
import ArticleAudio from '@/components/article/ArticleAudio.vue'
import BaseInput from '@/components/base/BaseInput.vue'
import Textarea from '@/components/base/Textarea.vue'
import { LOCAL_FILE_KEY } from '@/config/env.ts'

View File

@@ -2,7 +2,7 @@
import type {Article} from "@/types/types.ts";
import {useDisableEventListener} from "@/hooks/event.ts";
import EditArticle from "@/components/article/components/EditArticle.vue";
import EditArticle from "@/components/article/EditArticle.vue";
import {getDefaultArticle} from "@/types/func.ts";
import {defineAsyncComponent} from "vue";

View File

@@ -1,26 +1,26 @@
<script setup lang="ts">
import Toast from '@/components/base/toast/Toast'
import Toast from '@/components/base/toast/Toast.ts'
import BaseButton from '@/components/BaseButton.vue'
import { useWordOptions } from '@/hooks/dict'
import { usePlayBeep, usePlayKeyboardAudio, usePlayWordAudio } from '@/hooks/sound'
import QuestionForm from '@/components/article/components/QuestionForm.vue'
import Space from '@/components/article/components/Space.vue'
import TypingWord from '@/components/article/components/TypingWord.vue'
import { useBaseStore } from '@/stores/base'
import { usePracticeStore } from '@/stores/practice'
import { useSettingStore } from '@/stores/setting'
import { getDefaultArticle, getDefaultWord } from '@/types/func'
import type { Article, ArticleWord, Sentence, Word } from '@/types/types'
import { useWordOptions } from '@/hooks/dict.ts'
import { usePlayBeep, usePlayKeyboardAudio, usePlayWordAudio } from '@/hooks/sound.ts'
import QuestionForm from '@/components/article/QuestionForm.vue'
import Space from '@/components/article/Space.vue'
import TypingWord from '@/components/article/TypingWord.vue'
import { useBaseStore } from '@/stores/base.ts'
import { usePracticeStore } from '@/stores/practice.ts'
import { useSettingStore } from '@/stores/setting.ts'
import { getDefaultArticle, getDefaultWord } from '@/types/func.ts'
import type { Article, ArticleWord, Sentence, Word } from '@/types/types.ts'
import { _dateFormat, _nextTick, isMobile, msToHourMinute, total } from '@/utils'
import { emitter, EventKey, useEvents } from '@/utils/eventBus'
import { emitter, EventKey, useEvents } from '@/utils/eventBus.ts'
import ContextMenu from '@imengyu/vue3-context-menu'
import '@imengyu/vue3-context-menu/lib/vue3-context-menu.css'
import nlp from 'compromise/three'
import { nanoid } from 'nanoid'
import { inject, onMounted, onUnmounted, watch } from 'vue'
import { getPracticeArticleCache, setPracticeArticleCache } from '@/utils/cache'
import { PracticeArticleWordType, ShortcutKey } from '@/types/enum'
import { getPracticeArticleCache, setPracticeArticleCache } from '@/utils/cache.ts'
import { PracticeArticleWordType, ShortcutKey } from '@/types/enum.ts'
interface IProps {
article: Article

View File

@@ -1,6 +1,6 @@
<script setup lang="tsx">
import {useSettingStore} from "@/stores/setting.ts";
import Space from "@/components/article/components/Space.vue";
import Space from "@/components/article/Space.vue";
import {PracticeArticleWordType} from "@/types/enum.ts";
import type {ArticleWord} from "@/types/types.ts";

View File

@@ -1,17 +1,17 @@
<script setup lang="ts">
import { inject, Ref } from 'vue'
import { usePracticeStore } from '@/stores/practice'
import { useSettingStore } from '@/stores/setting'
import type { PracticeData, TaskWords } from '@/types/types'
import { usePracticeStore } from '@/stores/practice.ts'
import { useSettingStore } from '@/stores/setting.ts'
import type { PracticeData, TaskWords } from '@/types/types.ts'
import BaseIcon from '@/components/BaseIcon.vue'
import Tooltip from '@/components/base/Tooltip.vue'
import SettingDialog from '@/components/setting/SettingDialog.vue'
import BaseButton from '@/components/BaseButton.vue'
import { useBaseStore } from '@/stores/base'
import VolumeSettingMiniDialog from '@/components/word/components/VolumeSettingMiniDialog.vue'
import { useBaseStore } from '@/stores/base.ts'
import VolumeSettingMiniDialog from '@/components/word/VolumeSettingMiniDialog.vue'
import StageProgress from '@/components/StageProgress.vue'
import { ShortcutKey, WordPracticeMode, WordPracticeStage } from '@/types/enum'
import { WordPracticeModeNameMap, WordPracticeModeStageMap, WordPracticeStageNameMap } from '@/config/env'
import { ShortcutKey, WordPracticeMode, WordPracticeStage } from '@/types/enum.ts'
import { WordPracticeModeNameMap, WordPracticeModeStageMap, WordPracticeStageNameMap } from '@/config/env.ts'
const statStore = usePracticeStore()
const store = useBaseStore()

View File

@@ -4,11 +4,11 @@ import BaseButton from '@/components/BaseButton.vue'
import Checkbox from '@/components/base/checkbox/Checkbox.vue'
import Slider from '@/components/base/Slider.vue'
import { defineAsyncComponent, watch } from 'vue'
import { useSettingStore } from '@/stores/setting'
import Toast from '@/components/base/toast/Toast'
import ChangeLastPracticeIndexDialog from '@/components/word/components/ChangeLastPracticeIndexDialog.vue'
import { useSettingStore } from '@/stores/setting.ts'
import Toast from '@/components/base/toast/Toast.ts'
import ChangeLastPracticeIndexDialog from '@/components/word/ChangeLastPracticeIndexDialog.vue'
import Tooltip from '@/components/base/Tooltip.vue'
import { useRuntimeStore } from '@/stores/runtime'
import { useRuntimeStore } from '@/stores/runtime.ts'
import BaseInput from '@/components/base/BaseInput.vue'
import InputNumber from '@/components/base/InputNumber.vue'

View File

@@ -1,19 +1,19 @@
<script setup lang="ts">
import type { Word } from '@/types/types'
import type { Word } from '@/types/types.ts'
import VolumeIcon from '@/components/icon/VolumeIcon.vue'
import { useSettingStore } from '@/stores/setting'
import { usePlayBeep, usePlayCorrect, usePlayKeyboardAudio, usePlayWordAudio } from '@/hooks/sound'
import { emitter, EventKey, useEvents } from '@/utils/eventBus'
import { useSettingStore } from '@/stores/setting.ts'
import { usePlayBeep, usePlayCorrect, usePlayKeyboardAudio, usePlayWordAudio } from '@/hooks/sound.ts'
import { emitter, EventKey, useEvents } from '@/utils/eventBus.ts'
import { onMounted, onUnmounted, watch } from 'vue'
import SentenceHightLightWord from '@/components/word/components/SentenceHightLightWord.vue'
import { usePracticeStore } from '@/stores/practice'
import { getDefaultWord } from '@/types/func'
import SentenceHightLightWord from '@/components/word/SentenceHightLightWord.vue'
import { usePracticeStore } from '@/stores/practice.ts'
import { getDefaultWord } from '@/types/func.ts'
import { _nextTick, last } from '@/utils'
import BaseButton from '@/components/BaseButton.vue'
import Space from '@/components/article/components/Space.vue'
import Toast from '@/components/base/toast/Toast'
import Space from '@/components/article/Space.vue'
import Toast from '@/components/base/toast/Toast.ts'
import Tooltip from '@/components/base/Tooltip.vue'
import { ShortcutKey, WordPracticeStage, WordPracticeType } from '@/types/enum'
import { ShortcutKey, WordPracticeStage, WordPracticeType } from '@/types/enum.ts'
interface IProps {
word: Word

View File

@@ -9,7 +9,7 @@ import { useWindowClick } from '@/hooks/event.ts'
import { MessageBox } from '@/utils/MessageBox.tsx'
import { useRuntimeStore } from '@/stores/runtime.ts'
import { nanoid } from 'nanoid'
import EditArticle from '@/components/article/components/EditArticle.vue'
import EditArticle from '@/components/article/EditArticle.vue'
import Toast from '@/components/base/toast/Toast.ts'
import { getDefaultArticle } from '@/types/func.ts'
import BackIcon from '@/components/BackIcon.vue'

View File

@@ -7,12 +7,12 @@ import type { Article, Dict } from '@/types/types'
import { useRuntimeStore } from '@/stores/runtime.ts'
import BaseButton from '@/components/BaseButton.vue'
import { useRoute, useRouter } from 'vue-router'
import EditBook from '@/components/article/components/EditBook.vue'
import EditBook from '@/components/article/EditBook.vue'
import { computed, onMounted, onUnmounted, watch } from 'vue'
import { _dateFormat, _getDictDataByUrl, _nextTick, msToHourMinute, resourceWrap, total, useNav } from '@/utils'
import { getDefaultArticle, getDefaultDict } from '@/types/func.ts'
import Toast from '@/components/base/toast/Toast.ts'
import ArticleAudio from '@/components/article/components/ArticleAudio.vue'
import ArticleAudio from '@/components/article/ArticleAudio.vue'
import { MessageBox } from '@/utils/MessageBox.tsx'
import { useSettingStore } from '@/stores/setting.ts'
import { useFetch } from '@vueuse/core'

View File

@@ -13,9 +13,9 @@ import { genArticleSectionData, usePlaySentenceAudio } from '@/hooks/article.ts'
import { useArticleOptions } from '@/hooks/dict.ts'
import { useDisableEventListener, useOnKeyboardEventListener, useStartKeyboardEventListener } from '@/hooks/event.ts'
import useTheme from '@/hooks/theme.ts'
import ArticleAudio from '@/components/article/components/ArticleAudio.vue'
import EditSingleArticleModal from '@/components/article/components/EditSingleArticleModal.vue'
import TypingArticle from '@/components/article/components/TypingArticle.vue'
import ArticleAudio from '@/components/article/ArticleAudio.vue'
import EditSingleArticleModal from '@/components/article/EditSingleArticleModal.vue'
import TypingArticle from '@/components/article/TypingArticle.vue'
import { useBaseStore } from '@/stores/base.ts'
import { usePracticeStore } from '@/stores/practice.ts'
import { useRuntimeStore } from '@/stores/runtime.ts'

View File

@@ -15,8 +15,8 @@ import Toast from '@/components/base/toast/Toast.ts'
import DeleteIcon from '@/components/icon/DeleteIcon.vue'
import { AppEnv, DictId, LIB_JS_URL, TourConfig } from '@/config/env.ts'
import { getCurrentStudyWord } from '@/hooks/dict.ts'
import EditBook from '@/components/article/components/EditBook.vue'
import PracticeSettingDialog from '@/components/word/components/PracticeSettingDialog.vue'
import EditBook from '@/components/article/EditBook.vue'
import PracticeSettingDialog from '@/components/word/PracticeSettingDialog.vue'
import { useBaseStore } from '@/stores/base.ts'
import { useRuntimeStore } from '@/stores/runtime.ts'
import { useSettingStore } from '@/stores/setting.ts'

View File

@@ -1,7 +1,7 @@
<script setup lang="ts">
import { onMounted, onUnmounted, provide, ref, watch } from 'vue'
import Statistics from '@/components/word/components/Statistics.vue'
import Statistics from '@/components/word/Statistics.vue'
import { emitter, EventKey, useEvents } from '@/utils/eventBus.ts'
import { useSettingStore } from '@/stores/setting.ts'
import { useRuntimeStore } from '@/stores/runtime.ts'
@@ -11,12 +11,12 @@ import useTheme from '@/hooks/theme.ts'
import { getCurrentStudyWord, useWordOptions } from '@/hooks/dict.ts'
import { _getDictDataByUrl, _nextTick, cloneDeep, isMobile, loadJsLib, resourceWrap, shuffle } from '@/utils'
import { useRoute, useRouter } from 'vue-router'
import Footer from '@/components/word/components/Footer.vue'
import Footer from '@/components/word/Footer.vue'
import Panel from '@/components/Panel.vue'
import BaseIcon from '@/components/BaseIcon.vue'
import Tooltip from '@/components/base/Tooltip.vue'
import WordList from '@/components/list/WordList.vue'
import TypeWord from '@/components/word/components/TypeWord.vue'
import TypeWord from '@/components/word/TypeWord.vue'
import Empty from '@/components/Empty.vue'
import { useBaseStore } from '@/stores/base.ts'
import { usePracticeStore } from '@/stores/practice.ts'
@@ -29,7 +29,7 @@ import { AppEnv, DICT_LIST, LIB_JS_URL, TourConfig, WordPracticeModeStageMap } f
import { ToastInstance } from '@/components/base/toast/type.ts'
import { watchOnce } from '@vueuse/core'
import { setUserDictProp } from '@/apis'
import GroupList from '@/components/word/components/GroupList.vue'
import GroupList from '@/components/word/GroupList.vue'
import { getPracticeWordCache, setPracticeWordCache } from '@/utils/cache.ts'
import { ShortcutKey, WordPracticeMode, WordPracticeStage, WordPracticeType } from '@/types/enum.ts'

View File

@@ -24,14 +24,14 @@ import Toast from '@/components/base/toast/Toast.ts'
import BaseButton from '@/components/BaseButton.vue'
import { getDefaultDict } from '@/types/func.ts'
import DeleteIcon from '@/components/icon/DeleteIcon.vue'
import PracticeSettingDialog from '@/components/word/components/PracticeSettingDialog.vue'
import ChangeLastPracticeIndexDialog from '@/components/word/components/ChangeLastPracticeIndexDialog.vue'
import PracticeSettingDialog from '@/components/word/PracticeSettingDialog.vue'
import ChangeLastPracticeIndexDialog from '@/components/word/ChangeLastPracticeIndexDialog.vue'
import { useSettingStore } from '@/stores/setting.ts'
import { useFetch } from '@vueuse/core'
import { AppEnv, DICT_LIST, Host, LIB_JS_URL, Origin, TourConfig, WordPracticeModeNameMap } from '@/config/env.ts'
import { myDictList } from '@/apis'
import PracticeWordListDialog from '@/components/word/components/PracticeWordListDialog.vue'
import ShufflePracticeSettingDialog from '@/components/word/components/ShufflePracticeSettingDialog.vue'
import PracticeWordListDialog from '@/components/word/PracticeWordListDialog.vue'
import ShufflePracticeSettingDialog from '@/components/word/ShufflePracticeSettingDialog.vue'
import { deleteDict } from '@/apis/dict.ts'
import OptionButton from '@/components/base/OptionButton.vue'
import { getPracticeWordCache, setPracticeWordCache } from '@/utils/cache.ts'