From 1be66fb5cf68c135dd7d593f9442b0a9f30bce4e Mon Sep 17 00:00:00 2001 From: zyronon Date: Mon, 4 Aug 2025 01:46:46 +0800 Subject: [PATCH] feat:save --- src/assets/css/style.scss | 66 +---- src/hooks/dict.ts | 15 +- src/pages/pc/Setting.vue | 6 +- src/pages/pc/article/ArticleHomePage.vue | 133 +++++----- src/pages/pc/article/BatchEditArticlePage.vue | 10 +- .../practice-article/TypingArticle.vue | 41 ++-- .../pc/article/practice-article/index.vue | 80 +++--- src/pages/pc/components/Book.vue | 2 +- src/pages/pc/components/Panel.vue | 232 +----------------- src/pages/pc/components/dialog/Dialog.vue | 39 +-- src/pages/pc/index.vue | 1 + src/pages/pc/word/StudyWord.vue | 81 +++--- src/pages/pc/word/WordHomePage.vue | 5 +- src/stores/base.ts | 19 +- src/types.ts | 8 +- uno.config.ts | 3 + 16 files changed, 204 insertions(+), 537 deletions(-) diff --git a/src/assets/css/style.scss b/src/assets/css/style.scss index e3b096a7..71c65aca 100644 --- a/src/assets/css/style.scss +++ b/src/assets/css/style.scss @@ -60,7 +60,7 @@ //修改element-ui的进度条底色 - --el-border-color-lighter: #e2e5ed !important; + --el-border-color-lighter: #d1d5df !important; } .footer { @@ -70,7 +70,6 @@ } html.dark { - --color-primary: #0E1217; --color-second: rgb(30, 31, 34); --color-third: rgb(43, 45, 48); @@ -104,7 +103,7 @@ html.dark { --color-textarea-bg: rgb(43, 45, 48); --color-article: white; - --el-border-color-lighter: var(--color-third) !important; + --el-border-color-lighter: rgb(73, 77, 82) !important; .footer { &.hide { @@ -251,57 +250,12 @@ a { } } -//@supports (scrollbar-width: thin) { -// * { -// scrollbar-color: var(--color-scrollbar) #f3f4f9; -// scrollbar-width: thin; -// } -//} - -footer { - $footer-height: 60rem; - box-sizing: content-box; - height: $footer-height; - display: flex; - align-items: flex-end; - justify-content: flex-end; - gap: var(--space); -} - - .panel-page-item { display: flex; flex-direction: column; height: 100%; padding-bottom: var(--space); box-sizing: border-box; - - .list-header { - min-height: 3rem; - padding: .6rem var(--space); - box-sizing: border-box; - display: flex; - justify-content: space-between; - align-items: center; - font-size: 1rem; - color: var(--color-font-3); - - .left { - flex: 1; - display: flex; - align-items: center; - gap: .6rem; - } - - .title { - max-width: 70%; - } - - .right { - word-break: keep-all; - } - } - } .scroll { @@ -316,17 +270,6 @@ footer { padding: 0 var(--space); } -.common-list1 { - display: flex; - flex-direction: column; - width: 100%; - flex: 1; - overflow: auto; - box-sizing: border-box; - gap: 10rem; - padding: 0 var(--space); -} - .list-item-wrapper { padding-bottom: 1rem; } @@ -367,7 +310,6 @@ footer { svg { opacity: 0; - color: var(--color-icon-hightlight); } &.active { @@ -376,10 +318,6 @@ footer { .item-sub-title { color: var(--color-sub-text); } - - svg { - color: var(--color-icon-hightlight); - } } .fill { diff --git a/src/hooks/dict.ts b/src/hooks/dict.ts index 27d2f91e..76b00e9f 100644 --- a/src/hooks/dict.ts +++ b/src/hooks/dict.ts @@ -1,6 +1,5 @@ import {Article, Word} from "@/types.ts"; import {useBaseStore} from "@/stores/base.ts"; -import {markRaw} from "vue"; export function useWordOptions() { @@ -16,25 +15,22 @@ export function useWordOptions() { store.collectWord.words.splice(rIndex, 1) } else { store.collectWord.words.push(val) - // store.collectWord.words = markRaw(store.collectWord.words.concat([val])) } + store.collectWord.length = store.collectWord.words.length } function isWordSimple(val: Word) { - return !!store.known.words.find(v => v.word.toLowerCase() === val.word.toLowerCase()) + return !!store.knownWords.includes(val.word.toLowerCase()) } function toggleWordSimple(val: Word) { - let rIndex = store.known.words.findIndex(v => v.word.toLowerCase() === val.word.toLowerCase()) + let rIndex = store.knownWords.findIndex(v => v === val.word.toLowerCase()) if (rIndex > -1) { store.known.words.splice(rIndex, 1) } else { - let rIndex = store.collectWord.words.findIndex(v => v.word.toLowerCase() === val.word.toLowerCase()) - if (rIndex > -1) { - store.collectWord.words.splice(rIndex, 1) - } store.known.words.push(val) } + store.known.length = store.known.words.length } function delWrongWord(val: Word) { @@ -42,6 +38,7 @@ export function useWordOptions() { if (rIndex > -1) { store.wrong.words.splice(rIndex, 1) } + store.wrong.length = store.wrong.words.length } function delSimpleWord(val: Word) { @@ -49,6 +46,7 @@ export function useWordOptions() { if (rIndex > -1) { store.known.words.splice(rIndex, 1) } + store.known.length = store.known.words.length } return { @@ -75,6 +73,7 @@ export function useArticleOptions() { } else { store.collectArticle.articles.push(val) } + store.collectArticle.length = store.collectArticle.articles.length } return { diff --git a/src/pages/pc/Setting.vue b/src/pages/pc/Setting.vue index 6c51df00..c59fda70 100644 --- a/src/pages/pc/Setting.vue +++ b/src/pages/pc/Setting.vue @@ -388,7 +388,7 @@ function importData(e) { - -
-
-
{{ props.article.titleTranslate }}
-
- -
- -
- 显示题目 -
-
- -
- + @@ -510,6 +510,7 @@ let showQuestions = $ref(false) .titleTranslate { @extend .title; font-size: 1.2rem; + margin-top: 0.5rem; font-family: var(--zh-article-family); font-weight: bold; } diff --git a/src/pages/pc/article/practice-article/index.vue b/src/pages/pc/article/practice-article/index.vue index de3593e8..3f744849 100644 --- a/src/pages/pc/article/practice-article/index.vue +++ b/src/pages/pc/article/practice-article/index.vue @@ -8,9 +8,6 @@ import {useBaseStore} from "@/stores/base.ts"; import EditSingleArticleModal from "@/pages/pc/article/components/EditSingleArticleModal.vue"; import {usePracticeStore} from "@/stores/practice.ts"; import {emitter, EventKey, useEvents} from "@/utils/eventBus.ts"; -import IconWrapper from "@/pages/pc/components/IconWrapper.vue"; -import {Icon} from "@iconify/vue"; -import Tooltip from "@/pages/pc/components/Tooltip.vue"; import {useRuntimeStore} from "@/stores/runtime.ts"; import {useSettingStore} from "@/stores/setting.ts"; import BaseIcon from "@/components/BaseIcon.vue"; @@ -19,6 +16,7 @@ import ArticleList from "@/pages/pc/components/list/ArticleList.vue"; import {useOnKeyboardEventListener} from "@/hooks/event.ts"; import {genArticleSectionData, usePlaySentenceAudio} from "@/hooks/article.ts"; import {ElProgress} from 'element-plus'; +import router from "@/router.ts"; const store = useBaseStore() const statisticsStore = usePracticeStore() @@ -53,12 +51,13 @@ function next() { } function init() { - //todo 这个页面,直接访问白屏 - if (!store.currentBook.articles.length) return + if (!store.currentBook?.articles?.length) { + router.push('/article') + return + } articleData.articles = cloneDeep(store.currentBook.articles) getCurrentPractice() console.log('inin', articleData.article) - } function setArticle(val: Article) { @@ -125,8 +124,8 @@ function edit(val: Article = articleData.article) { function wrong(word: Word) { let lowerName = word.word.toLowerCase(); - if (!store.wrong.originWords.find((v: Word) => v.word.toLowerCase() === lowerName)) { - store.wrong.originWords.push(word) + if (!store.wrong.words.find((v: Word) => v.word.toLowerCase() === lowerName)) { + store.wrong.words.push(word) } if (!store.knownWordsWithSimpleWords.includes(lowerName)) { } @@ -288,46 +287,33 @@ const {playSentenceAudio} = usePlaySentenceAudio()
-
diff --git a/src/pages/pc/components/Panel.vue b/src/pages/pc/components/Panel.vue index d3f56056..dd5d6179 100644 --- a/src/pages/pc/components/Panel.vue +++ b/src/pages/pc/components/Panel.vue @@ -1,217 +1,35 @@ diff --git a/src/pages/pc/components/dialog/Dialog.vue b/src/pages/pc/components/dialog/Dialog.vue index d62bd09a..5b80d46a 100644 --- a/src/pages/pc/components/dialog/Dialog.vue +++ b/src/pages/pc/components/dialog/Dialog.vue @@ -172,10 +172,8 @@ async function cancel() {
{{ content }}