diff --git a/components.d.ts b/components.d.ts index 5386fd68..f1a2abe5 100644 --- a/components.d.ts +++ b/components.d.ts @@ -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'] diff --git a/index.html b/index.html index ca8bafbb..ac9d00d5 100644 --- a/index.html +++ b/index.html @@ -178,6 +178,6 @@ document.body.appendChild(dialog) })() - + diff --git a/src/App.vue b/src/App.vue index 659060dc..bc3577e2 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,16 +1,16 @@ + + diff --git a/src/main.ts b/src/main.ts index c0ad5ec6..200820c0 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,12 +1,12 @@ import {createApp} from 'vue' -import './assets/css/style.scss' +import './assets/css/main.scss' import 'virtual:uno.css'; import App from './App.vue' import {createPinia} from "pinia" -import router from "@/router.ts"; +import router from "@/router"; import VueVirtualScroller from 'vue-virtual-scroller' import 'vue-virtual-scroller/dist/vue-virtual-scroller.css' -import './types/global.d.ts' +import './types/global.d' import loadingDirective from './directives/loading.tsx' diff --git a/src/pages/article/ArticlesPage.vue b/src/pages/(articles)/articles.vue similarity index 100% rename from src/pages/article/ArticlesPage.vue rename to src/pages/(articles)/articles.vue diff --git a/src/pages/article/BatchEditArticlePage.vue b/src/pages/(articles)/batch-edit-article.vue similarity index 99% rename from src/pages/article/BatchEditArticlePage.vue rename to src/pages/(articles)/batch-edit-article.vue index 1f8b0c68..f3580614 100644 --- a/src/pages/article/BatchEditArticlePage.vue +++ b/src/pages/(articles)/batch-edit-article.vue @@ -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' @@ -283,7 +283,7 @@ function updateList(e) { :loading="exportLoading" :disabled="!article.id" @click="exportData({ type: 'item', data: article })" - >当前 + >当前 diff --git a/src/pages/article/BookDetail.vue b/src/pages/(articles)/book-detail.vue similarity index 99% rename from src/pages/article/BookDetail.vue rename to src/pages/(articles)/book-detail.vue index 754f591c..2a9b2f13 100644 --- a/src/pages/article/BookDetail.vue +++ b/src/pages/(articles)/book-detail.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' @@ -319,7 +319,7 @@ watch([() => displayMode, () => selectArticle.id, () => showTranslate], () => { v-for="(s, n) in w.split(' ').filter(Boolean)" :class="`inline-block word-${i}-${j}-${n}`" :key="`${i}-${j}-${n}`" - >{{ s }} + >{{ s }} diff --git a/src/pages/article/BookList.vue b/src/pages/(articles)/book-list.vue similarity index 81% rename from src/pages/article/BookList.vue rename to src/pages/(articles)/book-list.vue index b6d2a75f..efbf1e6b 100644 --- a/src/pages/article/BookList.vue +++ b/src/pages/(articles)/book-list.vue @@ -38,10 +38,10 @@ const searchList = computed(() => { let s = searchKey.toLowerCase() return bookList.value.filter((item) => { return item.id.toLowerCase().includes(s) - || item.name.toLowerCase().includes(s) - || item.category.toLowerCase().includes(s) - || item.tags.join('').replace('所有', '').toLowerCase().includes(s) - || item?.url?.toLowerCase?.().includes?.(s) + || item.name.toLowerCase().includes(s) + || item.category.toLowerCase().includes(s) + || item.tags.join('').replace('所有', '').toLowerCase().includes(s) + || item?.url?.toLowerCase?.().includes?.(s) }) } return [] @@ -68,20 +68,20 @@ const searchList = computed(() => {
+ v-if="searchList.length " + @selectDict="selectDict" + :list="searchList" + quantifier="篇" + :select-id="'-1'"/>
+ v-if="bookList?.length " + @selectDict="selectDict" + :list="bookList" + quantifier="篇" + :select-id="'-1'"/>
diff --git a/src/pages/article/PracticeArticles.vue b/src/pages/(articles)/practice-articles/[id].vue similarity index 98% rename from src/pages/article/PracticeArticles.vue rename to src/pages/(articles)/practice-articles/[id].vue index 4819e1e1..5a1d82a0 100644 --- a/src/pages/article/PracticeArticles.vue +++ b/src/pages/(articles)/practice-articles/[id].vue @@ -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' diff --git a/src/pages/user/login.vue b/src/pages/(user)/login.vue similarity index 98% rename from src/pages/user/login.vue rename to src/pages/(user)/login.vue index b5655137..2ad37800 100644 --- a/src/pages/user/login.vue +++ b/src/pages/(user)/login.vue @@ -10,16 +10,15 @@ import { accountRules, codeRules, passwordRules, phoneRules } from '@/utils/vali import Toast from '@/components/base/toast/Toast.ts' import FormItem from '@/components/base/form/FormItem.vue' import Form from '@/components/base/form/Form.vue' -import Notice from '@/pages/user/Notice.vue' +import Notice from '@/components/user/Notice.vue' import { FormInstance } from '@/components/base/form/types.ts' import { PASSWORD_CONFIG, PHONE_CONFIG } from '@/config/auth.ts' -import Code from '@/pages/user/Code.vue' -import { isNewUser, jump2Feedback, sleep, useNav } from '@/utils' +import Code from '@/components/user/Code.vue' +import { jump2Feedback, sleep, useNav } from '@/utils' import Header from '@/components/Header.vue' import PopConfirm from '@/components/PopConfirm.vue' import { useExport } from '@/hooks/export.ts' -import { getProgress, upload, uploadImportData } from '@/apis' -import { Exception } from 'sass' +import { getProgress, uploadImportData } from '@/apis' import { CodeType, ImportStatus } from '@/types/enum.ts' // 状态管理 diff --git a/src/pages/user/User.vue b/src/pages/(user)/user.vue similarity index 70% rename from src/pages/user/User.vue rename to src/pages/(user)/user.vue index f06c88d5..186d7652 100644 --- a/src/pages/user/User.vue +++ b/src/pages/(user)/user.vue @@ -1,23 +1,23 @@ @@ -254,21 +259,15 @@ function onFileChange(e) {
- +

- + 欢迎使用

登录,开启您的学习之旅

保存进度、同步数据、解锁个性化内容
- - 登录 - + 登录

还没有账户? 立即注册 @@ -287,20 +286,17 @@ function onFileChange(e) {

用户名
- + {{ userStore.user?.username }}
在此设置用户名
- +
-
+ @@ -327,20 +323,17 @@ function onFileChange(e) {
手机号
- + {{ userStore.user?.phone }}
在此设置手机号
- +
- +
- +
- +
@@ -371,24 +357,24 @@ function onFileChange(e) { placeholder="请输入新手机号验证码" :max-length="PHONE_CONFIG.codeLength" /> - +
- +
- 原手机号不可用,点此申诉 + 原手机号不可用,点此申诉
取消 @@ -403,20 +389,17 @@ function onFileChange(e) {
电子邮箱
- + {{ userStore.user?.email }}
在此设置邮箱
- +
-
+ - +
- +
@@ -455,7 +435,6 @@ function onFileChange(e) {
-
@@ -463,22 +442,13 @@ function onFileChange(e) {
在此输入密码
- +
-
+ - + @@ -510,15 +480,10 @@ function onFileChange(e) {
- -
-
- 联系 {{ APP_NAME }} 客服 -
- +
+
联系 {{ APP_NAME }} 客服
+
@@ -528,32 +493,26 @@ function onFileChange(e) {
同步进度
- - + +
-
-
- 给 {{ APP_NAME }} 提交意见 -
- +
+
给 {{ APP_NAME }} 提交意见
+
- - 登出 - + 登出
@@ -566,12 +525,11 @@ function onFileChange(e) {
- +
订阅信息
-
当前无订阅
- {{ - userStore.user?.member ? '管理订阅' : '会员介绍' - }} + {{ userStore.user?.member ? '管理订阅' : '会员介绍' }}
diff --git a/src/pages/user/VipIntro.vue b/src/pages/(user)/vip.vue similarity index 68% rename from src/pages/user/VipIntro.vue rename to src/pages/(user)/vip.vue index 8c43650d..0ba0c0f5 100644 --- a/src/pages/user/VipIntro.vue +++ b/src/pages/(user)/vip.vue @@ -1,11 +1,11 @@ diff --git a/src/router.ts b/src/router.ts index 7a2f4490..41a99332 100644 --- a/src/router.ts +++ b/src/router.ts @@ -1,23 +1,25 @@ import * as VueRouter from 'vue-router' import {RouteRecordRaw} from 'vue-router' -import WordsPage from "@/pages/word/WordsPage.vue"; -import Layout from "@/pages/layout.vue"; -import ArticlesPage from "@/pages/article/ArticlesPage.vue"; -import PracticeArticles from "@/pages/article/PracticeArticles.vue"; -import DictDetail from "@/pages/word/DictDetail.vue"; -import PracticeWords from "@/pages/word/PracticeWords.vue"; -import WordTest from "@/pages/word/WordTest.vue"; -import BookDetail from "@/pages/article/BookDetail.vue"; -import DictList from "@/pages/word/DictList.vue"; -import BookList from "@/pages/article/BookList.vue"; -import Setting from "@/pages/setting/Setting.vue"; -import Login from "@/pages/user/login.vue"; -import User from "@/pages/user/User.vue"; -import VipIntro from "@/pages/user/VipIntro.vue"; -import Feedback from "@/pages/feedback.vue"; -import Qa from "@/pages/qa.vue"; -import Doc from "@/pages/doc.vue"; -// import { useAuthStore } from "@/stores/user.ts"; +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"; +import PracticeWords from "@/pages/(words)/practice-words/[id].vue"; +import WordTest from "@/pages/(words)/words-test/[id].vue"; + +import articles from "@/pages/(articles)/articles.vue"; +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.vue"; +import login from "@/pages/(user)/login.vue"; +import user from "@/pages/(user)/user.vue"; +import vip from "@/pages/(user)/vip.vue"; +import feedback from "@/pages/feedback.vue"; +import qa from "@/pages/qa.vue"; +import doc from "@/pages/doc.vue"; +// import { useAuthStore } from "@/stores/user"; export const routes: RouteRecordRaw[] = [ { @@ -25,7 +27,7 @@ export const routes: RouteRecordRaw[] = [ component: Layout, children: [ {path: '/', redirect: '/words'}, - {path: 'words', component: WordsPage}, + {path: 'words', component: words}, {path: 'word', redirect: '/words'}, {path: 'practice-words/:id', component: PracticeWords}, {path: 'word-test/:id', component: WordTest}, @@ -33,25 +35,24 @@ export const routes: RouteRecordRaw[] = [ {path: 'dict-list', component: DictList}, {path: 'dict-detail', component: DictDetail}, - {path: 'articles', component: ArticlesPage}, + {path: 'articles', component: articles}, {path: 'article', redirect: '/articles'}, {path: 'practice-articles/:id', component: PracticeArticles}, {path: 'study-article', redirect: '/articles'}, {path: 'book-detail', component: BookDetail}, {path: 'book-list', component: BookList}, - {path: 'login', component: Login}, - {path: 'user', component: User}, - {path: 'vip', component: VipIntro}, + {path: 'login', component: login}, + {path: 'user', component: user}, + {path: 'vip', component: vip}, - {path: 'setting', component: Setting}, - {path: 'feedback', component: Feedback}, - {path: 'qa', component: Qa}, - {path: 'doc', component: Doc}, + {path: 'setting', component: setting}, + {path: 'feedback', component: feedback}, + {path: 'qa', component: qa}, + {path: 'doc', component: doc}, ] }, - {path: '/batch-edit-article', component: () => import("@/pages/article/BatchEditArticlePage.vue")}, - {path: '/test', component: () => import("@/pages/test/test.vue")}, + {path: '/batch-edit-article', component: () => import("@/pages/(articles)/batch-edit-article.vue")}, {path: '/:pathMatch(.*)*', redirect: '/words'}, ] diff --git a/src/stores/base.ts b/src/stores/base.ts index 3124e0b0..5e4a42e9 100644 --- a/src/stores/base.ts +++ b/src/stores/base.ts @@ -1,12 +1,12 @@ import { defineStore } from 'pinia' -import { Dict, Word } from '../types/types.ts' +import { Dict, Word } from '../types/types' import { _getStudyProgress, checkAndUpgradeSaveDict, shakeCommonDict } from '@/utils' import { shallowReactive } from 'vue' -import { getDefaultDict } from '@/types/func.ts' +import { getDefaultDict } from '@/types/func' import { get, set } from 'idb-keyval' -import { AppEnv, DictId, SAVE_DICT_KEY } from '@/config/env.ts' +import { AppEnv, DictId, SAVE_DICT_KEY } from '@/config/env' import { add2MyDict, dictListVersion, myDictList } from '@/apis' -import Toast from '@/components/base/toast/Toast.ts' +import Toast from '@/components/base/toast/Toast' export interface BaseState { simpleWords: string[] diff --git a/src/stores/runtime.ts b/src/stores/runtime.ts index e6ee356a..663f1d85 100644 --- a/src/stores/runtime.ts +++ b/src/stores/runtime.ts @@ -1,6 +1,6 @@ import {defineStore} from "pinia" -import type {Dict} from "@/types/types.ts"; -import {getDefaultDict} from "@/types/func.ts"; +import type {Dict} from "@/types/types"; +import {getDefaultDict} from "@/types/func"; export interface RuntimeState { disableEventListener: boolean, diff --git a/src/stores/user.ts b/src/stores/user.ts index 7deef001..11fd4f00 100644 --- a/src/stores/user.ts +++ b/src/stores/user.ts @@ -1,8 +1,8 @@ import {defineStore} from 'pinia' import {ref} from 'vue' -import {getUserInfo, User} from '@/apis/user.ts' -import {AppEnv} from "@/config/env.ts"; -import Toast from "@/components/base/toast/Toast.ts"; +import {getUserInfo, User} from '@/apis/user' +import {AppEnv} from "@/config/env"; +import Toast from "@/components/base/toast/Toast"; export const useUserStore = defineStore('user', () => { const user = ref(null) diff --git a/src/types/func.ts b/src/types/func.ts index 59121d65..190ae6e1 100644 --- a/src/types/func.ts +++ b/src/types/func.ts @@ -1,8 +1,8 @@ -import type { Article, ArticleWord, Dict, Word } from '@/types/types.ts' +import type { Article, ArticleWord, Dict, Word } from '@/types/types' import { shallowReactive } from "vue"; import { cloneDeep } from "@/utils"; import { nanoid } from "nanoid"; -import { DictType, PracticeArticleWordType } from '@/types/enum.ts' +import { DictType, PracticeArticleWordType } from '@/types/enum' export function getDefaultWord(val: Partial = {}): Word { return { diff --git a/src/types/types.ts b/src/types/types.ts index 94bf72fd..01d35673 100644 --- a/src/types/types.ts +++ b/src/types/types.ts @@ -1,4 +1,4 @@ -import { DictType, PracticeArticleWordType } from '@/types/enum.ts' +import { DictType, PracticeArticleWordType } from '@/types/enum' export type Word = { id?: string diff --git a/src/utils/http.ts b/src/utils/http.ts index 3d7bfe72..4996c714 100644 --- a/src/utils/http.ts +++ b/src/utils/http.ts @@ -1,7 +1,7 @@ -import axios, {AxiosInstance} from 'axios' +import axios from 'axios' +import type {AxiosInstance} from 'axios' import {AppEnv, ENV} from "@/config/env.ts"; import Toast from "@/components/base/toast/Toast.ts"; -import App from "@/App.vue"; export const axiosInstance: AxiosInstance = axios.create({ baseURL: ENV.API, diff --git a/src/utils/index.ts b/src/utils/index.ts index 1884641f..4c83ef6a 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,15 +1,15 @@ -import { BaseState, getDefaultBaseState, useBaseStore } from '@/stores/base.ts' -import { getDefaultSettingState, SettingState } from '@/stores/setting.ts' -import type { Dict, DictResource } from '@/types/types.ts' +import { BaseState, getDefaultBaseState, useBaseStore } from '@/stores/base' +import { getDefaultSettingState, SettingState } from '@/stores/setting' +import type { Dict, DictResource } from '@/types/types' import { useRouter } from 'vue-router' -import { useRuntimeStore } from '@/stores/runtime.ts' +import { useRuntimeStore } from '@/stores/runtime' import dayjs from 'dayjs' -import { AppEnv, DictId, RESOURCE_PATH, SAVE_DICT_KEY, SAVE_SETTING_KEY } from '@/config/env.ts' +import { AppEnv, DictId, ENV, RESOURCE_PATH, SAVE_DICT_KEY, SAVE_SETTING_KEY } from '@/config/env' import { nextTick } from 'vue' -import Toast from '@/components/base/toast/Toast.ts' -import { getDefaultDict, getDefaultWord } from '@/types/func.ts' +import Toast from '@/components/base/toast/Toast' +import { getDefaultDict, getDefaultWord } from '@/types/func' import duration from 'dayjs/plugin/duration' -import {DictType} from "@/types/enum.ts"; +import { DictType } from '@/types/enum' dayjs.extend(duration) @@ -61,9 +61,7 @@ export function checkAndUpgradeSaveDict(val: any) { return defaultState } else { // 版本不匹配时,尽量保留数据而不是直接返回默认状态 - console.warn( - `数据版本不匹配: 当前版本 ${version}, 期望版本 ${SAVE_DICT_KEY.version},尝试保留数据` - ) + console.warn(`数据版本不匹配: 当前版本 ${version}, 期望版本 ${SAVE_DICT_KEY.version},尝试保留数据`) try { checkRiskKey(defaultState, state) // 尝试保留 bookList 数据 @@ -136,8 +134,7 @@ export function checkAndUpgradeSaveSetting(val: any) { export function shakeCommonDict(n: BaseState): BaseState { let data: BaseState = cloneDeep(n) data.word.bookList.map((v: Dict) => { - if (!v.custom && ![DictId.wordKnown, DictId.wordWrong, DictId.wordCollect].includes(v.id)) - v.words = [] + if (!v.custom && ![DictId.wordKnown, DictId.wordWrong, DictId.wordCollect].includes(v.id)) v.words = [] }) data.article.bookList.map((v: Dict) => { if (!v.custom && ![DictId.articleCollect].includes(v.id)) v.articles = [] @@ -248,14 +245,11 @@ export async function sleep(time: number) { return new Promise(resolve => setTimeout(resolve, time)) } -export async function _getDictDataByUrl( - val: DictResource, - type: DictType = DictType.word -): Promise { +export async function _getDictDataByUrl(val: DictResource, type: DictType = DictType.word): Promise { // await sleep(2000); - let dictResourceUrl = `https://dicts.2study.top/dicts/${val.language}/word/${val.url}` + let dictResourceUrl = ENV.RESOURCE_URL + `dicts/${val.language}/word/${val.url}` if (type === DictType.article) { - dictResourceUrl = `https://dicts.2study.top/dicts/${val.language}/article/${val.url}` + dictResourceUrl = ENV.RESOURCE_URL + `dicts/${val.language}/article/${val.url}` } let s = await fetch(resourceWrap(dictResourceUrl, val.version)).then(r => r.json()) if (s) { @@ -271,8 +265,7 @@ export async function _getDictDataByUrl( //从字符串里面转换为Word格式 export function convertToWord(raw: any) { const safeString = str => (typeof str === 'string' ? str.trim() : '') - const safeSplit = (str, sep) => - safeString(str) ? safeString(str).split(sep).filter(Boolean) : [] + const safeSplit = (str, sep) => (safeString(str) ? safeString(str).split(sep).filter(Boolean) : []) // 1. trans const trans = safeSplit(raw.trans, '\n').map(line => { @@ -508,9 +501,7 @@ export async function isNewUser() { let base = useBaseStore() console.log(JSON.stringify(base.$state)) console.log(JSON.stringify(getDefaultBaseState())) - return ( - JSON.stringify(base.$state) === JSON.stringify({ ...getDefaultBaseState(), ...{ load: true } }) - ) + return JSON.stringify(base.$state) === JSON.stringify({ ...getDefaultBaseState(), ...{ load: true } }) } export function jump2Feedback() {