From d34cb7b5a4d70ff69af2e9736e089abc975bfe87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=E6=A2=A6?= Date: Wed, 6 May 2026 15:56:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8D=95=E8=AF=8D=E4=B9=A6=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2+=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .components.d.ts | 4 - src/components/cards/TaskCard.vue | 35 +- src/components/loading/LoadingState.vue | 25 +- src/router/index.ts | 6 + src/views/AnswerQuestions/WrongRetrain.vue | 35 +- src/views/EnglishTools/WordBook.vue | 256 +++++++++++++++ .../components/WordBookFilterBar.vue | 96 ++++++ .../EnglishTools/components/WordCard.vue | 109 +++++++ .../components/WordDetailDialog.vue | 305 ++++++++++++++++++ src/views/EnglishTools/index.vue | 8 + src/views/LoginView.vue | 4 +- src/views/Profile.vue | 24 +- src/views/Subjects/SubjectDetail.vue | 24 +- src/views/Subjects/TextbookDetail.vue | 27 +- src/views/Subjects/WrongQuestions.vue | 71 ++-- .../Subjects/components/SelectBookDrawer.vue | 47 +-- 16 files changed, 864 insertions(+), 212 deletions(-) create mode 100644 src/views/EnglishTools/WordBook.vue create mode 100644 src/views/EnglishTools/components/WordBookFilterBar.vue create mode 100644 src/views/EnglishTools/components/WordCard.vue create mode 100644 src/views/EnglishTools/components/WordDetailDialog.vue diff --git a/.components.d.ts b/.components.d.ts index 2dddab0..fba3cc0 100644 --- a/.components.d.ts +++ b/.components.d.ts @@ -13,7 +13,6 @@ declare module 'vue' { AnalysisLineChart: typeof import('./src/components/analysis/AnalysisLineChart.vue')['default'] AnalysisStatCard: typeof import('./src/components/analysis/AnalysisStatCard.vue')['default'] AppHeader: typeof import('./src/components/layout/AppHeader.vue')['default'] - ChoiceAnswerPanel: typeof import('./src/components/answerQuestions/ChoiceAnswerPanel.vue')['default'] ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider'] ElDialog: typeof import('element-plus/es')['ElDialog'] ElDrawer: typeof import('element-plus/es')['ElDrawer'] @@ -25,8 +24,6 @@ declare module 'vue' { LmStudentTable: typeof import('./src/components/lm/LmStudentTable.vue')['default'] LoadingState: typeof import('./src/components/loading/LoadingState.vue')['default'] PageFrame: typeof import('./src/components/layout/PageFrame.vue')['default'] - QuestionNumberNav: typeof import('./src/components/answerQuestions/QuestionNumberNav.vue')['default'] - QuestionStemPanel: typeof import('./src/components/answerQuestions/QuestionStemPanel.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SubjectAnalysisContent: typeof import('./src/components/analysis/SubjectAnalysisContent.vue')['default'] @@ -36,6 +33,5 @@ declare module 'vue' { TabBar: typeof import('./src/components/layout/TabBar.vue')['default'] TaskCard: typeof import('./src/components/cards/TaskCard.vue')['default'] TaskSidebar: typeof import('./src/components/tasks/TaskSidebar.vue')['default'] - UploadAnswerPanel: typeof import('./src/components/answerQuestions/UploadAnswerPanel.vue')['default'] } } diff --git a/src/components/cards/TaskCard.vue b/src/components/cards/TaskCard.vue index 9be8a20..ddf1d4b 100644 --- a/src/components/cards/TaskCard.vue +++ b/src/components/cards/TaskCard.vue @@ -10,7 +10,13 @@ x20 - + @@ -78,33 +84,6 @@ defineProps<{ } .task-btn { - display: inline-flex; - align-items: center; - justify-content: center; flex-shrink: 0; - min-height: 4.125rem; - min-width: 10.5rem; - padding: 0 24px; - border: none; - border-radius: 9999px; - font-size: 1.75rem; - font-weight: 500; - line-height: 1; - color: #fff; - background: #3d78f2; - cursor: pointer; - - &:hover { - background: #356de0; - } - - &.is-disabled { - background: #aec4f2; - cursor: not-allowed; - - &:hover { - background: #aec4f2; - } - } } diff --git a/src/components/loading/LoadingState.vue b/src/components/loading/LoadingState.vue index 363f5a3..40dbcde 100644 --- a/src/components/loading/LoadingState.vue +++ b/src/components/loading/LoadingState.vue @@ -13,7 +13,12 @@ error

{{ errorText }}

- @@ -98,24 +103,6 @@ defineEmits<{ &__retry-btn { margin-top: 4px; - padding: 8px 24px; - border: none; - border-radius: 20px; - background: $theme-color; - color: #333; - font-size: 13px; - font-weight: 500; - cursor: pointer; - transition: background 0.2s, transform 0.15s; - - &:hover { - background: $hover-theme-fill; - transform: translateY(-1px); - } - - &:active { - transform: translateY(0); - } } // 加载中旋转动画 diff --git a/src/router/index.ts b/src/router/index.ts index 580ffe0..3a1f016 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -79,6 +79,12 @@ const router = createRouter({ name: 'english-tools', component: () => import('@/views/EnglishTools/index.vue'), }, + { + path: '/english-tools/word-book', + name: 'english-word-book', + component: () => import('@/views/EnglishTools/WordBook.vue'), + meta: { hideLayout: true }, + }, { path: '/insights', name: 'insights', diff --git a/src/views/AnswerQuestions/WrongRetrain.vue b/src/views/AnswerQuestions/WrongRetrain.vue index 06bc892..afcfce5 100644 --- a/src/views/AnswerQuestions/WrongRetrain.vue +++ b/src/views/AnswerQuestions/WrongRetrain.vue @@ -38,10 +38,17 @@
用时: {{ currentQuestion.duration }}s
- +
@@ -370,28 +377,6 @@ function handleBack() { gap: 28px; } -.next-btn { - border-radius: 90px; - border: none; - background: #2f80ed; - color: #fff; - padding: 12px 32px; - font-size: 24px; - cursor: pointer; -} - -.light-action-btn { - min-width: 150px; - border: none; - border-radius: 90px; - background: rgba(51, 126, 255, 0.10); - color: #2d6fe0; - cursor: pointer; - font-size: 22px; - font-weight: 500; - padding: 12px 26px; -} - .page-content { flex: 1; min-height: 0; diff --git a/src/views/EnglishTools/WordBook.vue b/src/views/EnglishTools/WordBook.vue new file mode 100644 index 0000000..ec4e399 --- /dev/null +++ b/src/views/EnglishTools/WordBook.vue @@ -0,0 +1,256 @@ + + + + + diff --git a/src/views/EnglishTools/components/WordBookFilterBar.vue b/src/views/EnglishTools/components/WordBookFilterBar.vue new file mode 100644 index 0000000..4072084 --- /dev/null +++ b/src/views/EnglishTools/components/WordBookFilterBar.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/src/views/EnglishTools/components/WordCard.vue b/src/views/EnglishTools/components/WordCard.vue new file mode 100644 index 0000000..ab6f43e --- /dev/null +++ b/src/views/EnglishTools/components/WordCard.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/src/views/EnglishTools/components/WordDetailDialog.vue b/src/views/EnglishTools/components/WordDetailDialog.vue new file mode 100644 index 0000000..92bb9fd --- /dev/null +++ b/src/views/EnglishTools/components/WordDetailDialog.vue @@ -0,0 +1,305 @@ + + + + + diff --git a/src/views/EnglishTools/index.vue b/src/views/EnglishTools/index.vue index c3f1fa8..0ef0215 100644 --- a/src/views/EnglishTools/index.vue +++ b/src/views/EnglishTools/index.vue @@ -20,6 +20,7 @@ v-for="tool in pageTools(pageIndex - 1)" :key="tool + pageIndex" class="tool-card" + @click="handleToolClick(tool)" >

{{ tool }}

@@ -44,6 +45,7 @@