From 795726aea505ab8d1e704f708e1983fe2b8d2fea Mon Sep 17 00:00:00 2001 From: PhuocNTB Date: Tue, 30 Jun 2026 12:37:55 +0700 Subject: [PATCH] fix lam bai --- client/app.go | 291 +++++++++++++++--- client/frontend/src/app.css | 49 +++ client/frontend/src/main.js | 60 +++- client/frontend/wailsjs/go/main/App.d.ts | 10 + client/frontend/wailsjs/go/main/App.js | 20 ++ server/uploads/exams/2/papers/3/main.pdf | Bin 0 -> 36071 bytes .../gunny-admin-profiles-20260629-150338.json | 28 ++ .../exams/2/papers/3/resources/horse_icon.png | Bin 0 -> 13244 bytes 8 files changed, 407 insertions(+), 51 deletions(-) create mode 100644 server/uploads/exams/2/papers/3/main.pdf create mode 100644 server/uploads/exams/2/papers/3/resources/gunny-admin-profiles-20260629-150338.json create mode 100644 server/uploads/exams/2/papers/3/resources/horse_icon.png diff --git a/client/app.go b/client/app.go index f84685d..03d6860 100644 --- a/client/app.go +++ b/client/app.go @@ -10,12 +10,13 @@ import ( "encoding/json" "errors" "fmt" + "html" "io" "log" "mime/multipart" "net/http" + "net/url" "os" - "os/exec" "path/filepath" "strings" "sync" @@ -304,12 +305,68 @@ func (a *App) startLocalServer() { Handler: mux, } + mux.HandleFunc("/exam-view", func(w http.ResponseWriter, r *http.Request) { + target := strings.TrimSpace(r.URL.Query().Get("url")) + title := strings.TrimSpace(r.URL.Query().Get("title")) + if target == "" { + http.Error(w, "missing url", http.StatusBadRequest) + return + } + if title == "" { + title = "Xem trong Simple Care" + } + w.Header().Set("Content-Type", "text/html; charset=utf-8") + _, _ = fmt.Fprintf(w, examViewHTML, html.EscapeString(title), html.EscapeString(title), html.EscapeString(target)) + }) + mux.HandleFunc("/exam-close", func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Access-Control-Allow-Origin", "*") + if r.Method == "OPTIONS" { + w.Header().Set("Access-Control-Allow-Methods", "GET, OPTIONS") + return + } + go runtime.WindowReloadApp(a.ctx) + w.Write([]byte("ok")) + }) + go func() { _ = server.ListenAndServe() }() log.Println("[LOCALSERVER] Callback server started on http://127.0.0.1:34115") } +const examViewHTML = ` + + + + +%s + + + +
+ +%s +
+
+ +
+ + +` + // loadSession nạp session từ file cục bộ func (a *App) loadSession() { a.mu.Lock() @@ -1215,72 +1272,210 @@ func (a *App) SendChatMessage(body string) error { return nil } -func (a *App) OpenExamQuiz() error { +func (a *App) examStudentContext() (int64, *StudentExamSnapshot, error) { a.mu.Lock() - var url string - if a.dashboard.Exam != nil { - url = strings.TrimSpace(a.dashboard.Exam.QuizURL) + defer a.mu.Unlock() + if a.student == nil { + return 0, nil, errors.New("chưa đăng nhập") } - a.mu.Unlock() - if url == "" { - return errors.New("Phòng thi chưa cấu hình link trắc nghiệm") + if a.dashboard.Exam == nil { + return 0, nil, errors.New("không trong giờ thi") } - return openPrivateBrowser(url) + return a.student.StudentID, a.dashboard.Exam, nil } -func openPrivateBrowser(url string) error { - tries := [][]string{ - {"cmd", "/c", "start", "", "chrome", "--incognito", "--new-window", "--disk-cache-size=1", url}, - {"cmd", "/c", "start", "", "msedge", "--inprivate", "--new-window", url}, - {"cmd", "/c", "start", "", url}, +func (a *App) openExamWebView(targetURL, title string) error { + targetURL = strings.TrimSpace(targetURL) + if targetURL == "" { + return errors.New("không có nội dung để mở") } - var lastErr error - for _, args := range tries { - if err := exec.Command(args[0], args[1:]...).Start(); err != nil { - lastErr = err - continue - } - return nil - } - if lastErr != nil { - return lastErr - } - return errors.New("không mở được trình duyệt") + wrapper := fmt.Sprintf( + "http://127.0.0.1:34115/exam-view?url=%s&title=%s", + url.QueryEscape(targetURL), + url.QueryEscape(title), + ) + runtime.WindowExecJS(a.ctx, fmt.Sprintf("window.location.href = %q", wrapper)) + return nil } -func (a *App) OpenExamPaper() error { - a.mu.Lock() - student := a.student - exam := a.dashboard.Exam - a.mu.Unlock() - if student == nil { - return errors.New("chưa đăng nhập") - } - if exam == nil || !exam.PaperSent { - return errors.New("Giảng viên chưa gửi đề") - } - dlURL := fmt.Sprintf("http://127.0.0.1:8080/api/student/exam/download?studentRkId=%d&kind=pdf", student.StudentID) - resp, err := http.Get(dlURL) +func (a *App) GetExamPaperViewURL() (string, error) { + studentID, exam, err := a.examStudentContext() if err != nil { - return err + return "", err + } + if !exam.PaperSent { + return "", errors.New("Giảng viên chưa gửi đề") + } + return fmt.Sprintf("http://127.0.0.1:8080/api/student/exam/download?studentRkId=%d&kind=pdf", studentID), nil +} + +func (a *App) GetExamQuizViewURL() (string, error) { + _, exam, err := a.examStudentContext() + if err != nil { + return "", err + } + quizURL := strings.TrimSpace(exam.QuizURL) + if quizURL == "" { + return "", errors.New("Phòng thi chưa cấu hình link trắc nghiệm") + } + return quizURL, nil +} + +func (a *App) GetExamPaperFiles() (map[string]any, error) { + studentID, exam, err := a.examStudentContext() + if err != nil { + return nil, err + } + if !exam.PaperSent { + return nil, errors.New("Giảng viên chưa gửi đề") + } + apiURL := fmt.Sprintf("http://127.0.0.1:8080/api/student/exam/paper-files?studentRkId=%d", studentID) + resp, err := http.Get(apiURL) + if err != nil { + return nil, err } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { - return errors.New("không tải được đề") + return nil, errors.New("không tải được danh sách tài nguyên") } - dir := filepath.Join(os.TempDir(), "SimpleCareExam") - _ = os.MkdirAll(dir, 0755) - dest := filepath.Join(dir, fmt.Sprintf("de_thi_%d.pdf", exam.ExamRoomID)) - f, err := os.Create(dest) + var payload map[string]any + if err := json.NewDecoder(resp.Body).Decode(&payload); err != nil { + return nil, err + } + base := "http://127.0.0.1:8080" + if pdf, ok := payload["pdfUrl"].(string); ok && pdf != "" && !strings.HasPrefix(pdf, "http") { + payload["pdfUrl"] = base + pdf + } + if raw, ok := payload["resources"].([]any); ok { + for i, item := range raw { + m, ok := item.(map[string]any) + if !ok { + continue + } + if u, ok := m["url"].(string); ok && u != "" && !strings.HasPrefix(u, "http") { + m["url"] = base + u + } + raw[i] = m + } + payload["resources"] = raw + } + return payload, nil +} + +func (a *App) OpenExamPaper() error { + viewURL, err := a.GetExamPaperViewURL() if err != nil { return err } - if _, err := io.Copy(f, resp.Body); err != nil { - f.Close() + title := "Đề thi" + a.mu.Lock() + if a.dashboard.Exam != nil && strings.TrimSpace(a.dashboard.Exam.PaperTitle) != "" { + title = strings.TrimSpace(a.dashboard.Exam.PaperTitle) + } + a.mu.Unlock() + return a.openExamWebView(viewURL, title) +} + +func (a *App) OpenExamQuiz() error { + viewURL, err := a.GetExamQuizViewURL() + if err != nil { return err } + return a.openExamWebView(viewURL, "Làm trắc nghiệm") +} + +func (a *App) OpenExamResource(fileID uint) error { + studentID, _, err := a.examStudentContext() + if err != nil { + return err + } + if fileID == 0 { + return errors.New("tài nguyên không hợp lệ") + } + viewURL := fmt.Sprintf( + "http://127.0.0.1:8080/api/student/exam/download?studentRkId=%d&kind=resource&fileId=%d", + studentID, fileID, + ) + title := "Tài nguyên đề thi" + files, err := a.GetExamPaperFiles() + if err == nil { + if raw, ok := files["resources"].([]any); ok { + for _, item := range raw { + m, ok := item.(map[string]any) + if !ok { + continue + } + id, _ := m["id"].(float64) + if uint(id) == fileID { + if name, ok := m["fileName"].(string); ok && name != "" { + title = name + } + break + } + } + } + } + return a.openExamWebView(viewURL, title) +} + +func (a *App) DownloadExamResource(fileID uint) (string, error) { + studentID, exam, err := a.examStudentContext() + if err != nil { + return "", err + } + if fileID == 0 { + return "", errors.New("tài nguyên không hợp lệ") + } + fileName := fmt.Sprintf("resource_%d", fileID) + files, err := a.GetExamPaperFiles() + if err == nil { + if raw, ok := files["resources"].([]any); ok { + for _, item := range raw { + m, ok := item.(map[string]any) + if !ok { + continue + } + id, _ := m["id"].(float64) + if uint(id) == fileID { + if name, ok := m["fileName"].(string); ok && name != "" { + fileName = filepath.Base(name) + } + break + } + } + } + } + dlURL := fmt.Sprintf( + "http://127.0.0.1:8080/api/student/exam/download?studentRkId=%d&kind=resource&fileId=%d", + studentID, fileID, + ) + resp, err := http.Get(dlURL) + if err != nil { + return "", err + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + return "", errors.New("không tải được tài nguyên") + } + configDir, err := os.UserConfigDir() + if err != nil { + return "", err + } + dir := filepath.Join(configDir, "SimpleCare", "ExamResources", fmt.Sprintf("room_%d", exam.ExamRoomID)) + if err := os.MkdirAll(dir, 0755); err != nil { + return "", err + } + dest := filepath.Join(dir, fileName) + f, err := os.Create(dest) + if err != nil { + return "", err + } + if _, err := io.Copy(f, resp.Body); err != nil { + f.Close() + return "", err + } f.Close() - return exec.Command("cmd", "/c", "start", "", dest).Start() + return dest, nil } func (a *App) SubmitExamWork() (string, error) { diff --git a/client/frontend/src/app.css b/client/frontend/src/app.css index e783546..ad00a4a 100644 --- a/client/frontend/src/app.css +++ b/client/frontend/src/app.css @@ -415,6 +415,55 @@ body { color: var(--text-muted); } +.exam-resources { + margin-top: 0.9rem; + padding-top: 0.85rem; + border-top: 1px dashed #c4b5fd; +} + +.exam-resources-title { + font-size: 0.78rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.04em; + color: #6d28d9; + margin-bottom: 0.5rem; +} + +.exam-resource-row { + display: flex; + align-items: center; + justify-content: space-between; + gap: 0.65rem; + padding: 0.45rem 0; + border-bottom: 1px solid #ede9fe; +} + +.exam-resource-row:last-child { + border-bottom: none; +} + +.exam-resource-name { + font-size: 0.84rem; + color: var(--text-secondary); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + flex: 1; + min-width: 0; +} + +.exam-resource-btns { + display: flex; + gap: 0.35rem; + flex-shrink: 0; +} + +.btn-sm { + padding: 0.35rem 0.65rem; + font-size: 0.78rem; +} + .stats-grid { display: grid; grid-template-columns: repeat(3, 1fr); diff --git a/client/frontend/src/main.js b/client/frontend/src/main.js index 3ad1ffc..2953ac3 100644 --- a/client/frontend/src/main.js +++ b/client/frontend/src/main.js @@ -178,6 +178,40 @@ function renderShiftsTable(shifts) { `; } +let examPaperFiles = null; + +function renderExamResources() { + if (!examPaperFiles?.resources?.length) return ''; + const rows = examPaperFiles.resources.map((r) => ` +
+ ${escapeHtml(r.fileName || 'Tài nguyên')} +
+ + +
+
+ `).join(''); + return ` +
+
Tài nguyên kèm đề
+ ${rows} +
+ `; +} + +async function loadExamPaperFiles() { + const ex = stats.exam; + if (!ex || stats.monitorMode !== 'exam' || !ex.paperSent) { + examPaperFiles = null; + return; + } + try { + examPaperFiles = await window.go.main.App.GetExamPaperFiles(); + } catch { + examPaperFiles = null; + } +} + function renderExamPanel() { const ex = stats.exam; if (!ex || stats.monitorMode !== 'exam') return ''; @@ -195,12 +229,13 @@ function renderExamPanel() {
📝 ${ex.examName || 'Phòng thi'}
-

Bạn đang trong giờ thi. Làm bài theo hướng dẫn của giảng viên.

+

Bạn đang trong giờ thi. Đề, link thi và tài nguyên mở trong app — không dùng trình duyệt ngoài.

${paperBtn} ${quizBtn} ${submitBtn}
+ ${renderExamResources()} `; } @@ -221,16 +256,35 @@ function wireExamPanel() { alert(`Đã nộp bài: ${name}`); const fresh = await window.go.main.App.GetStats(); stats = { ...stats, ...fresh }; + await loadExamPaperFiles(); updateExamPanel(); } catch (e) { alert(e?.message || e || 'Nộp bài thất bại'); } }); + document.querySelectorAll('.btn-exam-res-view').forEach((btn) => { + btn.addEventListener('click', () => { + const id = Number(btn.getAttribute('data-id')); + window.go.main.App.OpenExamResource(id).catch((e) => alert(e?.message || e)); + }); + }); + document.querySelectorAll('.btn-exam-res-dl').forEach((btn) => { + btn.addEventListener('click', async () => { + const id = Number(btn.getAttribute('data-id')); + try { + const path = await window.go.main.App.DownloadExamResource(id); + alert(`Đã tải về:\n${path}`); + } catch (e) { + alert(e?.message || e || 'Tải thất bại'); + } + }); + }); } -function updateExamPanel() { +async function updateExamPanel() { const host = document.getElementById('exam-panel-host'); if (!host) return; + await loadExamPaperFiles(); host.innerHTML = renderExamPanel(); wireExamPanel(); } @@ -485,7 +539,7 @@ function renderChatMessages(silent = false) { } function escapeHtml(s) { - return String(s).replace(/&/g, '&').replace(//g, '>'); + return String(s).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"'); } async function sendStudentChat() { diff --git a/client/frontend/wailsjs/go/main/App.d.ts b/client/frontend/wailsjs/go/main/App.d.ts index bc69f32..2988c00 100644 --- a/client/frontend/wailsjs/go/main/App.d.ts +++ b/client/frontend/wailsjs/go/main/App.d.ts @@ -5,12 +5,20 @@ export function CheckLoginStatus():Promise; export function ClearChatUnread():Promise; +export function DownloadExamResource(arg1:number):Promise; + export function GetChatConversations():Promise>>; export function GetChatMessages(arg1:number):Promise>>; export function GetChatUnread():Promise; +export function GetExamPaperFiles():Promise>; + +export function GetExamPaperViewURL():Promise; + +export function GetExamQuizViewURL():Promise; + export function GetStats():Promise>; export function GetStudentInfo():Promise>; @@ -23,6 +31,8 @@ export function OpenExamPaper():Promise; export function OpenExamQuiz():Promise; +export function OpenExamResource(arg1:number):Promise; + export function SendChatMessage(arg1:string):Promise; export function SendWebcamFrame(arg1:string):Promise; diff --git a/client/frontend/wailsjs/go/main/App.js b/client/frontend/wailsjs/go/main/App.js index fb104af..e0d6634 100644 --- a/client/frontend/wailsjs/go/main/App.js +++ b/client/frontend/wailsjs/go/main/App.js @@ -10,6 +10,10 @@ export function ClearChatUnread() { return window['go']['main']['App']['ClearChatUnread'](); } +export function DownloadExamResource(arg1) { + return window['go']['main']['App']['DownloadExamResource'](arg1); +} + export function GetChatConversations() { return window['go']['main']['App']['GetChatConversations'](); } @@ -22,6 +26,18 @@ export function GetChatUnread() { return window['go']['main']['App']['GetChatUnread'](); } +export function GetExamPaperFiles() { + return window['go']['main']['App']['GetExamPaperFiles'](); +} + +export function GetExamPaperViewURL() { + return window['go']['main']['App']['GetExamPaperViewURL'](); +} + +export function GetExamQuizViewURL() { + return window['go']['main']['App']['GetExamQuizViewURL'](); +} + export function GetStats() { return window['go']['main']['App']['GetStats'](); } @@ -46,6 +62,10 @@ export function OpenExamQuiz() { return window['go']['main']['App']['OpenExamQuiz'](); } +export function OpenExamResource(arg1) { + return window['go']['main']['App']['OpenExamResource'](arg1); +} + export function SendChatMessage(arg1) { return window['go']['main']['App']['SendChatMessage'](arg1); } diff --git a/server/uploads/exams/2/papers/3/main.pdf b/server/uploads/exams/2/papers/3/main.pdf new file mode 100644 index 0000000000000000000000000000000000000000..cffc71b4e20d588de347d192598045666c535553 GIT binary patch literal 36071 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%0Aar8ruetI zKvX6MfGK^~0Ro&4B^m>m$M;+nzv%!$f(@V&{UxPCDgOY713HY#q5&`>08&9g3UN3R zi5hT-=%&KE&zUUqH=VcO8ro(#UH)iegHv3!AuAa2rDNNr2U}!F5QE2d{+vh zjEQOi$pKn~o`O)QJP^M?s2`XQf`bDH8BzB66Vmxj0{ovK9nkaN-;=d^M@&2f@GvKx z;~%h%_)X?`_Y2_R;|BXt7!99izb)zYzO_+v_nX#2#5E?`b&f))Gci9up?IHcty_t( z%^OM0+kNWqFWZjR6K2xypsE|&Vev8YJ64B@aqYCp5&CaZ{4%!{gK{6s*DmNsKU|(3gISJ7Rrz;0 z(q73UuK>S|j?FBll9J%onB|eTv9$Iy|q`>?&as#dEfEy(yRU8nM(u9$?U2 z%dcg*R#@bzs6r};yd@q+4BtA3r6!7&XpljjlQA0=nTP)IBi7p(r7|`(-AmMjZ=@I# z&*kIQlECa$uh?Z@@q-)AFQ)Zq<-VojiRcAZn z?#E+1xH#eY_K~5_bH$r;;+i_9j-C2nC<=Q=vmZaKEo|A!mk~2ujzj-i`G24>|8c|kU!fS(ZuJkz*{M$YFUgsMwY~uskY=)DvH$u5z%BrO zsSK!o9Yf^>Lj6%${5S>_#UPQ(-;c4gLjj`v$1#wu=I_UVwiK+yzaL{~hoMpyq5gi| z0|JMEj5~in1_ki$Kih-CA^)m9_&@Ifb`sPN4E*gL;27ec?Eyjczo>^qCCmBywFm?k zu;xFGp+MPx9OL2uJHtPZA%Sf8@5g|u7VMw@JjTiS&wD^%Tqr;d_4k{t;P5}%19*VXg75NEj9!ov6In{{c3bc#Hr5 literal 0 HcmV?d00001 diff --git a/server/uploads/exams/2/papers/3/resources/gunny-admin-profiles-20260629-150338.json b/server/uploads/exams/2/papers/3/resources/gunny-admin-profiles-20260629-150338.json new file mode 100644 index 0000000..2bfc0ce --- /dev/null +++ b/server/uploads/exams/2/papers/3/resources/gunny-admin-profiles-20260629-150338.json @@ -0,0 +1,28 @@ +{ + "version": 1, + "exportedAt": "2026-06-29T08:03:38.6066807Z", + "profiles": [ + { + "id": "4e08fbd2-15ff-4f37-ba79-44d9f633a248", + "name": "Gà Chill", + "createdAt": "2026-06-27T03:50:45.9698419Z", + "updatedAt": "2026-06-29T01:46:39.7112252Z", + "sshHost": "103.245.236.191", + "sshPort": 22, + "sshUser": "Administrator", + "sshPassword": "pass@123123aA@", + "remoteDbHost": "127.0.0.1", + "remoteDbPort": 1433, + "dbUser": "sa", + "dbPassword": "123123aA@", + "dbTank41": "Db_Tank41", + "dbTank": "Db_Tank", + "dbMember": "Db_Member", + "remoteRequestHost": "127.0.0.1", + "remoteRequestPort": 81, + "resourceUrl": "https://resource.gunnychill.net", + "deployRoot": "C:\\Gunny", + "devRootXml": "E:\\gunny3" + } + ] +} \ No newline at end of file diff --git a/server/uploads/exams/2/papers/3/resources/horse_icon.png b/server/uploads/exams/2/papers/3/resources/horse_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ee5a8416d3b6f541f21313bfc3df827ef55480 GIT binary patch literal 13244 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 I(VxNp3vXP<`Tzg` literal 0 HcmV?d00001