wip
This commit is contained in:
24
components.d.ts
vendored
24
components.d.ts
vendored
@@ -9,6 +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']
|
||||
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']
|
||||
@@ -20,9 +21,11 @@ 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']
|
||||
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']
|
||||
Code: typeof import('./src/components/user/Code.vue')['default']
|
||||
Collapse: typeof import('./src/components/base/Collapse.vue')['default']
|
||||
CommonSetting: typeof import('./src/components/setting/CommonSetting.vue')['default']
|
||||
ConflictNotice: typeof import('./src/components/ConflictNotice.vue')['default']
|
||||
@@ -32,10 +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']
|
||||
Empty: typeof import('./src/components/Empty.vue')['default']
|
||||
Footer: typeof import('./src/components/word/components/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']
|
||||
Header: typeof import('./src/components/Header.vue')['default']
|
||||
IconBxVolume: typeof import('~icons/bx/volume')['default']
|
||||
IconBxVolumeFull: typeof import('~icons/bx/volume-full')['default']
|
||||
@@ -52,7 +60,6 @@ declare module 'vue' {
|
||||
IconFluentArrowClockwise20Regular: typeof import('~icons/fluent/arrow-clockwise20-regular')['default']
|
||||
IconFluentArrowDownload20Regular: typeof import('~icons/fluent/arrow-download20-regular')['default']
|
||||
IconFluentArrowLeft16Regular: typeof import('~icons/fluent/arrow-left16-regular')['default']
|
||||
IconFluentArrowMove20Regular: typeof import('~icons/fluent/arrow-move20-regular')['default']
|
||||
IconFluentArrowRepeatAll20Regular: typeof import('~icons/fluent/arrow-repeat-all20-regular')['default']
|
||||
IconFluentArrowRight16Regular: typeof import('~icons/fluent/arrow-right16-regular')['default']
|
||||
IconFluentArrowShuffle16Regular: typeof import('~icons/fluent/arrow-shuffle16-regular')['default']
|
||||
@@ -138,34 +145,49 @@ declare module 'vue' {
|
||||
IconUiwQq: typeof import('~icons/uiw/qq')['default']
|
||||
InputNumber: typeof import('./src/components/base/InputNumber.vue')['default']
|
||||
List: typeof import('./src/components/list/List.vue')['default']
|
||||
Log: typeof import('./src/components/setting/Log.vue')['default']
|
||||
Logo: typeof import('./src/components/Logo.vue')['default']
|
||||
MigrateDialog: typeof import('./src/components/MigrateDialog.vue')['default']
|
||||
MiniDialog: typeof import('./src/components/dialog/MiniDialog.vue')['default']
|
||||
Notice: typeof import('./src/components/user/Notice.vue')['default']
|
||||
Option: typeof import('./src/components/base/select/Option.vue')['default']
|
||||
OptionButton: typeof import('./src/components/base/OptionButton.vue')['default']
|
||||
Pagination: typeof import('./src/components/base/Pagination.vue')['default']
|
||||
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']
|
||||
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']
|
||||
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']
|
||||
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']
|
||||
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']
|
||||
StageProgress: typeof import('./src/components/StageProgress.vue')['default']
|
||||
Statistics: typeof import('./src/components/word/components/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']
|
||||
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']
|
||||
VolumeIcon: typeof import('./src/components/icon/VolumeIcon.vue')['default']
|
||||
VolumeSettingMiniDialog: typeof import('./src/components/word/components/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']
|
||||
|
||||
@@ -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 '@/pages/article/components/ArticleAudio.vue'
|
||||
import ArticleAudio from '@/components/article/components/ArticleAudio.vue'
|
||||
import BaseInput from '@/components/base/BaseInput.vue'
|
||||
import Textarea from '@/components/base/Textarea.vue'
|
||||
import { LOCAL_FILE_KEY } from '@/config/env.ts'
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
import type {Article} from "@/types/types.ts";
|
||||
import {useDisableEventListener} from "@/hooks/event.ts";
|
||||
import EditArticle from "@/pages/article/components/EditArticle.vue";
|
||||
import EditArticle from "@/components/article/components/EditArticle.vue";
|
||||
import {getDefaultArticle} from "@/types/func.ts";
|
||||
import {defineAsyncComponent} from "vue";
|
||||
|
||||
@@ -3,9 +3,9 @@ import Toast from '@/components/base/toast/Toast.ts'
|
||||
import BaseButton from '@/components/BaseButton.vue'
|
||||
import { useWordOptions } from '@/hooks/dict.ts'
|
||||
import { usePlayBeep, usePlayKeyboardAudio, usePlayWordAudio } from '@/hooks/sound.ts'
|
||||
import QuestionForm from '@/pages/article/components/QuestionForm.vue'
|
||||
import Space from '@/pages/article/components/Space.vue'
|
||||
import TypingWord from '@/pages/article/components/TypingWord.vue'
|
||||
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.ts'
|
||||
import { usePracticeStore } from '@/stores/practice.ts'
|
||||
import { useSettingStore } from '@/stores/setting.ts'
|
||||
@@ -1,6 +1,6 @@
|
||||
<script setup lang="tsx">
|
||||
import {useSettingStore} from "@/stores/setting.ts";
|
||||
import Space from "@/pages/article/components/Space.vue";
|
||||
import Space from "@/components/article/components/Space.vue";
|
||||
|
||||
import {PracticeArticleWordType} from "@/types/enum.ts";
|
||||
import type {ArticleWord} from "@/types/types.ts";
|
||||
@@ -1,7 +1,7 @@
|
||||
<script setup lang="ts">
|
||||
import Switch from '@/components/base/Switch.vue'
|
||||
import Slider from '@/components/base/Slider.vue'
|
||||
import SettingItem from '@/pages/setting/SettingItem.vue'
|
||||
import SettingItem from '@/components/setting/SettingItem.vue'
|
||||
import { useSettingStore } from '@/stores/setting.ts'
|
||||
|
||||
const settingStore = useSettingStore()
|
||||
|
||||
@@ -6,7 +6,7 @@ import { Option, Select } from '@/components/base/select'
|
||||
import Textarea from '@/components/base/Textarea.vue'
|
||||
import VolumeIcon from '@/components/icon/VolumeIcon.vue'
|
||||
import Slider from '@/components/base/Slider.vue'
|
||||
import SettingItem from '@/pages/setting/SettingItem.vue'
|
||||
import SettingItem from '@/components/setting/SettingItem.vue'
|
||||
import { useSettingStore } from '@/stores/setting.ts'
|
||||
import { useBaseStore } from '@/stores/base.ts'
|
||||
import {ShortcutKey} from "@/types/enum.ts";
|
||||
|
||||
@@ -4,7 +4,7 @@ import Switch from "@/components/base/Switch.vue";
|
||||
import RadioGroup from "@/components/base/radio/RadioGroup.vue";
|
||||
import InputNumber from "@/components/base/InputNumber.vue";
|
||||
import Slider from "@/components/base/Slider.vue";
|
||||
import SettingItem from "@/pages/setting/SettingItem.vue";
|
||||
import SettingItem from "@/components/setting/SettingItem.vue";
|
||||
import Radio from "@/components/base/radio/Radio.vue";
|
||||
import { useSettingStore } from "@/stores/setting.ts";
|
||||
const settingStore = useSettingStore()
|
||||
|
||||
@@ -8,7 +8,7 @@ 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.ts'
|
||||
import VolumeSettingMiniDialog from '@/pages/word/components/VolumeSettingMiniDialog.vue'
|
||||
import VolumeSettingMiniDialog from '@/components/word/components/VolumeSettingMiniDialog.vue'
|
||||
import StageProgress from '@/components/StageProgress.vue'
|
||||
import { ShortcutKey, WordPracticeMode, WordPracticeStage } from '@/types/enum.ts'
|
||||
import { WordPracticeModeNameMap, WordPracticeModeStageMap, WordPracticeStageNameMap } from '@/config/env.ts'
|
||||
@@ -6,7 +6,7 @@ import Slider from '@/components/base/Slider.vue'
|
||||
import { defineAsyncComponent, watch } from 'vue'
|
||||
import { useSettingStore } from '@/stores/setting.ts'
|
||||
import Toast from '@/components/base/toast/Toast.ts'
|
||||
import ChangeLastPracticeIndexDialog from '@/pages/word/components/ChangeLastPracticeIndexDialog.vue'
|
||||
import ChangeLastPracticeIndexDialog from '@/components/word/components/ChangeLastPracticeIndexDialog.vue'
|
||||
import Tooltip from '@/components/base/Tooltip.vue'
|
||||
import { useRuntimeStore } from '@/stores/runtime.ts'
|
||||
import BaseInput from '@/components/base/BaseInput.vue'
|
||||
@@ -5,12 +5,12 @@ 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 '@/pages/word/components/SentenceHightLightWord.vue'
|
||||
import SentenceHightLightWord from '@/components/word/components/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 '@/pages/article/components/Space.vue'
|
||||
import Space from '@/components/article/components/Space.vue'
|
||||
import Toast from '@/components/base/toast/Toast.ts'
|
||||
import Tooltip from '@/components/base/Tooltip.vue'
|
||||
import { ShortcutKey, WordPracticeStage, WordPracticeType } from '@/types/enum.ts'
|
||||
7
src/layout/empty.vue
Normal file
7
src/layout/empty.vue
Normal file
@@ -0,0 +1,7 @@
|
||||
<script setup lang="ts">
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<slot></slot>
|
||||
</template>
|
||||
@@ -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 '@/pages/article/components/EditArticle.vue'
|
||||
import EditArticle from '@/components/article/components/EditArticle.vue'
|
||||
import Toast from '@/components/base/toast/Toast.ts'
|
||||
import { getDefaultArticle } from '@/types/func.ts'
|
||||
import BackIcon from '@/components/BackIcon.vue'
|
||||
|
||||
@@ -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 '@/pages/article/components/EditBook.vue'
|
||||
import EditBook from '@/components/article/components/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 '@/pages/article/components/ArticleAudio.vue'
|
||||
import ArticleAudio from '@/components/article/components/ArticleAudio.vue'
|
||||
import { MessageBox } from '@/utils/MessageBox.tsx'
|
||||
import { useSettingStore } from '@/stores/setting.ts'
|
||||
import { useFetch } from '@vueuse/core'
|
||||
|
||||
@@ -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 '@/pages/article/components/ArticleAudio.vue'
|
||||
import EditSingleArticleModal from '@/pages/article/components/EditSingleArticleModal.vue'
|
||||
import TypingArticle from '@/pages/article/components/TypingArticle.vue'
|
||||
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 { useBaseStore } from '@/stores/base.ts'
|
||||
import { usePracticeStore } from '@/stores/practice.ts'
|
||||
import { useRuntimeStore } from '@/stores/runtime.ts'
|
||||
|
||||
@@ -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 '@/pages/article/components/EditBook.vue'
|
||||
import PracticeSettingDialog from '@/pages/word/components/PracticeSettingDialog.vue'
|
||||
import EditBook from '@/components/article/components/EditBook.vue'
|
||||
import PracticeSettingDialog from '@/components/word/components/PracticeSettingDialog.vue'
|
||||
import { useBaseStore } from '@/stores/base.ts'
|
||||
import { useRuntimeStore } from '@/stores/runtime.ts'
|
||||
import { useSettingStore } from '@/stores/setting.ts'
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<script setup lang="ts">
|
||||
import { onMounted, onUnmounted, provide, ref, watch } from 'vue'
|
||||
|
||||
import Statistics from '@/pages/word/components/Statistics.vue'
|
||||
import Statistics from '@/components/word/components/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 '@/pages/word/components/Footer.vue'
|
||||
import Footer from '@/components/word/components/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 '@/pages/word/components/TypeWord.vue'
|
||||
import TypeWord from '@/components/word/components/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 '@/pages/word/components/GroupList.vue'
|
||||
import GroupList from '@/components/word/components/GroupList.vue'
|
||||
import { getPracticeWordCache, setPracticeWordCache } from '@/utils/cache.ts'
|
||||
import { ShortcutKey, WordPracticeMode, WordPracticeStage, WordPracticeType } from '@/types/enum.ts'
|
||||
|
||||
|
||||
@@ -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 '@/pages/word/components/PracticeSettingDialog.vue'
|
||||
import ChangeLastPracticeIndexDialog from '@/pages/word/components/ChangeLastPracticeIndexDialog.vue'
|
||||
import PracticeSettingDialog from '@/components/word/components/PracticeSettingDialog.vue'
|
||||
import ChangeLastPracticeIndexDialog from '@/components/word/components/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 '@/pages/word/components/PracticeWordListDialog.vue'
|
||||
import ShufflePracticeSettingDialog from '@/pages/word/components/ShufflePracticeSettingDialog.vue'
|
||||
import PracticeWordListDialog from '@/components/word/components/PracticeWordListDialog.vue'
|
||||
import ShufflePracticeSettingDialog from '@/components/word/components/ShufflePracticeSettingDialog.vue'
|
||||
import { deleteDict } from '@/apis/dict.ts'
|
||||
import OptionButton from '@/components/base/OptionButton.vue'
|
||||
import { getPracticeWordCache, setPracticeWordCache } from '@/utils/cache.ts'
|
||||
|
||||
@@ -21,7 +21,7 @@ import { set } from 'idb-keyval'
|
||||
import { useRuntimeStore } from '@/stores/runtime.ts'
|
||||
import { useExport } from '@/hooks/export.ts'
|
||||
import MigrateDialog from '@/components/MigrateDialog.vue'
|
||||
import Log from '@/pages/setting/Log.vue'
|
||||
import Log from '@/components/setting/Log.vue'
|
||||
import About from '@/components/About.vue'
|
||||
import CommonSetting from '@/components/setting/CommonSetting.vue'
|
||||
import ArticleSetting from '@/components/setting/ArticleSetting.vue'
|
||||
@@ -1 +0,0 @@
|
||||
"{\"val\":{\"myDictList\":[{\"id\":\"collect\",\"name\":\"收藏\",\"description\":\"\",\"sort\":0,\"originWords\":[],\"words\":[],\"chapterWordNumber\":30,\"chapterWords\":[],\"residueWords\":[],\"chapterIndex\":0,\"wordIndex\":0,\"articles\":[],\"statistics\":[],\"isCustom\":true,\"length\":0,\"resourceId\":\"\",\"url\":\"\",\"category\":\"自带字典\",\"tags\":[\"自带\"],\"translateLanguage\":\"common\",\"type\":\"collect\",\"language\":\"en\"},{\"id\":\"skip\",\"name\":\"简单词\",\"description\":\"\",\"sort\":0,\"originWords\":[],\"words\":[],\"chapterWordNumber\":30,\"chapterWords\":[],\"residueWords\":[],\"chapterIndex\":0,\"wordIndex\":0,\"articles\":[],\"statistics\":[],\"isCustom\":true,\"length\":0,\"resourceId\":\"\",\"url\":\"\",\"category\":\"自带字典\",\"tags\":[],\"translateLanguage\":\"common\",\"type\":\"simple\",\"language\":\"en\"},{\"id\":\"wrong\",\"name\":\"错词本\",\"description\":\"\",\"sort\":0,\"originWords\":[],\"words\":[],\"chapterWordNumber\":30,\"chapterWords\":[],\"residueWords\":[],\"chapterIndex\":0,\"wordIndex\":0,\"articles\":[],\"statistics\":[],\"isCustom\":true,\"length\":0,\"resourceId\":\"\",\"url\":\"\",\"category\":\"自带字典\",\"tags\":[],\"translateLanguage\":\"common\",\"type\":\"wrong\",\"language\":\"en\"},{\"id\":\"cet4\",\"name\":\"CET-4\",\"description\":\"大学英语四级词库\",\"sort\":0,\"originWords\":[],\"words\":[],\"chapterWordNumber\":30,\"chapterWords\":[],\"residueWords\":[],\"chapterIndex\":0,\"wordIndex\":0,\"articles\":[],\"statistics\":[],\"isCustom\":false,\"length\":2607,\"resourceId\":\"\",\"url\":\"CET4_T.json\",\"category\":\"中国考试\",\"tags\":[\"大学英语\"],\"translateLanguage\":\"common\",\"type\":\"word\",\"language\":\"en\"}],\"collectDictIds\":[],\"current\":{\"index\":3,\"practiceType\":\"word\"},\"simpleWords\":[\"a\",\"an\",\"i\",\"my\",\"you\",\"your\",\"me\",\"it\",\"what\",\"who\",\"where\",\"how\",\"when\",\"which\",\"be\",\"am\",\"is\",\"do\",\"are\",\"did\",\"were\",\"was\",\"can\",\"could\",\"will\",\"would\",\"the\",\"that\",\"this\",\"to\",\"of\",\"for\",\"and\",\"at\",\"not\",\"no\",\"yes\"],\"load\":true},\"version\":3}"
|
||||
@@ -1,93 +0,0 @@
|
||||
<script setup lang="ts">
|
||||
// import origin from './data.json'
|
||||
import BaseButton from "@/components/BaseButton.vue";
|
||||
import {checkAndUpgradeSaveDict} from "@/utils";
|
||||
import str from './data.json'
|
||||
import {get} from 'idb-keyval'
|
||||
import { SAVE_DICT_KEY } from "@/config/env.ts";
|
||||
|
||||
let data = {}
|
||||
let origin = {}
|
||||
|
||||
|
||||
async function look() {
|
||||
let configStr: string = await get(SAVE_DICT_KEY.key)
|
||||
let obj = JSON.parse(configStr)
|
||||
console.log('local', obj)
|
||||
|
||||
}
|
||||
|
||||
function set1() {
|
||||
// localforage.setItem(SAVE_DICT_KEY.key, JSON.stringify({val: shakeCommonDict(origin.val as any), version: 3}))
|
||||
}
|
||||
|
||||
async function check() {
|
||||
// let configStr: string = await localforage.getItem(SAVE_DICT_KEY.key)
|
||||
// console.log('local', configStr)
|
||||
// console.log('or',origin)
|
||||
// let configStr: string = await localforage.getItem(SAVE_DICT_KEY.key)
|
||||
console.parse(str)
|
||||
// console.log(str)
|
||||
let data = checkAndUpgradeSaveDict(str)
|
||||
// console.log('data', data)
|
||||
// this.setState(data)
|
||||
}
|
||||
|
||||
|
||||
const generateColumns = (length = 10, prefix = 'column-', props?: any) =>
|
||||
Array.from({length}).map((_, columnIndex) => ({
|
||||
...props,
|
||||
key: `${prefix}${columnIndex}`,
|
||||
dataKey: `${prefix}${columnIndex}`,
|
||||
title: `Column ${columnIndex}`,
|
||||
width: 150,
|
||||
}))
|
||||
|
||||
const generateData = (
|
||||
columns: ReturnType<typeof generateColumns>,
|
||||
length = 200,
|
||||
prefix = 'row-'
|
||||
) =>
|
||||
Array.from({length}).map((_, rowIndex) => {
|
||||
return columns.reduce(
|
||||
(rowData, column, columnIndex) => {
|
||||
rowData[column.dataKey] = `Row ${rowIndex} - Col ${columnIndex}`
|
||||
return rowData
|
||||
},
|
||||
{
|
||||
id: `${prefix}${rowIndex}`,
|
||||
parentId: null,
|
||||
}
|
||||
)
|
||||
})
|
||||
|
||||
const columns = generateColumns(10)
|
||||
const data1 = generateData(columns, 1000)
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="page">
|
||||
<div class="data">
|
||||
<p>数据升级检测</p>
|
||||
<BaseButton @click="look">获取保存到localforage的数据</BaseButton>
|
||||
<BaseButton @click="set">设置data.json的数据到localforage</BaseButton>
|
||||
<BaseButton @click="check">检测升级逻辑</BaseButton>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.page {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
font-size: 1rem;
|
||||
color: black;
|
||||
|
||||
.data {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
width: 30rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,66 +0,0 @@
|
||||
<script setup lang="ts">
|
||||
|
||||
import BaseButton from "@/components/BaseButton.vue";
|
||||
import {sendCode} from "@/apis/user.ts";
|
||||
import {PHONE_CONFIG} from "@/config/auth.ts";
|
||||
import Toast from "@/components/base/toast/Toast.ts";
|
||||
import {CodeType} from "@/types/enum.ts";
|
||||
|
||||
let isSendingCode = $ref(false)
|
||||
let codeCountdown = $ref(0)
|
||||
|
||||
interface IProps {
|
||||
validateField: Function,
|
||||
type: CodeType
|
||||
val: any
|
||||
size?: any
|
||||
}
|
||||
|
||||
const props = withDefaults(defineProps<IProps>(), {
|
||||
size: 'large',
|
||||
})
|
||||
|
||||
// 发送验证码
|
||||
async function sendVerificationCode() {
|
||||
let res = props.validateField()
|
||||
if (res) {
|
||||
try {
|
||||
isSendingCode = true
|
||||
const res = await sendCode({val: props.val, type: props.type})
|
||||
if (res.success) {
|
||||
codeCountdown = PHONE_CONFIG.sendInterval
|
||||
const timer = setInterval(() => {
|
||||
codeCountdown--
|
||||
if (codeCountdown <= 0) {
|
||||
clearInterval(timer)
|
||||
}
|
||||
}, 1000)
|
||||
} else {
|
||||
Toast.error(res.msg || '发送失败')
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Send code error:', error)
|
||||
Toast.error('发送验证码失败')
|
||||
} finally {
|
||||
isSendingCode = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<BaseButton
|
||||
@click="sendVerificationCode"
|
||||
:disabled="isSendingCode || codeCountdown > 0"
|
||||
type="info"
|
||||
:size="props.size"
|
||||
style="border: 1px solid var(--color-input-border)"
|
||||
>
|
||||
{{ codeCountdown > 0 ? `${codeCountdown}s` : (isSendingCode ? '发送中' : '发送验证码') }}
|
||||
</BaseButton>
|
||||
</template>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
</style>
|
||||
@@ -1,15 +0,0 @@
|
||||
<script setup lang="ts">
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="h-12 text-xs text-gray-400">
|
||||
<span>
|
||||
继续操作即表示你阅读并同意我们的
|
||||
<a href="/user-agreement.html" target="_blank" class="link">用户协议</a>
|
||||
与
|
||||
<a href="/privacy-policy.html" target="_blank" class="link">隐私政策</a>
|
||||
</span>
|
||||
<slot/>
|
||||
</div>
|
||||
</template>
|
||||
@@ -1,6 +1,6 @@
|
||||
import * as VueRouter from 'vue-router'
|
||||
import {RouteRecordRaw} from 'vue-router'
|
||||
import Layout from "@/pages/layout.vue";
|
||||
import Layout from "@/layout/default.vue";
|
||||
import words from "@/pages/(words)/words.vue";
|
||||
import DictDetail from "@/pages/(words)/dict-detail.vue";
|
||||
import DictList from "@/pages/(words)/dict-list.vue";
|
||||
@@ -12,7 +12,7 @@ import BookDetail from "@/pages/(articles)/book-detail.vue";
|
||||
import BookList from "@/pages/(articles)/book-list.vue";
|
||||
import PracticeArticles from "@/pages/(articles)/practice-articles/[id].vue";
|
||||
|
||||
import setting from "@/pages/setting/Setting.vue";
|
||||
import setting from "@/pages/setting.vue";
|
||||
import login from "@/pages/(user)/login.vue";
|
||||
import user from "@/pages/(user)/user.vue";
|
||||
import vip from "@/pages/(user)/vip.vue";
|
||||
@@ -53,7 +53,6 @@ export const routes: RouteRecordRaw[] = [
|
||||
]
|
||||
},
|
||||
{path: '/batch-edit-article', component: () => import("@/pages/(articles)/batch-edit-article.vue")},
|
||||
{path: '/test', component: () => import("@/pages/test/test.vue")},
|
||||
{path: '/:pathMatch(.*)*', redirect: '/words'},
|
||||
]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user