From 79983cd6249587f02c6e68e7c444839aac54d960 Mon Sep 17 00:00:00 2001 From: hyoseung930 <35983843+hyoseung930@users.noreply.github.com> Date: Thu, 14 May 2026 13:12:54 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=ED=95=99=EC=8A=B5=20=ED=94=8C=EB=A1=9C?= =?UTF-8?q?=EC=9A=B0=20=EA=B0=9C=ED=8E=B8=20(LearnView,=20FlashcardView,?= =?UTF-8?q?=20StatsView)=20+=20XP/=EB=A0=88=EB=B2=A8/=EB=B1=83=EC=A7=80=20?= =?UTF-8?q?UI=20+=20=ED=80=B4=EC=A6=88=20=EB=82=9C=EC=9D=B4=EB=8F=84=20?= =?UTF-8?q?=EC=84=A0=ED=83=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.vue | 10 +- src/api/index.js | 16 ++- src/router/index.js | 3 + src/views/FlashcardView.vue | 150 ++++++++++++++++++++++++++++ src/views/HomeView.vue | 109 ++++++++++++++++----- src/views/LearnView.vue | 189 +++++++++++++++++++++++++++++++++++ src/views/QuizView.vue | 190 ++++++++++++++++++++++++++++++------ src/views/StatsView.vue | 103 +++++++++++++++++++ 8 files changed, 713 insertions(+), 57 deletions(-) create mode 100644 src/views/FlashcardView.vue create mode 100644 src/views/LearnView.vue create mode 100644 src/views/StatsView.vue diff --git a/src/App.vue b/src/App.vue index 8899077..79f50fd 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,11 +1,13 @@ diff --git a/src/api/index.js b/src/api/index.js index 09f21c1..277a85a 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -21,7 +21,13 @@ export const grammarApi = { } export const quizApi = { - generate: (count = 5) => api.get('/quiz/generate', { params: { count } }), + generate: (count = 10, difficulty, studiedIds) => api.get('/quiz/generate', { + params: { + count, + difficulty: difficulty || undefined, + studied: studiedIds && studiedIds.length ? studiedIds.join(',') : undefined, + }, + }), saveResult: (data) => api.post('/quiz/result', data), } @@ -30,3 +36,11 @@ export const questApi = { complete: (data) => api.post('/quest/complete', data), getStreak: (session) => api.get('/quest/streak', { params: { session } }), } + +export const progressApi = { + getStats: (session) => api.get('/progress/stats', { params: { session } }), + recordWord: (session_id, word_id) => api.post('/progress/word', { session_id, word_id }), + recordQuizAnswer: (data) => api.post('/progress/quiz-answer', data), + recordQuizComplete: (data) => api.post('/progress/quiz-complete', data), + getStudiedWords: (session, date) => api.get('/progress/studied-words', { params: { session, date } }), +} diff --git a/src/router/index.js b/src/router/index.js index efd9027..48ce62e 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -5,9 +5,12 @@ export default createRouter({ history: createWebHistory(), routes: [ { path: '/', component: HomeView }, + { path: '/learn', component: () => import('../views/LearnView.vue') }, { path: '/words', component: () => import('../views/WordsView.vue') }, + { path: '/flashcard', component: () => import('../views/FlashcardView.vue') }, { path: '/phrases', component: () => import('../views/PhrasesView.vue') }, { path: '/quiz', component: () => import('../views/QuizView.vue') }, { path: '/grammar', component: () => import('../views/GrammarView.vue') }, + { path: '/stats', component: () => import('../views/StatsView.vue') }, ], }) diff --git a/src/views/FlashcardView.vue b/src/views/FlashcardView.vue new file mode 100644 index 0000000..dcb357e --- /dev/null +++ b/src/views/FlashcardView.vue @@ -0,0 +1,150 @@ + + + + + diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue index b47d89b..269d8fc 100644 --- a/src/views/HomeView.vue +++ b/src/views/HomeView.vue @@ -1,19 +1,39 @@ + + diff --git a/src/views/LearnView.vue b/src/views/LearnView.vue new file mode 100644 index 0000000..d2f3afb --- /dev/null +++ b/src/views/LearnView.vue @@ -0,0 +1,189 @@ + + + + + diff --git a/src/views/QuizView.vue b/src/views/QuizView.vue index 55c6372..577961d 100644 --- a/src/views/QuizView.vue +++ b/src/views/QuizView.vue @@ -1,88 +1,198 @@ + + diff --git a/src/views/StatsView.vue b/src/views/StatsView.vue new file mode 100644 index 0000000..8ee2260 --- /dev/null +++ b/src/views/StatsView.vue @@ -0,0 +1,103 @@ + + + + +