diff --git a/frontend_management/Dockerfile b/frontend_management/Dockerfile index 67b09c92..d27e291c 100644 --- a/frontend_management/Dockerfile +++ b/frontend_management/Dockerfile @@ -44,5 +44,4 @@ ENV PORT=3001 ENV NUXT_HOST=0.0.0.0 ENV NUXT_PORT=3001 -# Start the application using preview command CMD ["node", ".output/server/index.mjs"] diff --git a/frontend_management/components/course/ApprovalHistoryTab.vue b/frontend_management/components/course/ApprovalHistoryTab.vue new file mode 100644 index 00000000..f1dd8942 --- /dev/null +++ b/frontend_management/components/course/ApprovalHistoryTab.vue @@ -0,0 +1,104 @@ + + + diff --git a/frontend_management/pages/admin/courses/[id].vue b/frontend_management/pages/admin/courses/[id].vue index a78bd809..1dd1ac68 100644 --- a/frontend_management/pages/admin/courses/[id].vue +++ b/frontend_management/pages/admin/courses/[id].vue @@ -119,7 +119,7 @@
-

ไทม์ไลน์

+

ข้อมูลระบบ

สร้างเมื่อ diff --git a/frontend_management/pages/admin/users/index.vue b/frontend_management/pages/admin/users/index.vue index edb9acde..b5570d7e 100644 --- a/frontend_management/pages/admin/users/index.vue +++ b/frontend_management/pages/admin/users/index.vue @@ -86,7 +86,7 @@
Avatar @@ -168,7 +168,7 @@
Avatar diff --git a/frontend_management/pages/instructor/courses/[id]/chapters/[chapterId]/lessons/[lessonId]/quiz.vue b/frontend_management/pages/instructor/courses/[id]/chapters/[chapterId]/lessons/[lessonId]/quiz.vue index 666b5df3..6e89fe33 100644 --- a/frontend_management/pages/instructor/courses/[id]/chapters/[chapterId]/lessons/[lessonId]/quiz.vue +++ b/frontend_management/pages/instructor/courses/[id]/chapters/[chapterId]/lessons/[lessonId]/quiz.vue @@ -121,6 +121,10 @@ v-model="quizSettings.is_skippable" label="ทำแบบทดสอบข้ามได้" /> +
{ shuffle_questions: quizSettings.value.shuffle_questions, shuffle_choices: quizSettings.value.shuffle_choices, show_answers_after_completion: quizSettings.value.show_answers_after_completion, - is_skippable: quizSettings.value.is_skippable + is_skippable: quizSettings.value.is_skippable, + allow_multiple_attempts: quizSettings.value.allow_multiple_attempts }); $q.notify({ type: 'positive', message: response.message, position: 'top' }); } catch (error) { @@ -509,7 +515,8 @@ const fetchLesson = async () => { shuffle_questions: data.quiz.shuffle_questions || false, shuffle_choices: data.quiz.shuffle_choices || false, show_answers_after_completion: data.quiz.show_answers_after_completion !== false, - is_skippable: data.quiz.is_skippable || false + is_skippable: data.quiz.is_skippable || false, + allow_multiple_attempts: data.quiz.allow_multiple_attempts || false }; // Load questions from API diff --git a/frontend_management/pages/instructor/courses/[id]/index.vue b/frontend_management/pages/instructor/courses/[id]/index.vue index e95cc857..d5ad268a 100644 --- a/frontend_management/pages/instructor/courses/[id]/index.vue +++ b/frontend_management/pages/instructor/courses/[id]/index.vue @@ -110,6 +110,7 @@ + @@ -135,6 +136,11 @@ + + + + + diff --git a/frontend_management/services/instructor.service.ts b/frontend_management/services/instructor.service.ts index 0c192def..be75eb83 100644 --- a/frontend_management/services/instructor.service.ts +++ b/frontend_management/services/instructor.service.ts @@ -589,9 +589,40 @@ export const instructorService = { `/api/instructors/courses/${courseId}/announcements/${announcementId}/attachments/${attachmentId}`, { method: 'DELETE' } ); + }, + async getCourseApprovalHistory(courseId: number): Promise { + const response = await authRequest<{ + code: number; + message: string; + data: { + approval_history: ApprovalHistory[]; + current_status: string; + course_title: { en: string; th: string }; + course_id: number; + } + }>(`/api/instructors/courses/${courseId}/approval-history`); + return response.data.approval_history; } }; +// Approval History Interface +export interface ApprovalHistory { + id: number; + action: string; + comment: string | null; + created_at: string; + submitter: { + id: number; + username: string; + email: string; + }; + reviewer: { + id: number; + username: string; + email: string; + } | null; +} + // Create course request export interface CreateCourseRequest { category_id: number; @@ -678,6 +709,7 @@ export interface QuizResponse { shuffle_choices: boolean; show_answers_after_completion: boolean; is_skippable: boolean; + allow_multiple_attempts: boolean; created_at?: string; updated_at?: string; questions?: QuizQuestionResponse[]; @@ -692,6 +724,7 @@ export interface UpdateQuizSettingsRequest { shuffle_choices: boolean; show_answers_after_completion: boolean; is_skippable: boolean; + allow_multiple_attempts: boolean; } export interface CreateChapterRequest {