From 9d61f4ee8a7f04eaa080113819e2a10b2c8bb3e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=E6=A2=A6?= Date: Wed, 29 Apr 2026 18:33:31 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AD=A6=E7=A7=91=E9=87=8C=E9=9D=A2?= =?UTF-8?q?=E7=9A=84=E9=A1=B5=E9=9D=A2=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .components.d.ts | 3 + src/App.vue | 15 +- src/assets/loading/empty.svg | 13 + src/assets/subjects/cuotiben.svg | 9 + src/assets/subjects/cuotichonglian.svg | 8 + src/assets/subjects/xueqinfenxi.png | Bin 0 -> 695 bytes src/assets/subjects/xuexishenqi.png | Bin 0 -> 908 bytes src/assets/subjects/zhankai.svg | 4 + src/components/cards/SubjectCard.vue | 22 +- src/components/layout/SubPageHeader.vue | 91 +++ src/components/loading/LoadingState.vue | 145 +++++ src/router/index.ts | 18 + src/styles/global.scss | 1 + src/views/EnglishTools/index.vue | 190 +++++- src/views/Insights/index.vue | 54 +- src/views/Subjects/SubjectDetail.vue | 356 +++++++++++ src/views/Subjects/TextbookDetail.vue | 519 +++++++++++++++ src/views/Subjects/WrongQuestions.vue | 592 ++++++++++++++++++ .../Subjects/components/BookCoverCard.vue | 166 +++++ .../components/PracticeRecordCard.vue | 180 ++++++ .../Subjects/components/SelectBookDrawer.vue | 326 ++++++++++ src/views/Subjects/index.vue | 3 +- src/views/Tasks/index.vue | 2 +- 23 files changed, 2685 insertions(+), 32 deletions(-) create mode 100644 src/assets/loading/empty.svg create mode 100644 src/assets/subjects/cuotiben.svg create mode 100644 src/assets/subjects/cuotichonglian.svg create mode 100644 src/assets/subjects/xueqinfenxi.png create mode 100644 src/assets/subjects/xuexishenqi.png create mode 100644 src/assets/subjects/zhankai.svg create mode 100644 src/components/layout/SubPageHeader.vue create mode 100644 src/components/loading/LoadingState.vue create mode 100644 src/views/Subjects/SubjectDetail.vue create mode 100644 src/views/Subjects/TextbookDetail.vue create mode 100644 src/views/Subjects/WrongQuestions.vue create mode 100644 src/views/Subjects/components/BookCoverCard.vue create mode 100644 src/views/Subjects/components/PracticeRecordCard.vue create mode 100644 src/views/Subjects/components/SelectBookDrawer.vue diff --git a/.components.d.ts b/.components.d.ts index 4845db5..dde0749 100644 --- a/.components.d.ts +++ b/.components.d.ts @@ -10,10 +10,13 @@ declare module 'vue' { ActivityProgress: typeof import('./src/components/tasks/ActivityProgress.vue')['default'] AppHeader: typeof import('./src/components/layout/AppHeader.vue')['default'] ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider'] + ElDrawer: typeof import('element-plus/es')['ElDrawer'] + LoadingState: typeof import('./src/components/loading/LoadingState.vue')['default'] PageFrame: typeof import('./src/components/layout/PageFrame.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SubjectCard: typeof import('./src/components/cards/SubjectCard.vue')['default'] + SubPageHeader: typeof import('./src/components/layout/SubPageHeader.vue')['default'] 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'] diff --git a/src/App.vue b/src/App.vue index d97d0c2..153da9b 100644 --- a/src/App.vue +++ b/src/App.vue @@ -2,20 +2,25 @@
- -
+ +
- +
diff --git a/src/assets/loading/empty.svg b/src/assets/loading/empty.svg new file mode 100644 index 0000000..5380dbd --- /dev/null +++ b/src/assets/loading/empty.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/subjects/cuotiben.svg b/src/assets/subjects/cuotiben.svg new file mode 100644 index 0000000..240bec2 --- /dev/null +++ b/src/assets/subjects/cuotiben.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/subjects/cuotichonglian.svg b/src/assets/subjects/cuotichonglian.svg new file mode 100644 index 0000000..54b2360 --- /dev/null +++ b/src/assets/subjects/cuotichonglian.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/subjects/xueqinfenxi.png b/src/assets/subjects/xueqinfenxi.png new file mode 100644 index 0000000000000000000000000000000000000000..2c2a659250f5eca9a3acfb0814adcad16f2eef8c GIT binary patch literal 695 zcmV;o0!aOdP)51rET58|>@}_6QCK*f{&P zZ{i6Y@B(@Q;|bIgs6mZyGsY*M^jU?r8b@tfkP!Y-Najl_N=<0$pRVfaZlGlOh{bNj zGO;zxPfQ+fD(;7DVYir{xyCb?9ZML4Hr@)BoKnD7;|qxKTts$?h1fZ5*6}8;Rv96f z&$8Fm%CGowZ)1@e#=bh?;bCEmL{!)a9|_pR;t_?8avA+ zf(%`N%X^nHfjjSYs{fz>RX|a+2Z8(U!PwtWViiOr?>8`#_kajWE<3dxO3-FN^1h8A z?sBw>w zE+#+5A*zS^JgwhBnWeuMn$!m(EFRG~=h9!V`zfTJuSD{ffBbXE4W7HF>Qx{C_oDxc douZ_q1W&(y5Jrx7iN62<002ovPDHLkV1nuVHDUk& literal 0 HcmV?d00001 diff --git a/src/assets/subjects/xuexishenqi.png b/src/assets/subjects/xuexishenqi.png new file mode 100644 index 0000000000000000000000000000000000000000..6722d7ad2884fdda1a0ad9112430a709d152bd7a GIT binary patch literal 908 zcmV;719SX|P)95Qg`N-(w2!Af97;pn{MNNCh|z7^MPm z1rc@ukP3n;z^)+7Ks>xjQ~)!1jN!5?9kxIcmUMfXFyWio0Zu~N)$V_Hx&t_JC!Iqjht7}uGQ(Id+VgLq0c!v#*d>+HEJ3)J zw%Y|M`f_X5D{Ty_2{~b(N<5(^cH8`33TL;di-@4Htvl^mL&%A#xzGzFRH}CweSKVF zyS+~&LI!G-A`C*+RhV30*Du@&k)Ck`iyaO zW-lRhevl~E+sX|v!xq4cSY>prhel;|z6S>2n#@@V^}dAlyXN%n>=6v19l*KmHdIfu zTkpPDXLn~F7(`3NSnsw7p8S^c`1^rdtV!g~06CAf9W##+&a_wg3I&ln1JA*t)YdWy ziFHz-^F;0d{DDZwjk6@yhN+%rA6goqml=BMDAxMKU{8}4j-^GDWLjFJ!RQLoK|1hY z&&I=^dt}+*c=KErc=iO|f>xLp4EKt?uw<}4#IHb8+lc8NEl8jP`k9E!2FFvE>Kg5^ z!y+M&3Z$p3oV8<)4Imh$ci(wQH;y`pAhWW i930elXVKG + + + diff --git a/src/components/cards/SubjectCard.vue b/src/components/cards/SubjectCard.vue index 27009b6..bbad5a9 100644 --- a/src/components/cards/SubjectCard.vue +++ b/src/components/cards/SubjectCard.vue @@ -1,11 +1,18 @@ diff --git a/src/components/loading/LoadingState.vue b/src/components/loading/LoadingState.vue new file mode 100644 index 0000000..363f5a3 --- /dev/null +++ b/src/components/loading/LoadingState.vue @@ -0,0 +1,145 @@ + + + + + diff --git a/src/router/index.ts b/src/router/index.ts index ae5a815..e3cfa5a 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -9,6 +9,24 @@ const router = createRouter({ name: 'subjects', component: () => import('@/views/Subjects/index.vue'), }, + { + path: '/subjects/:subject', + name: 'subject-detail', + component: () => import('@/views/Subjects/SubjectDetail.vue'), + meta: { hideLayout: true }, + }, + { + path: '/subjects/:subject/book/:bookId', + name: 'textbook-detail', + component: () => import('@/views/Subjects/TextbookDetail.vue'), + meta: { hideLayout: true }, + }, + { + path: '/subjects/:subject/wrong-questions', + name: 'wrong-questions', + component: () => import('@/views/Subjects/WrongQuestions.vue'), + meta: { hideLayout: true }, + }, { path: '/tasks', name: 'tasks', diff --git a/src/styles/global.scss b/src/styles/global.scss index 59d7cc0..728b6e4 100644 --- a/src/styles/global.scss +++ b/src/styles/global.scss @@ -39,4 +39,5 @@ body { background: rgba(255, 255, 255, 0.3); border: 2px solid rgba(255, 255, 255, 0.6); border-radius: 12px; + padding: 32px; } diff --git a/src/views/EnglishTools/index.vue b/src/views/EnglishTools/index.vue index 9a23f24..429ebc1 100644 --- a/src/views/EnglishTools/index.vue +++ b/src/views/EnglishTools/index.vue @@ -1,33 +1,171 @@ diff --git a/src/views/Insights/index.vue b/src/views/Insights/index.vue index d641e29..c057e3e 100644 --- a/src/views/Insights/index.vue +++ b/src/views/Insights/index.vue @@ -1,33 +1,63 @@ diff --git a/src/views/Subjects/TextbookDetail.vue b/src/views/Subjects/TextbookDetail.vue new file mode 100644 index 0000000..2ef508f --- /dev/null +++ b/src/views/Subjects/TextbookDetail.vue @@ -0,0 +1,519 @@ + + + + + diff --git a/src/views/Subjects/WrongQuestions.vue b/src/views/Subjects/WrongQuestions.vue new file mode 100644 index 0000000..658dbd6 --- /dev/null +++ b/src/views/Subjects/WrongQuestions.vue @@ -0,0 +1,592 @@ + + + + + diff --git a/src/views/Subjects/components/BookCoverCard.vue b/src/views/Subjects/components/BookCoverCard.vue new file mode 100644 index 0000000..72c6559 --- /dev/null +++ b/src/views/Subjects/components/BookCoverCard.vue @@ -0,0 +1,166 @@ + + + + + diff --git a/src/views/Subjects/components/PracticeRecordCard.vue b/src/views/Subjects/components/PracticeRecordCard.vue new file mode 100644 index 0000000..cb70af8 --- /dev/null +++ b/src/views/Subjects/components/PracticeRecordCard.vue @@ -0,0 +1,180 @@ + + + + + diff --git a/src/views/Subjects/components/SelectBookDrawer.vue b/src/views/Subjects/components/SelectBookDrawer.vue new file mode 100644 index 0000000..695ce56 --- /dev/null +++ b/src/views/Subjects/components/SelectBookDrawer.vue @@ -0,0 +1,326 @@ + + + + + diff --git a/src/views/Subjects/index.vue b/src/views/Subjects/index.vue index cf3a380..39a6bc9 100644 --- a/src/views/Subjects/index.vue +++ b/src/views/Subjects/index.vue @@ -16,8 +16,9 @@ const subjects = ['英语', '语文', '数学', '科学'] display: grid; grid-template-columns: repeat(2, 1fr); grid-template-rows: repeat(2, 1fr); - gap: 33px; + gap: 32px; border-radius: 12px; padding: 33px; } + \ No newline at end of file diff --git a/src/views/Tasks/index.vue b/src/views/Tasks/index.vue index 1ab147a..2535634 100644 --- a/src/views/Tasks/index.vue +++ b/src/views/Tasks/index.vue @@ -73,7 +73,7 @@ const currentTasks = computed(() => { min-height: 0; flex-direction: column; border-radius: 12px; - padding: 16px; + // padding: 16px; } .tasks-panel {