From 30373fc30e0dc944d7919233ecead7751145e0c4 Mon Sep 17 00:00:00 2001
From: ember <1279347317@qq.com>
Date: Thu, 10 Apr 2025 17:22:27 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=99=BB=E5=BD=95=E5=9C=B0?=
=?UTF-8?q?=E5=9D=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
dist/css/{app.cea75a0f.css => app.abc28add.css} | 2 +-
dist/index.html | 2 +-
dist/js/app.529d1d96.js | 2 ++
dist/js/app.e19dd7a3.js | 2 --
src/App.vue | 2 +-
src/components/BookMark.vue | 2 ++
6 files changed, 7 insertions(+), 5 deletions(-)
rename dist/css/{app.cea75a0f.css => app.abc28add.css} (83%)
create mode 100644 dist/js/app.529d1d96.js
delete mode 100644 dist/js/app.e19dd7a3.js
diff --git a/dist/css/app.cea75a0f.css b/dist/css/app.abc28add.css
similarity index 83%
rename from dist/css/app.cea75a0f.css
rename to dist/css/app.abc28add.css
index 780fb52..dd4b343 100644
--- a/dist/css/app.cea75a0f.css
+++ b/dist/css/app.abc28add.css
@@ -1 +1 @@
-*{padding:0;box-sizing:border-box}*,body{margin:0}body{overflow:hidden}.app{width:100vw;overflow:hidden}.app,.sidebar{display:flex;height:100vh}.sidebar{width:200px;background-color:#f5f5f5;padding:20px;border-right:1px solid #ddd;flex-shrink:0;flex-direction:column}.nav-links{flex:1}.nav-item{display:block;padding:10px;margin-bottom:5px;text-decoration:none;color:#333}.nav-item.router-link-active{background-color:#e0e0e0;border-radius:4px}.footer-info{border-top:1px solid #ddd;padding:10px 0;text-align:center}.version-info{color:#666;font-size:12px;margin-bottom:5px}.source-info{color:#999;font-size:12px}.source-info a{color:#999;text-decoration:none}.source-info a:hover{color:#333}.main-content{flex:1;overflow-y:auto;position:relative}.main-content:has(.problem-detail){overflow:hidden}.loading{font-size:18px;color:#666}.loading,.login-prompt{width:100vw;height:100vh;display:flex;justify-content:center;align-items:center}.login-prompt{flex-direction:column;gap:20px;background-color:#f5f5f5}.title{font-size:32px;font-weight:700;color:#333;margin-bottom:10px}.login-message{font-size:24px;color:#333;text-align:center}.login-button{padding:12px 24px;font-size:18px;color:#fff;background-color:#4caf50;border:none;border-radius:4px;cursor:pointer;transition:all .3s}.login-button:hover{background-color:#45a049;transform:translateY(-2px);box-shadow:0 2px 8px rgba(0,0,0,.1)}.login-note{font-size:14px;color:#666;text-align:center}.problem-list[data-v-4fb05069]{padding:20px}.filters[data-v-4fb05069]{margin-bottom:20px}.filters input[data-v-4fb05069],.filters select[data-v-4fb05069]{margin-right:10px;padding:8px 12px;border:1px solid #ddd;border-radius:4px;outline:none;transition:all .3s}.filters input[data-v-4fb05069]:focus,.filters select[data-v-4fb05069]:focus{border-color:#4caf50;box-shadow:0 0 5px rgba(76,175,80,.2)}.problems-table[data-v-4fb05069]{width:100%;border-collapse:separate;border-spacing:0;border-radius:8px;overflow:hidden;box-shadow:0 0 10px rgba(0,0,0,.1)}.problems-table th[data-v-4fb05069]{background-color:#f8f9fa;font-weight:600;padding:12px;text-align:left;border-bottom:2px solid #ddd}.problems-table td[data-v-4fb05069]{padding:12px;border-bottom:1px solid #eee}.problems-table tr:last-child td[data-v-4fb05069]{border-bottom:none}.problems-table tr[data-v-4fb05069]:hover{background-color:#f5f5f5;cursor:pointer;transition:background-color .2s}.pagination[data-v-4fb05069]{margin-top:20px;display:flex;justify-content:center;align-items:center;gap:15px}.pagination button[data-v-4fb05069]{padding:8px 16px;border:1px solid #ddd;background-color:#fff;border-radius:4px;cursor:pointer;transition:all .3s}.pagination button[data-v-4fb05069]:hover:not(:disabled){background-color:#4caf50;color:#fff;border-color:#4caf50}.pagination button[data-v-4fb05069]:disabled{background-color:#f5f5f5;cursor:not-allowed;color:#999}.pagination span[data-v-4fb05069]{padding:8px 16px;color:#666;font-size:14px;background-color:#f5f5f5;border-radius:4px;min-width:150px;text-align:center}.knowledge-tag[data-v-4fb05069]{background-color:#e8f5e9;color:#2e7d32;padding:4px 8px;margin:0 4px;border-radius:4px;font-size:12px;display:inline-block;transition:all .3s}.knowledge-tag[data-v-4fb05069]:hover{background-color:#4caf50;color:#fff}.knowledge-search[data-v-4fb05069]{position:relative;display:inline-block}.knowledge-search input[data-v-4fb05069]{width:200px}.knowledge-list[data-v-4fb05069]{position:absolute;top:100%;left:0;right:0;background:#fff;border:none;border-radius:4px;max-height:200px;overflow-y:auto;z-index:1000;box-shadow:0 2px 8px rgba(0,0,0,.1)}.knowledge-item[data-v-4fb05069]{padding:10px;cursor:pointer;transition:all .2s}.knowledge-item[data-v-4fb05069]:hover{background-color:#e8f5e9;color:#2e7d32}.status-tag[data-v-4fb05069]{padding:4px 8px;margin:0 4px;border-radius:4px;font-size:12px;display:inline-block;transition:all .3s}.status-tag.unmarked[data-v-4fb05069]{background-color:#f5f5f5;color:#666}.status-tag.solved[data-v-4fb05069]{background-color:#e8f5e9;color:#2e7d32}.status-tag.unsolved[data-v-4fb05069]{background-color:#ffebee;color:#c62828}table td[data-v-4fb05069]:first-child,table th[data-v-4fb05069]:first-child{width:80px;text-align:center}.quick-jump[data-v-4fb05069]{display:flex;align-items:center;gap:8px;margin-left:15px}.quick-jump input[data-v-4fb05069]{width:60px;padding:4px 8px;border:1px solid #ddd;border-radius:4px;text-align:center}.quick-jump button[data-v-4fb05069]{padding:4px 12px}.katex{font-size:1.1em}.katex-display{padding:1em 0}.problem-detail{max-width:99%;margin:0 auto;padding:20px;height:100%;overflow-y:auto}.problem-header{margin-bottom:30px}.problem-meta{margin-top:10px;color:#666}.difficulty{margin-right:20px}.knowledge-tag{background-color:#e0e0e0;padding:2px 6px;margin:0 4px;border-radius:4px;font-size:12px}.content-section{margin-bottom:30px}.example pre{background-color:#f5f5f5;padding:10px;border-radius:4px}.problem-status{margin-top:20px;display:flex;gap:10px}.problem-status button{padding:8px 16px;border:1px solid #ddd;border-radius:4px;background:#fff;cursor:pointer}.problem-status button.active{background-color:#4caf50;color:#fff;border-color:#4caf50}.problem-status button:first-child.active{background-color:#f44;color:#fff;border-color:#f44}.content-section{line-height:1.6}.content-section h1,.content-section h2,.content-section h3,.content-section h4,.content-section h5,.content-section h6{margin-top:1.5em;margin-bottom:.5em}.content-section p{margin:1em 0}.content-section code{background-color:#f5f5f5;font-family:monospace}.content-section pre{background-color:#f5f5f5;padding:1em;border-radius:4px}.content-section ol,.content-section ul{padding-left:2em;margin:1em 0}.content-section blockquote{margin:1em 0;padding-left:1em;border-left:4px solid #ddd;color:#666}.content-section img{max-width:100%;height:auto}.content-section table{border-collapse:collapse;width:100%;margin:1em 0}.content-section td,.content-section th{border:1px solid #ddd;padding:8px;text-align:left}.content-section th{background-color:#f5f5f5}.katex-display{margin:1em 0;overflow-x:auto;overflow-y:hidden}.content-section code{font-family:JetBrains Mono,Fira Code,Cascadia Code,Source Code Pro,Menlo,Monaco,Consolas,Courier New,monospace;font-size:.9em;background-color:#f6f8fa;padding:2px 4px;border-radius:3px;color:#24292e}.content-section pre{background-color:#f6f8fa;padding:16px;border-radius:6px;overflow-x:auto;margin:1em 0;border:1px solid #eaecef}.content-section pre code{background-color:transparent;padding:0;font-size:.9em;line-height:1.5;display:block;overflow-x:auto;color:#24292e}.content-section pre{position:relative}.content-section pre code{counter-reset:line}.content-section pre code .hljs-ln{display:inline-block;width:100%;line-height:1.5;counter-increment:line}.content-section pre:hover{box-shadow:0 2px 8px rgba(0,0,0,.1)}:not(pre)>code{font-size:.875em;white-space:pre-wrap;word-wrap:break-word}.content-section pre::-webkit-scrollbar{height:8px}.content-section pre::-webkit-scrollbar-thumb{background-color:#ccc;border-radius:4px}.content-section pre::-webkit-scrollbar-track{background-color:#f6f8fa}.hljs-class,.hljs-function,.hljs-keyword{color:#d73a49}.hljs-string{color:#032f62}.hljs-number{color:#005cc5}.hljs-comment{color:#6a737d}.hljs-variable{color:#24292e}.hljs-title{color:#6f42c1}.content-section pre:before{content:attr(data-lang);position:absolute;top:0;right:10px;padding:2px 6px;font-size:12px;color:#666;background-color:#f6f8fa;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.problem-status button.next-problem{background-color:#2196f3;color:#fff;border-color:#2196f3}.problem-status button.next-problem:hover{background-color:#1976d2;border-color:#1976d2}.problem-status button.previous-problem{background-color:#2196f3;color:#fff;border-color:#2196f3}.problem-status button.previous-problem:hover{background-color:#1976d2;border-color:#1976d2}.no-knowledge{color:#999;font-size:16px}.problem-status button.clear-mark{background-color:#9e9e9e;color:#fff;border-color:#9e9e9e}.problem-status button.clear-mark:hover{background-color:#757575;border-color:#757575}.problem-status button:disabled{background-color:#ccc;border-color:#ccc;cursor:not-allowed;opacity:.7}.problem-status button.next-problem:disabled,.problem-status button.previous-problem:disabled{background-color:#90caf9;border-color:#90caf9;opacity:.5}.problem-status button.next-problem,.problem-status button.previous-problem{background-color:#2196f3;color:#fff;border-color:#2196f3}.problem-status button.next-problem:hover:not(:disabled),.problem-status button.previous-problem:hover:not(:disabled){background-color:#1976d2;border-color:#1976d2}.limits-container{display:flex;flex-wrap:wrap;gap:20px;padding:10px 0}.limit-item{background-color:#f8f9fa;padding:10px 15px;border-radius:6px;border:1px solid #e9ecef}.limit-label{color:#666;font-weight:500}.limit-value{color:#2196f3;font-weight:600;margin-left:4px}.feedback-btn{background:none;border:none;color:#2196f3;cursor:pointer;padding:0;font-size:inherit;text-decoration:underline}.feedback-btn:hover{color:#1976d2}.modal{position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.5);display:flex;justify-content:center;align-items:center;z-index:1000}.modal-content{background-color:#fff;padding:20px;border-radius:8px;width:90%;max-width:500px;box-shadow:0 2px 10px rgba(0,0,0,.1)}.modal-content h3{margin-bottom:20px;font-size:24px;font-weight:600;color:#333}.form-group{margin-bottom:15px}.form-group label{display:block;margin-bottom:5px;font-weight:500}.form-group input,.form-group textarea{width:100%;padding:8px;border:1px solid #ddd;border-radius:4px;font-size:14px;resize:none;font-family:微软雅黑}.form-group input:disabled{background-color:#f5f5f5;cursor:not-allowed}.quick-tags{margin-bottom:15px;display:flex;gap:8px;flex-wrap:wrap}.tag-btn{padding:4px 8px;border:1px solid #ddd;border-radius:4px;background-color:#f5f5f5;cursor:pointer;font-size:12px;transition:all .3s}.tag-btn:hover{background-color:#e0e0e0}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}.cancel-btn,.submit-btn{padding:8px 16px;border-radius:4px;cursor:pointer;font-size:14px;transition:all .3s}.submit-btn{background-color:#2196f3;color:#fff;border:none}.submit-btn:hover{background-color:#1976d2}.cancel-btn{background-color:#fff;color:#666;border:1px solid #ddd}.cancel-btn:hover{background-color:#f5f5f5}.problem-status button.bookmark-btn{background-color:#ff9800;color:#fff;border-color:#ff9800}.problem-status button.bookmark-btn:hover{background-color:#f57c00;border-color:#f57c00}.problem-list[data-v-3fac1adc]{padding:20px}.filters[data-v-3fac1adc]{margin-bottom:20px}.filters input[data-v-3fac1adc],.filters select[data-v-3fac1adc]{margin-right:10px;padding:8px 12px;border:1px solid #ddd;border-radius:4px;outline:none;transition:all .3s}.filters input[data-v-3fac1adc]:focus,.filters select[data-v-3fac1adc]:focus{border-color:#4caf50;box-shadow:0 0 5px rgba(76,175,80,.2)}.problems-table[data-v-3fac1adc]{width:100%;border-collapse:separate;border-spacing:0;border-radius:8px;overflow:hidden;box-shadow:0 0 10px rgba(0,0,0,.1)}.problems-table th[data-v-3fac1adc]{background-color:#f8f9fa;font-weight:600;padding:12px;text-align:left;border-bottom:2px solid #ddd}.problems-table td[data-v-3fac1adc]{padding:12px;border-bottom:1px solid #eee}.problems-table tr:last-child td[data-v-3fac1adc]{border-bottom:none}.problems-table tr[data-v-3fac1adc]:hover{background-color:#f5f5f5;cursor:pointer;transition:background-color .2s}.pagination[data-v-3fac1adc]{margin-top:20px;display:flex;justify-content:center;align-items:center;gap:15px}.pagination button[data-v-3fac1adc]{padding:8px 16px;border:1px solid #ddd;background-color:#fff;border-radius:4px;cursor:pointer;transition:all .3s}.pagination button[data-v-3fac1adc]:hover:not(:disabled){background-color:#4caf50;color:#fff;border-color:#4caf50}.pagination button[data-v-3fac1adc]:disabled{background-color:#f5f5f5;cursor:not-allowed;color:#999}.pagination span[data-v-3fac1adc]{padding:8px 16px;color:#666;font-size:14px;background-color:#f5f5f5;border-radius:4px;min-width:150px;text-align:center}.knowledge-tag[data-v-3fac1adc]{background-color:#e8f5e9;color:#2e7d32;padding:4px 8px;margin:0 4px;border-radius:4px;font-size:12px;display:inline-block;transition:all .3s}.knowledge-tag[data-v-3fac1adc]:hover{background-color:#4caf50;color:#fff}.knowledge-search[data-v-3fac1adc]{position:relative;display:inline-block}.knowledge-search input[data-v-3fac1adc]{width:200px}.knowledge-list[data-v-3fac1adc]{position:absolute;top:100%;left:0;right:0;background:#fff;border:none;border-radius:4px;max-height:200px;overflow-y:auto;z-index:1000;box-shadow:0 2px 8px rgba(0,0,0,.1)}.knowledge-item[data-v-3fac1adc]{padding:10px;cursor:pointer;transition:all .2s}.knowledge-item[data-v-3fac1adc]:hover{background-color:#e8f5e9;color:#2e7d32}.status-tag[data-v-3fac1adc]{padding:4px 8px;margin:0 4px;border-radius:4px;font-size:12px;display:inline-block;transition:all .3s}.status-tag.unmarked[data-v-3fac1adc]{background-color:#f5f5f5;color:#666}.status-tag.solved[data-v-3fac1adc]{background-color:#e8f5e9;color:#2e7d32}.status-tag.unsolved[data-v-3fac1adc]{background-color:#ffebee;color:#c62828}.problems-table td[data-v-3fac1adc]:first-child,.problems-table th[data-v-3fac1adc]:first-child{width:80px;text-align:center}.quick-jump[data-v-3fac1adc]{display:flex;align-items:center;gap:8px;margin-left:15px}.quick-jump input[data-v-3fac1adc]{width:60px;padding:4px 8px;border:1px solid #ddd;border-radius:4px;text-align:center}.quick-jump button[data-v-3fac1adc]{padding:4px 12px}.bookmark-page[data-v-344362de]{padding:20px;max-width:1200px;margin:0 auto}h1[data-v-344362de]{margin-bottom:30px;color:#333}.loading[data-v-344362de]{display:flex;justify-content:center;align-items:center;height:200px;font-size:18px;color:#666}.empty-state[data-v-344362de]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:300px;background-color:#f9f9f9;border-radius:8px;padding:30px}.empty-icon[data-v-344362de]{font-size:48px;margin-bottom:20px}.empty-state p[data-v-344362de]{font-size:18px;color:#666;margin-bottom:20px}.empty-action[data-v-344362de]{padding:10px 20px;background-color:#4caf50;color:#fff;border-radius:4px;text-decoration:none;transition:background-color .3s}.empty-action[data-v-344362de]:hover{background-color:#388e3c}.timeline[data-v-344362de]{position:relative}.month-section[data-v-344362de]{margin-bottom:40px;position:relative}.month-section[data-v-344362de]:last-child{margin-bottom:0}.month-header[data-v-344362de]{display:flex;align-items:center;margin-bottom:20px}.month-dot[data-v-344362de]{width:16px;height:16px;background-color:#05f038;border-radius:50%;margin-right:15px}.month-header h2[data-v-344362de]{font-size:24px;color:#333;margin:0}.day-section[data-v-344362de]{margin-left:30px;margin-bottom:30px;position:relative}.day-section[data-v-344362de]:last-child{margin-bottom:0}.day-header[data-v-344362de]{display:flex;align-items:center;margin-bottom:15px}.day-dot[data-v-344362de]{width:10px;height:10px;background-color:#06dceb;border-radius:50%;margin-right:15px}.day-header h3[data-v-344362de]{font-size:18px;color:#555;margin:0}.bookmark-grid[data-v-344362de]{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:20px;margin-left:25px}.bookmark-card[data-v-344362de]{position:relative;background-color:#fff;border-radius:8px;box-shadow:0 2px 8px rgba(0,0,0,.1);padding:15px;transition:transform .3s,box-shadow .3s;overflow:hidden}.bookmark-card[data-v-344362de]:hover{transform:translateY(-5px);box-shadow:0 5px 15px rgba(0,0,0,.15)}.problem-title[data-v-344362de]{font-size:16px;font-weight:600;margin:0 0 10px 0;color:#333;-webkit-line-clamp:2}.bookmark-title[data-v-344362de],.problem-title[data-v-344362de]{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;word-break:break-word}.bookmark-title[data-v-344362de]{font-size:14px;color:#666;margin:0 0 15px 0;-webkit-line-clamp:3}.bookmark-time[data-v-344362de]{font-size:12px;color:#999}.card-actions[data-v-344362de]{display:flex;justify-content:space-between;margin-top:15px;opacity:0;transform:translateY(10px);transition:opacity .3s,transform .3s}.bookmark-card:hover .card-actions[data-v-344362de]{opacity:1;transform:translateY(0)}.action-btn[data-v-344362de]{padding:6px 12px;border:none;border-radius:4px;cursor:pointer;font-size:12px;transition:background-color .3s}.view-btn[data-v-344362de]{background-color:#2196f3;color:#fff}.view-btn[data-v-344362de]:hover{background-color:#1976d2}.delete-btn[data-v-344362de]{background-color:#f44336;color:#fff}.delete-btn[data-v-344362de]:hover{background-color:#d32f2f}@media (max-width:768px){.bookmark-grid[data-v-344362de]{grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}}@media (max-width:480px){.bookmark-grid[data-v-344362de]{grid-template-columns:1fr}}
\ No newline at end of file
+*{padding:0;box-sizing:border-box}*,body{margin:0}body{overflow:hidden}.app{width:100vw;overflow:hidden}.app,.sidebar{display:flex;height:100vh}.sidebar{width:200px;background-color:#f5f5f5;padding:20px;border-right:1px solid #ddd;flex-shrink:0;flex-direction:column}.nav-links{flex:1}.nav-item{display:block;padding:10px;margin-bottom:5px;text-decoration:none;color:#333}.nav-item.router-link-active{background-color:#e0e0e0;border-radius:4px}.footer-info{border-top:1px solid #ddd;padding:10px 0;text-align:center}.version-info{color:#666;font-size:12px;margin-bottom:5px}.source-info{color:#999;font-size:12px}.source-info a{color:#999;text-decoration:none}.source-info a:hover{color:#333}.main-content{flex:1;overflow-y:auto;position:relative}.main-content:has(.problem-detail){overflow:hidden}.loading{font-size:18px;color:#666}.loading,.login-prompt{width:100vw;height:100vh;display:flex;justify-content:center;align-items:center}.login-prompt{flex-direction:column;gap:20px;background-color:#f5f5f5}.title{font-size:32px;font-weight:700;color:#333;margin-bottom:10px}.login-message{font-size:24px;color:#333;text-align:center}.login-button{padding:12px 24px;font-size:18px;color:#fff;background-color:#4caf50;border:none;border-radius:4px;cursor:pointer;transition:all .3s}.login-button:hover{background-color:#45a049;transform:translateY(-2px);box-shadow:0 2px 8px rgba(0,0,0,.1)}.login-note{font-size:14px;color:#666;text-align:center}.problem-list[data-v-4fb05069]{padding:20px}.filters[data-v-4fb05069]{margin-bottom:20px}.filters input[data-v-4fb05069],.filters select[data-v-4fb05069]{margin-right:10px;padding:8px 12px;border:1px solid #ddd;border-radius:4px;outline:none;transition:all .3s}.filters input[data-v-4fb05069]:focus,.filters select[data-v-4fb05069]:focus{border-color:#4caf50;box-shadow:0 0 5px rgba(76,175,80,.2)}.problems-table[data-v-4fb05069]{width:100%;border-collapse:separate;border-spacing:0;border-radius:8px;overflow:hidden;box-shadow:0 0 10px rgba(0,0,0,.1)}.problems-table th[data-v-4fb05069]{background-color:#f8f9fa;font-weight:600;padding:12px;text-align:left;border-bottom:2px solid #ddd}.problems-table td[data-v-4fb05069]{padding:12px;border-bottom:1px solid #eee}.problems-table tr:last-child td[data-v-4fb05069]{border-bottom:none}.problems-table tr[data-v-4fb05069]:hover{background-color:#f5f5f5;cursor:pointer;transition:background-color .2s}.pagination[data-v-4fb05069]{margin-top:20px;display:flex;justify-content:center;align-items:center;gap:15px}.pagination button[data-v-4fb05069]{padding:8px 16px;border:1px solid #ddd;background-color:#fff;border-radius:4px;cursor:pointer;transition:all .3s}.pagination button[data-v-4fb05069]:hover:not(:disabled){background-color:#4caf50;color:#fff;border-color:#4caf50}.pagination button[data-v-4fb05069]:disabled{background-color:#f5f5f5;cursor:not-allowed;color:#999}.pagination span[data-v-4fb05069]{padding:8px 16px;color:#666;font-size:14px;background-color:#f5f5f5;border-radius:4px;min-width:150px;text-align:center}.knowledge-tag[data-v-4fb05069]{background-color:#e8f5e9;color:#2e7d32;padding:4px 8px;margin:0 4px;border-radius:4px;font-size:12px;display:inline-block;transition:all .3s}.knowledge-tag[data-v-4fb05069]:hover{background-color:#4caf50;color:#fff}.knowledge-search[data-v-4fb05069]{position:relative;display:inline-block}.knowledge-search input[data-v-4fb05069]{width:200px}.knowledge-list[data-v-4fb05069]{position:absolute;top:100%;left:0;right:0;background:#fff;border:none;border-radius:4px;max-height:200px;overflow-y:auto;z-index:1000;box-shadow:0 2px 8px rgba(0,0,0,.1)}.knowledge-item[data-v-4fb05069]{padding:10px;cursor:pointer;transition:all .2s}.knowledge-item[data-v-4fb05069]:hover{background-color:#e8f5e9;color:#2e7d32}.status-tag[data-v-4fb05069]{padding:4px 8px;margin:0 4px;border-radius:4px;font-size:12px;display:inline-block;transition:all .3s}.status-tag.unmarked[data-v-4fb05069]{background-color:#f5f5f5;color:#666}.status-tag.solved[data-v-4fb05069]{background-color:#e8f5e9;color:#2e7d32}.status-tag.unsolved[data-v-4fb05069]{background-color:#ffebee;color:#c62828}table td[data-v-4fb05069]:first-child,table th[data-v-4fb05069]:first-child{width:80px;text-align:center}.quick-jump[data-v-4fb05069]{display:flex;align-items:center;gap:8px;margin-left:15px}.quick-jump input[data-v-4fb05069]{width:60px;padding:4px 8px;border:1px solid #ddd;border-radius:4px;text-align:center}.quick-jump button[data-v-4fb05069]{padding:4px 12px}.katex{font-size:1.1em}.katex-display{padding:1em 0}.problem-detail{max-width:99%;margin:0 auto;padding:20px;height:100%;overflow-y:auto}.problem-header{margin-bottom:30px}.problem-meta{margin-top:10px;color:#666}.difficulty{margin-right:20px}.knowledge-tag{background-color:#e0e0e0;padding:2px 6px;margin:0 4px;border-radius:4px;font-size:12px}.content-section{margin-bottom:30px}.example pre{background-color:#f5f5f5;padding:10px;border-radius:4px}.problem-status{margin-top:20px;display:flex;gap:10px}.problem-status button{padding:8px 16px;border:1px solid #ddd;border-radius:4px;background:#fff;cursor:pointer}.problem-status button.active{background-color:#4caf50;color:#fff;border-color:#4caf50}.problem-status button:first-child.active{background-color:#f44;color:#fff;border-color:#f44}.content-section{line-height:1.6}.content-section h1,.content-section h2,.content-section h3,.content-section h4,.content-section h5,.content-section h6{margin-top:1.5em;margin-bottom:.5em}.content-section p{margin:1em 0}.content-section code{background-color:#f5f5f5;font-family:monospace}.content-section pre{background-color:#f5f5f5;padding:1em;border-radius:4px}.content-section ol,.content-section ul{padding-left:2em;margin:1em 0}.content-section blockquote{margin:1em 0;padding-left:1em;border-left:4px solid #ddd;color:#666}.content-section img{max-width:100%;height:auto}.content-section table{border-collapse:collapse;width:100%;margin:1em 0}.content-section td,.content-section th{border:1px solid #ddd;padding:8px;text-align:left}.content-section th{background-color:#f5f5f5}.katex-display{margin:1em 0;overflow-x:auto;overflow-y:hidden}.content-section code{font-family:JetBrains Mono,Fira Code,Cascadia Code,Source Code Pro,Menlo,Monaco,Consolas,Courier New,monospace;font-size:.9em;background-color:#f6f8fa;padding:2px 4px;border-radius:3px;color:#24292e}.content-section pre{background-color:#f6f8fa;padding:16px;border-radius:6px;overflow-x:auto;margin:1em 0;border:1px solid #eaecef}.content-section pre code{background-color:transparent;padding:0;font-size:.9em;line-height:1.5;display:block;overflow-x:auto;color:#24292e}.content-section pre{position:relative}.content-section pre code{counter-reset:line}.content-section pre code .hljs-ln{display:inline-block;width:100%;line-height:1.5;counter-increment:line}.content-section pre:hover{box-shadow:0 2px 8px rgba(0,0,0,.1)}:not(pre)>code{font-size:.875em;white-space:pre-wrap;word-wrap:break-word}.content-section pre::-webkit-scrollbar{height:8px}.content-section pre::-webkit-scrollbar-thumb{background-color:#ccc;border-radius:4px}.content-section pre::-webkit-scrollbar-track{background-color:#f6f8fa}.hljs-class,.hljs-function,.hljs-keyword{color:#d73a49}.hljs-string{color:#032f62}.hljs-number{color:#005cc5}.hljs-comment{color:#6a737d}.hljs-variable{color:#24292e}.hljs-title{color:#6f42c1}.content-section pre:before{content:attr(data-lang);position:absolute;top:0;right:10px;padding:2px 6px;font-size:12px;color:#666;background-color:#f6f8fa;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.problem-status button.next-problem{background-color:#2196f3;color:#fff;border-color:#2196f3}.problem-status button.next-problem:hover{background-color:#1976d2;border-color:#1976d2}.problem-status button.previous-problem{background-color:#2196f3;color:#fff;border-color:#2196f3}.problem-status button.previous-problem:hover{background-color:#1976d2;border-color:#1976d2}.no-knowledge{color:#999;font-size:16px}.problem-status button.clear-mark{background-color:#9e9e9e;color:#fff;border-color:#9e9e9e}.problem-status button.clear-mark:hover{background-color:#757575;border-color:#757575}.problem-status button:disabled{background-color:#ccc;border-color:#ccc;cursor:not-allowed;opacity:.7}.problem-status button.next-problem:disabled,.problem-status button.previous-problem:disabled{background-color:#90caf9;border-color:#90caf9;opacity:.5}.problem-status button.next-problem,.problem-status button.previous-problem{background-color:#2196f3;color:#fff;border-color:#2196f3}.problem-status button.next-problem:hover:not(:disabled),.problem-status button.previous-problem:hover:not(:disabled){background-color:#1976d2;border-color:#1976d2}.limits-container{display:flex;flex-wrap:wrap;gap:20px;padding:10px 0}.limit-item{background-color:#f8f9fa;padding:10px 15px;border-radius:6px;border:1px solid #e9ecef}.limit-label{color:#666;font-weight:500}.limit-value{color:#2196f3;font-weight:600;margin-left:4px}.feedback-btn{background:none;border:none;color:#2196f3;cursor:pointer;padding:0;font-size:inherit;text-decoration:underline}.feedback-btn:hover{color:#1976d2}.modal{position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.5);display:flex;justify-content:center;align-items:center;z-index:1000}.modal-content{background-color:#fff;padding:20px;border-radius:8px;width:90%;max-width:500px;box-shadow:0 2px 10px rgba(0,0,0,.1)}.modal-content h3{margin-bottom:20px;font-size:24px;font-weight:600;color:#333}.form-group{margin-bottom:15px}.form-group label{display:block;margin-bottom:5px;font-weight:500}.form-group input,.form-group textarea{width:100%;padding:8px;border:1px solid #ddd;border-radius:4px;font-size:14px;resize:none;font-family:微软雅黑}.form-group input:disabled{background-color:#f5f5f5;cursor:not-allowed}.quick-tags{margin-bottom:15px;display:flex;gap:8px;flex-wrap:wrap}.tag-btn{padding:4px 8px;border:1px solid #ddd;border-radius:4px;background-color:#f5f5f5;cursor:pointer;font-size:12px;transition:all .3s}.tag-btn:hover{background-color:#e0e0e0}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}.cancel-btn,.submit-btn{padding:8px 16px;border-radius:4px;cursor:pointer;font-size:14px;transition:all .3s}.submit-btn{background-color:#2196f3;color:#fff;border:none}.submit-btn:hover{background-color:#1976d2}.cancel-btn{background-color:#fff;color:#666;border:1px solid #ddd}.cancel-btn:hover{background-color:#f5f5f5}.problem-status button.bookmark-btn{background-color:#ff9800;color:#fff;border-color:#ff9800}.problem-status button.bookmark-btn:hover{background-color:#f57c00;border-color:#f57c00}.problem-list[data-v-3fac1adc]{padding:20px}.filters[data-v-3fac1adc]{margin-bottom:20px}.filters input[data-v-3fac1adc],.filters select[data-v-3fac1adc]{margin-right:10px;padding:8px 12px;border:1px solid #ddd;border-radius:4px;outline:none;transition:all .3s}.filters input[data-v-3fac1adc]:focus,.filters select[data-v-3fac1adc]:focus{border-color:#4caf50;box-shadow:0 0 5px rgba(76,175,80,.2)}.problems-table[data-v-3fac1adc]{width:100%;border-collapse:separate;border-spacing:0;border-radius:8px;overflow:hidden;box-shadow:0 0 10px rgba(0,0,0,.1)}.problems-table th[data-v-3fac1adc]{background-color:#f8f9fa;font-weight:600;padding:12px;text-align:left;border-bottom:2px solid #ddd}.problems-table td[data-v-3fac1adc]{padding:12px;border-bottom:1px solid #eee}.problems-table tr:last-child td[data-v-3fac1adc]{border-bottom:none}.problems-table tr[data-v-3fac1adc]:hover{background-color:#f5f5f5;cursor:pointer;transition:background-color .2s}.pagination[data-v-3fac1adc]{margin-top:20px;display:flex;justify-content:center;align-items:center;gap:15px}.pagination button[data-v-3fac1adc]{padding:8px 16px;border:1px solid #ddd;background-color:#fff;border-radius:4px;cursor:pointer;transition:all .3s}.pagination button[data-v-3fac1adc]:hover:not(:disabled){background-color:#4caf50;color:#fff;border-color:#4caf50}.pagination button[data-v-3fac1adc]:disabled{background-color:#f5f5f5;cursor:not-allowed;color:#999}.pagination span[data-v-3fac1adc]{padding:8px 16px;color:#666;font-size:14px;background-color:#f5f5f5;border-radius:4px;min-width:150px;text-align:center}.knowledge-tag[data-v-3fac1adc]{background-color:#e8f5e9;color:#2e7d32;padding:4px 8px;margin:0 4px;border-radius:4px;font-size:12px;display:inline-block;transition:all .3s}.knowledge-tag[data-v-3fac1adc]:hover{background-color:#4caf50;color:#fff}.knowledge-search[data-v-3fac1adc]{position:relative;display:inline-block}.knowledge-search input[data-v-3fac1adc]{width:200px}.knowledge-list[data-v-3fac1adc]{position:absolute;top:100%;left:0;right:0;background:#fff;border:none;border-radius:4px;max-height:200px;overflow-y:auto;z-index:1000;box-shadow:0 2px 8px rgba(0,0,0,.1)}.knowledge-item[data-v-3fac1adc]{padding:10px;cursor:pointer;transition:all .2s}.knowledge-item[data-v-3fac1adc]:hover{background-color:#e8f5e9;color:#2e7d32}.status-tag[data-v-3fac1adc]{padding:4px 8px;margin:0 4px;border-radius:4px;font-size:12px;display:inline-block;transition:all .3s}.status-tag.unmarked[data-v-3fac1adc]{background-color:#f5f5f5;color:#666}.status-tag.solved[data-v-3fac1adc]{background-color:#e8f5e9;color:#2e7d32}.status-tag.unsolved[data-v-3fac1adc]{background-color:#ffebee;color:#c62828}.problems-table td[data-v-3fac1adc]:first-child,.problems-table th[data-v-3fac1adc]:first-child{width:80px;text-align:center}.quick-jump[data-v-3fac1adc]{display:flex;align-items:center;gap:8px;margin-left:15px}.quick-jump input[data-v-3fac1adc]{width:60px;padding:4px 8px;border:1px solid #ddd;border-radius:4px;text-align:center}.quick-jump button[data-v-3fac1adc]{padding:4px 12px}.bookmark-page[data-v-0fc4ded2]{padding:20px;max-width:1200px;margin:0 auto}h1[data-v-0fc4ded2]{margin-bottom:30px;color:#333}.loading[data-v-0fc4ded2]{display:flex;justify-content:center;align-items:center;height:200px;font-size:18px;color:#666}.empty-state[data-v-0fc4ded2]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:300px;background-color:#f9f9f9;border-radius:8px;padding:30px}.empty-icon[data-v-0fc4ded2]{font-size:48px;margin-bottom:20px}.empty-state p[data-v-0fc4ded2]{font-size:18px;color:#666;margin-bottom:20px}.empty-action[data-v-0fc4ded2]{padding:10px 20px;background-color:#4caf50;color:#fff;border-radius:4px;text-decoration:none;transition:background-color .3s}.empty-action[data-v-0fc4ded2]:hover{background-color:#388e3c}.timeline[data-v-0fc4ded2]{position:relative}.month-section[data-v-0fc4ded2]{margin-bottom:40px;position:relative}.month-section[data-v-0fc4ded2]:last-child{margin-bottom:0}.month-header[data-v-0fc4ded2]{display:flex;align-items:center;margin-bottom:20px}.month-dot[data-v-0fc4ded2]{width:16px;height:16px;background-color:#05f038;border-radius:50%;margin-right:15px}.month-header h2[data-v-0fc4ded2]{font-size:24px;color:#333;margin:0}.day-section[data-v-0fc4ded2]{margin-left:30px;margin-bottom:30px;position:relative}.day-section[data-v-0fc4ded2]:last-child{margin-bottom:0}.day-header[data-v-0fc4ded2]{display:flex;align-items:center;margin-bottom:15px}.day-dot[data-v-0fc4ded2]{width:10px;height:10px;background-color:#06dceb;border-radius:50%;margin-right:15px}.day-header h3[data-v-0fc4ded2]{font-size:18px;color:#555;margin:0}.bookmark-grid[data-v-0fc4ded2]{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:20px;margin-left:25px}.bookmark-card[data-v-0fc4ded2]{position:relative;background-color:#fff;border-radius:8px;box-shadow:0 2px 8px rgba(0,0,0,.1);padding:15px;transition:transform .3s,box-shadow .3s;overflow:hidden}.bookmark-card[data-v-0fc4ded2]:hover{transform:translateY(-5px);box-shadow:0 5px 15px rgba(0,0,0,.15)}.problem-title[data-v-0fc4ded2]{font-size:16px;font-weight:600;margin:0 0 10px 0;color:#333;-webkit-line-clamp:2;line-clamp:2}.bookmark-title[data-v-0fc4ded2],.problem-title[data-v-0fc4ded2]{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;word-break:break-word}.bookmark-title[data-v-0fc4ded2]{font-size:14px;color:#666;margin:0 0 15px 0;-webkit-line-clamp:3;line-clamp:3}.bookmark-time[data-v-0fc4ded2]{font-size:12px;color:#999}.card-actions[data-v-0fc4ded2]{display:flex;justify-content:space-between;margin-top:15px;opacity:0;transform:translateY(10px);transition:opacity .3s,transform .3s}.bookmark-card:hover .card-actions[data-v-0fc4ded2]{opacity:1;transform:translateY(0)}.action-btn[data-v-0fc4ded2]{padding:6px 12px;border:none;border-radius:4px;cursor:pointer;font-size:12px;transition:background-color .3s}.view-btn[data-v-0fc4ded2]{background-color:#2196f3;color:#fff}.view-btn[data-v-0fc4ded2]:hover{background-color:#1976d2}.delete-btn[data-v-0fc4ded2]{background-color:#f44336;color:#fff}.delete-btn[data-v-0fc4ded2]:hover{background-color:#d32f2f}@media (max-width:768px){.bookmark-grid[data-v-0fc4ded2]{grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}}@media (max-width:480px){.bookmark-grid[data-v-0fc4ded2]{grid-template-columns:1fr}}
\ No newline at end of file
diff --git a/dist/index.html b/dist/index.html
index 8039d89..e8d61e0 100644
--- a/dist/index.html
+++ b/dist/index.html
@@ -1 +1 @@
-
NEU小站OJ题库
\ No newline at end of file
+NEU小站OJ题库
\ No newline at end of file
diff --git a/dist/js/app.529d1d96.js b/dist/js/app.529d1d96.js
new file mode 100644
index 0000000..c0e7e19
--- /dev/null
+++ b/dist/js/app.529d1d96.js
@@ -0,0 +1,2 @@
+(function(){"use strict";var e={9794:function(e,t,o){var n=o(5130),a=o(6768);const l={class:"app"},i={key:0,class:"loading"},s={key:1,class:"login-prompt"},r={class:"sidebar"},c={class:"nav-links"},d={class:"main-content"};function u(e,t,o,n,u,h){const k=(0,a.g2)("router-link"),p=(0,a.g2)("router-view");return(0,a.uX)(),(0,a.CE)("div",l,[u.isLoading?((0,a.uX)(),(0,a.CE)("div",i," 加载中... ")):u.isLoggedIn?((0,a.uX)(),(0,a.CE)(a.FK,{key:2},[(0,a.Lk)("div",r,[(0,a.Lk)("div",c,[(0,a.bF)(k,{to:"/problems",class:"nav-item"},{default:(0,a.k6)((()=>t[4]||(t[4]=[(0,a.eW)("题目列表")]))),_:1}),(0,a.bF)(k,{to:"/my",class:"nav-item"},{default:(0,a.k6)((()=>t[5]||(t[5]=[(0,a.eW)("我标记的题目")]))),_:1}),(0,a.bF)(k,{to:"/bookmarks",class:"nav-item"},{default:(0,a.k6)((()=>t[6]||(t[6]=[(0,a.eW)("我的书签")]))),_:1}),(0,a.bF)(k,{to:"/about",class:"nav-item"},{default:(0,a.k6)((()=>t[7]||(t[7]=[(0,a.eW)("关于")]))),_:1})]),t[8]||(t[8]=(0,a.Lk)("div",{class:"footer-info"},[(0,a.Lk)("div",{class:"version-info"},"NEU小站OJ题库 - v1.0"),(0,a.Lk)("div",{class:"source-info"},[(0,a.eW)("© 2025 "),(0,a.Lk)("a",{href:"https://www.东北大学.com",target:"_blank"},"NEU小站")])],-1))]),(0,a.Lk)("div",d,[(0,a.bF)(p)])],64)):((0,a.uX)(),(0,a.CE)("div",s,[t[1]||(t[1]=(0,a.Lk)("div",{class:"login-message"},"请登录后进入NEU小站OJ题库!",-1)),(0,a.Lk)("button",{class:"login-button",onClick:t[0]||(t[0]=(...e)=>h.goToLogin&&h.goToLogin(...e))},"前往登录"),t[2]||(t[2]=(0,a.Lk)("div",{class:"login-note"},"本系统所有题目来自东北大学OJ系统,本站仅归纳展示题目,不提供在线评测环境。",-1)),t[3]||(t[3]=(0,a.Lk)("div",{class:"login-note"},"本系统向所有用户公开,仅需注册账号即可使用,无需经过校内验证。",-1))]))])}var h=o(8704),k={data(){return{isLoggedIn:!1,isLoading:!0,token:h.A.get("token")||""}},watch:{isLoggedIn:{handler(e){document.title=e?"NEU小站OJ题库 - 题目列表":"NEU小站OJ题库"},immediate:!0}},methods:{async checkLoginStatus(){try{const e=await fetch("https://api.oj.东北大学.com/check_login",{headers:{Authorization:this.token}}),t=await e.json();this.isLoggedIn=t.isLoggedIn}catch(e){console.error("Error:",e),this.isLoggedIn=!1}finally{this.isLoading=!1}},goToLogin(){window.location.href="https://www.东北大学.com/login"}},mounted(){this.checkLoginStatus()}},p=o(1241);const m=(0,p.A)(k,[["render",u]]);var g=m,b=o(1387),f=o(4232);const v={class:"problem-list"},y={class:"filters"},L={class:"knowledge-search",ref:"knowledgeSearch"},w={key:0,class:"knowledge-list"},C=["onClick"],P={class:"problems-table"},E=["onClick"],T={key:1,class:"no-knowledge"},_={class:"pagination"},S=["disabled"],$=["disabled"],j={class:"quick-jump"},K=["max"];function F(e,t,o,l,i,s){return(0,a.uX)(),(0,a.CE)("div",v,[(0,a.Lk)("div",y,[(0,a.bo)((0,a.Lk)("input",{"onUpdate:modelValue":t[0]||(t[0]=e=>i.title=e),placeholder:"搜索题目标题"},null,512),[[n.Jo,i.title]]),(0,a.bo)((0,a.Lk)("input",{"onUpdate:modelValue":t[1]||(t[1]=e=>i.content=e),placeholder:"搜索题目内容"},null,512),[[n.Jo,i.content]]),(0,a.bo)((0,a.Lk)("select",{"onUpdate:modelValue":t[2]||(t[2]=e=>i.difficulty=e)},t[12]||(t[12]=[(0,a.Fv)('',11)]),512),[[n.u1,i.difficulty]]),(0,a.bo)((0,a.Lk)("select",{"onUpdate:modelValue":t[3]||(t[3]=e=>i.statusFilter=e)},t[13]||(t[13]=[(0,a.Lk)("option",{value:""},"全部状态",-1),(0,a.Lk)("option",{value:"0"},"不显示已会的题",-1),(0,a.Lk)("option",{value:"1"},"不显示已会和不会的题",-1)]),512),[[n.u1,i.statusFilter]]),(0,a.Lk)("div",L,[(0,a.bo)((0,a.Lk)("input",{"onUpdate:modelValue":t[4]||(t[4]=e=>i.knowledgeSearch=e),onFocus:t[5]||(t[5]=e=>s.fetchKnowledgePoints()),onInput:t[6]||(t[6]=e=>s.fetchKnowledgePoints()),placeholder:"搜索知识点"},null,544),[[n.Jo,i.knowledgeSearch]]),i.showKnowledgeList?((0,a.uX)(),(0,a.CE)("div",w,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(i.knowledgePoints,(e=>((0,a.uX)(),(0,a.CE)("div",{key:e.id,onClick:t=>s.selectKnowledge(e),class:"knowledge-item"},(0,f.v_)(e.title),9,C)))),128))])):(0,a.Q3)("",!0)],512)]),(0,a.Lk)("table",P,[t[14]||(t[14]=(0,a.Lk)("thead",null,[(0,a.Lk)("tr",null,[(0,a.Lk)("th",null,"编号"),(0,a.Lk)("th",null,"标题"),(0,a.Lk)("th",null,"难度"),(0,a.Lk)("th",null,"知识点"),(0,a.Lk)("th",null,"状态")])],-1)),(0,a.Lk)("tbody",null,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(i.problems,(e=>((0,a.uX)(),(0,a.CE)("tr",{key:e.id,onClick:t=>s.goToProblem(e.id)},[(0,a.Lk)("td",null,(0,f.v_)(e.id),1),(0,a.Lk)("td",null,(0,f.v_)(e.title),1),(0,a.Lk)("td",null,(0,f.v_)(s.getDifficultyText(e.difficulty)),1),(0,a.Lk)("td",null,[e.knowledge&&e.knowledge.length>0?((0,a.uX)(!0),(0,a.CE)(a.FK,{key:0},(0,a.pI)(e.knowledge,(e=>((0,a.uX)(),(0,a.CE)("span",{key:e.id,class:"knowledge-tag"},(0,f.v_)(e.title),1)))),128)):((0,a.uX)(),(0,a.CE)("span",T,"无"))]),(0,a.Lk)("td",null,[(0,a.Lk)("span",{class:(0,f.C4)(["status-tag",{unmarked:null===e.status,solved:1===e.status,unsolved:0===e.status}])},(0,f.v_)(s.getStatusText(e.status)),3)])],8,E)))),128))])]),(0,a.Lk)("div",_,[(0,a.Lk)("button",{disabled:1===i.page,onClick:t[7]||(t[7]=e=>s.changePage(i.page-1))},"上一页",8,S),(0,a.Lk)("span",null,"第 "+(0,f.v_)(i.page)+" 页 / 共 "+(0,f.v_)(i.totalPages)+" 页",1),(0,a.Lk)("button",{disabled:i.page===i.totalPages,onClick:t[8]||(t[8]=e=>s.changePage(i.page+1))},"下一页",8,$),(0,a.Lk)("div",j,[t[15]||(t[15]=(0,a.eW)(" 快速跳转至 ")),(0,a.bo)((0,a.Lk)("input",{"onUpdate:modelValue":t[9]||(t[9]=e=>i.jumpPage=e),type:"number",min:"1",max:i.totalPages,onKeyup:t[10]||(t[10]=(0,n.jR)(((...e)=>s.handleJump&&s.handleJump(...e)),["enter"]))},null,40,K),[[n.Jo,i.jumpPage]]),t[16]||(t[16]=(0,a.eW)(" 页 ")),(0,a.Lk)("button",{onClick:t[11]||(t[11]=(...e)=>s.handleJump&&s.handleJump(...e))},"跳转")])])])}o(4114);var X={data(){return{problems:[],page:1,totalPages:1,title:"",content:"",difficulty:"",statusFilter:"",knowledgeSearch:"",knowledgePoints:[],showKnowledgeList:!1,selectedKnowledge:null,token:h.A.get("token")||"",jumpPage:""}},methods:{async fetchProblems(){try{const e=await fetch("https://api.oj.东北大学.com/problem_list",{method:"POST",headers:{Authorization:this.token,"Content-Type":"application/json"},body:JSON.stringify({page:this.page,title:this.title||void 0,content:this.content||void 0,difficulty:this.difficulty?Number(this.difficulty):void 0,status_filter:this.statusFilter?Number(this.statusFilter):void 0,knowledge_id:this.selectedKnowledge?.id})}),t=await e.json();this.problems=t.problems,this.totalPages=t.pages;const o={...this.$route.query,page:this.page};this.$router.replace({query:o},{keepActiveRoute:!0})}catch(e){console.error("Error:",e)}},goToProblem(e){this.$router.push(`/problem/${e}`)},changePage(e){e<1||e>this.totalPages||(this.page=e,this.fetchProblems())},getDifficultyText(e){const t={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10"};return t[e]||"未知"},getStatusText(e){const t={0:"不会",1:"已会",null:"未标记"};return t[e]||"未标记"},async fetchKnowledgePoints(){try{const e=await fetch("https://api.oj.东北大学.com/knowledge",{method:"POST",headers:{Authorization:this.token,"Content-Type":"application/json"},body:JSON.stringify({search:this.knowledgeSearch})}),t=await e.json();this.knowledgePoints=t,this.showKnowledgeList=!0}catch(e){console.error("Error:",e)}},selectKnowledge(e){this.selectedKnowledge=e,this.knowledgeSearch=e.title,this.showKnowledgeList=!1,this.page=1,this.fetchProblems()},goToKnowledge(e){this.$router.push({path:"/problems",query:{knowledge_id:e.id}})},handleClickOutside(e){const t=this.$refs.knowledgeSearch;t&&!t.contains(e.target)&&(this.showKnowledgeList=!1,this.selectedKnowledge||(this.knowledgeSearch=""))},handleJump(){const e=parseInt(this.jumpPage);e&&e>=1&&e<=this.totalPages?this.changePage(e):alert("请输入有效的页码!"),this.jumpPage=""}},watch:{title(){this.page=1,this.fetchProblems()},difficulty(){this.page=1,this.fetchProblems()},statusFilter(){this.page=1,this.fetchProblems()},content(){this.page=1,this.fetchProblems()},knowledgeSearch(e){e||(this.selectedKnowledge=null,this.page=1,this.fetchProblems())},"$route.query.page":{immediate:!0,handler(e){const t=parseInt(e);t&&t>=1&&(this.page=t,this.fetchProblems())}}},mounted(){const e=parseInt(this.$route.query.page);e&&e>=1&&(this.page=e),document.title="题目列表 - OJ题库 - NEU小站",this.fetchProblems(),document.addEventListener("click",this.handleClickOutside)},unmounted(){document.removeEventListener("click",this.handleClickOutside)}};const O=(0,p.A)(X,[["render",F],["__scopeId","data-v-4fb05069"]]);var A=O;const x={key:0,class:"problem-detail"},M={class:"problem-header"},J={class:"problem-meta"},N={class:"difficulty"},I={class:"knowledge-points",style:{"margin-top":"10px"}},U={key:1,class:"no-knowledge"},B={class:"feedback-section",style:{"margin-top":"10px"}},D={class:"problem-content"},V={class:"content-section"},q=["innerHTML"],W={class:"content-section"},z={class:"limits-container"},H={class:"limit-item"},Q={class:"limit-value"},R={class:"limit-item"},Y={class:"limit-value"},G={class:"content-section"},Z={class:"example"},ee={key:0,class:"content-section"},te=["innerHTML"],oe={class:"problem-status"},ne=["disabled"],ae=["disabled"],le={key:1,class:"modal"},ie={class:"modal-content"},se={class:"form-group"},re=["value"],ce={class:"form-group"},de={class:"modal-actions"},ue={key:2,class:"modal"},he={class:"modal-content"},ke={class:"form-group"},pe=["value"],me={class:"form-group"},ge={class:"quick-tags"},be=["onClick"],fe={class:"modal-actions"};function ve(e,t,o,l,i,s){return(0,a.uX)(),(0,a.CE)(a.FK,null,[i.problem?((0,a.uX)(),(0,a.CE)("div",x,[(0,a.Lk)("div",M,[(0,a.Lk)("h1",null,(0,f.v_)(i.problem.title),1),(0,a.Lk)("div",J,[(0,a.Lk)("span",N,"难度:"+(0,f.v_)(s.getDifficultyText(i.problem.difficulty)),1),(0,a.Lk)("div",I,[t[12]||(t[12]=(0,a.eW)(" 知识点: ")),i.problem.knowledge&&i.problem.knowledge.length>0?((0,a.uX)(!0),(0,a.CE)(a.FK,{key:0},(0,a.pI)(i.problem.knowledge,(e=>((0,a.uX)(),(0,a.CE)("span",{key:e.id,class:"knowledge-tag"},(0,f.v_)(e.title),1)))),128)):((0,a.uX)(),(0,a.CE)("span",U,"无"))]),(0,a.Lk)("div",B,[t[13]||(t[13]=(0,a.eW)(" 题目有问题?")),(0,a.Lk)("button",{class:"feedback-btn",onClick:t[0]||(t[0]=e=>i.showFeedbackModal=!0)},"反馈")])])]),(0,a.Lk)("div",D,[(0,a.Lk)("div",V,[t[14]||(t[14]=(0,a.Lk)("h2",null,"题目描述",-1)),(0,a.Lk)("div",{innerHTML:s.renderedContent},null,8,q)]),(0,a.Lk)("div",W,[t[17]||(t[17]=(0,a.Lk)("h2",null,"题目限制",-1)),(0,a.Lk)("div",z,[(0,a.Lk)("div",H,[t[15]||(t[15]=(0,a.Lk)("span",{class:"limit-label"},"内存限制:",-1)),(0,a.Lk)("span",Q,(0,f.v_)((i.problem.memory_limit/1024).toFixed(1))+" MB",1)]),(0,a.Lk)("div",R,[t[16]||(t[16]=(0,a.Lk)("span",{class:"limit-label"},"时间限制:",-1)),(0,a.Lk)("span",Y,(0,f.v_)(i.problem.time_limit)+" s",1)])])]),(0,a.Lk)("div",G,[t[20]||(t[20]=(0,a.Lk)("h2",null,"示例",-1)),(0,a.Lk)("div",Z,[t[18]||(t[18]=(0,a.Lk)("h3",null,"输入",-1)),(0,a.Lk)("pre",null,(0,f.v_)(i.problem.example_input),1),t[19]||(t[19]=(0,a.Lk)("h3",null,"输出",-1)),(0,a.Lk)("pre",null,(0,f.v_)(i.problem.example_output),1)])]),i.problem.hint?((0,a.uX)(),(0,a.CE)("div",ee,[t[21]||(t[21]=(0,a.Lk)("h2",null,"提示",-1)),(0,a.Lk)("div",{innerHTML:s.renderedHint},null,8,te)])):(0,a.Q3)("",!0)]),(0,a.Lk)("div",oe,[(0,a.Lk)("button",{onClick:t[1]||(t[1]=e=>s.markProblem(0)),class:(0,f.C4)({active:0===i.problem.status})}," 不会 ",2),(0,a.Lk)("button",{onClick:t[2]||(t[2]=e=>s.markProblem(1)),class:(0,f.C4)({active:1===i.problem.status})}," 已会 ",2),(0,a.Lk)("button",{onClick:t[3]||(t[3]=e=>i.showBookmarkModal=!0),class:"bookmark-btn"}," 添加书签 "),(0,a.Lk)("button",{onClick:t[4]||(t[4]=(...e)=>s.goToPreviousProblem&&s.goToPreviousProblem(...e)),class:"previous-problem",disabled:!i.problem.last}," 上一题 ",8,ne),(0,a.Lk)("button",{onClick:t[5]||(t[5]=(...e)=>s.goToNextProblem&&s.goToNextProblem(...e)),class:"next-problem",disabled:!i.problem.next}," 下一题 ",8,ae)])])):(0,a.Q3)("",!0),i.showBookmarkModal?((0,a.uX)(),(0,a.CE)("div",le,[(0,a.Lk)("div",ie,[t[24]||(t[24]=(0,a.Lk)("h3",null,"添加书签",-1)),(0,a.Lk)("div",se,[t[22]||(t[22]=(0,a.Lk)("label",null,"题目:",-1)),(0,a.Lk)("input",{type:"text",value:i.problem.title,disabled:""},null,8,re)]),(0,a.Lk)("div",ce,[t[23]||(t[23]=(0,a.Lk)("label",null,"书签内容(可选):",-1)),(0,a.bo)((0,a.Lk)("input",{type:"text","onUpdate:modelValue":t[6]||(t[6]=e=>i.bookmarkTitle=e),placeholder:"为这个书签添加描述..."},null,512),[[n.Jo,i.bookmarkTitle]])]),(0,a.Lk)("div",de,[(0,a.Lk)("button",{onClick:t[7]||(t[7]=(...e)=>s.addBookmark&&s.addBookmark(...e)),class:"submit-btn"},"确定"),(0,a.Lk)("button",{onClick:t[8]||(t[8]=e=>i.showBookmarkModal=!1),class:"cancel-btn"},"取消")])])])):(0,a.Q3)("",!0),i.showFeedbackModal?((0,a.uX)(),(0,a.CE)("div",ue,[(0,a.Lk)("div",he,[t[27]||(t[27]=(0,a.Lk)("h3",null,"题目问题反馈",-1)),(0,a.Lk)("div",ke,[t[25]||(t[25]=(0,a.Lk)("label",null,"题目:",-1)),(0,a.Lk)("input",{type:"text",value:i.problem.title,disabled:""},null,8,pe)]),(0,a.Lk)("div",me,[t[26]||(t[26]=(0,a.Lk)("label",null,"反馈内容:",-1)),(0,a.bo)((0,a.Lk)("textarea",{"onUpdate:modelValue":t[9]||(t[9]=e=>i.feedbackContent=e),placeholder:"请描述您遇到的问题...",rows:"4"},null,512),[[n.Jo,i.feedbackContent]])]),(0,a.Lk)("div",ge,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(i.quickTags,(e=>((0,a.uX)(),(0,a.CE)("button",{key:e,onClick:t=>s.appendTag(e),class:"tag-btn"},(0,f.v_)(e),9,be)))),128))]),(0,a.Lk)("div",fe,[(0,a.Lk)("button",{onClick:t[10]||(t[10]=(...e)=>s.submitFeedback&&s.submitFeedback(...e)),class:"submit-btn"},"提交"),(0,a.Lk)("button",{onClick:t[11]||(t[11]=e=>i.showFeedbackModal=!1),class:"cancel-btn"},"取消")])])])):(0,a.Q3)("",!0)],64)}var ye=o(642),Le=o(1995),we=o.n(Le),Ce=o(1109),Pe=(o(9351),o(437)),Ee=o(8734),Te=o.n(Ee),_e={data(){return{problem:null,md:null,token:h.A.get("token")||"",showFeedbackModal:!1,feedbackContent:"",quickTags:["图片无法加载","公式渲染错乱","题目内容有误"],showBookmarkModal:!1,bookmarkTitle:""}},created(){this.md=new ye.A({html:!0,breaks:!0,linkify:!0,highlight:function(e,t){if(t&&Ce.A.getLanguage(t))try{return Ce.A.highlight(e,{language:t}).value}catch(o){}return""}});const e=this.md.renderer.rules.text||function(e,t,o,n,a){return a.renderToken(e,t,o)};this.md.renderer.rules.text=function(t,o,n,a,l){let i=t[o].content;return i=i.replace(/(?{try{return Pe.Ay.renderToString(t.trim(),{displayMode:!1})}catch(o){return console.warn("KaTeX error:",o),e}})),i=i.replace(/(?{try{return Pe.Ay.renderToString(t.trim(),{displayMode:!0})}catch(o){return console.warn("KaTeX error:",o),e}})),t[o].content=i,e(t,o,n,a,l)},this.md.use(we())},computed:{renderedContent(){if(!this.problem)return"";let e=this.md.render(this.problem.content);return e=e.replace(/\$([^$\n]+?)\$/g,((e,t)=>{try{return Pe.Ay.renderToString(t.trim(),{displayMode:!1})}catch(o){return console.warn("KaTeX inline error:",o),e}})),e=e.replace(/\$\$([^$]+?)\$\$/g,((e,t)=>{try{return Pe.Ay.renderToString(t.trim(),{displayMode:!0})}catch(o){return console.warn("KaTeX display error:",o),e}})),e=Te().decode(e),e},renderedHint(){if(!this.problem||!this.problem.hint)return"";let e=this.md.render(this.problem.hint);return e=e.replace(/\$([^$\n]+?)\$/g,((e,t)=>{try{return Pe.Ay.renderToString(t.trim(),{displayMode:!1})}catch(o){return console.warn("KaTeX inline error:",o),e}})),e=e.replace(/\$\$([^$]+?)\$\$/g,((e,t)=>{try{return Pe.Ay.renderToString(t.trim(),{displayMode:!0})}catch(o){return console.warn("KaTeX display error:",o),e}})),e=Te().decode(e),e}},methods:{async fetchProblem(){try{const e=await fetch(`https://api.oj.东北大学.com/problem?problem_id=${this.$route.params.id}`,{headers:{Authorization:this.token}});this.problem=await e.json()}catch(e){console.error("Error:",e)}},async markProblem(e){try{const t=await fetch("https://api.oj.东北大学.com/mark",{method:"POST",headers:{Authorization:this.token,"Content-Type":"application/json"},body:JSON.stringify({problem_id:this.problem.id,status:this.problem.status===e?2:e})});t.ok&&await this.fetchProblem()}catch(t){console.error("Error:",t)}},getDifficultyText(e){const t={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10"};return t[e]||"未知"},goToKnowledge(e){this.$router.push({path:"/problems",query:{knowledge_id:e.id}})},async goToNextProblem(){this.problem.next?this.$router.push(`/problem/${this.problem.next}`):alert("已经是最后一题了~")},async goToPreviousProblem(){this.problem.last?this.$router.push(`/problem/${this.problem.last}`):alert("已经是第一题了~")},appendTag(e){this.feedbackContent?this.feedbackContent+=" "+e:this.feedbackContent=e},async submitFeedback(){if(this.feedbackContent.trim())try{const e=await fetch("https://api.oj.东北大学.com/report",{method:"POST",headers:{Authorization:this.token,"Content-Type":"application/json"},body:JSON.stringify({problem_id:this.problem.id,content:this.feedbackContent.trim()})});if(e.ok)alert("反馈已提交,感谢您的支持!"),this.showFeedbackModal=!1,this.feedbackContent="";else{const t=await e.json();alert(t.error||"提交失败,请稍后重试")}}catch(e){console.error("Error:",e),alert("提交失败,请稍后重试")}else alert("请输入反馈内容!")},async addBookmark(){if(this.problem)try{const e=await fetch("https://api.oj.东北大学.com/bookmark/add_mark",{method:"POST",headers:{Authorization:this.token,"Content-Type":"application/json"},body:JSON.stringify({problem_id:this.problem.id,title:this.bookmarkTitle.trim()})});if(e.ok){await e.json();alert("书签添加成功!"),this.showBookmarkModal=!1,this.bookmarkTitle=""}else{const t=await e.json();alert(t.error||"添加书签失败,请稍后重试")}}catch(e){console.error("Error adding bookmark:",e),alert("添加书签失败,请稍后重试")}}},mounted(){this.fetchProblem()},watch:{"$route.params.id"(){this.fetchProblem()},"problem.title"(){this.problem&&this.problem.title&&(document.title=`${this.problem.title} - OJ题库 - NEU小站`)}}};const Se=(0,p.A)(_e,[["render",ve]]);var $e=Se;const je={class:"problem-list"},Ke={class:"filters"},Fe={class:"knowledge-search",ref:"knowledgeSearch"},Xe={key:0,class:"knowledge-list"},Oe=["onClick"],Ae={class:"problems-table"},xe=["onClick"],Me={key:1,class:"no-knowledge"},Je={class:"pagination"},Ne=["disabled"],Ie=["disabled"],Ue={class:"quick-jump"},Be=["max"];function De(e,t,o,l,i,s){return(0,a.uX)(),(0,a.CE)("div",je,[(0,a.Lk)("div",Ke,[(0,a.bo)((0,a.Lk)("input",{"onUpdate:modelValue":t[0]||(t[0]=e=>i.title=e),placeholder:"搜索题目标题"},null,512),[[n.Jo,i.title]]),(0,a.bo)((0,a.Lk)("input",{"onUpdate:modelValue":t[1]||(t[1]=e=>i.content=e),placeholder:"搜索题目内容"},null,512),[[n.Jo,i.content]]),(0,a.bo)((0,a.Lk)("select",{"onUpdate:modelValue":t[2]||(t[2]=e=>i.difficulty=e)},t[12]||(t[12]=[(0,a.Fv)('',11)]),512),[[n.u1,i.difficulty]]),(0,a.bo)((0,a.Lk)("select",{"onUpdate:modelValue":t[3]||(t[3]=e=>i.statusFilter=e)},t[13]||(t[13]=[(0,a.Lk)("option",{value:""},"全部状态",-1),(0,a.Lk)("option",{value:"0"},"只看不会的题",-1),(0,a.Lk)("option",{value:"1"},"只看已会的题",-1)]),512),[[n.u1,i.statusFilter]]),(0,a.Lk)("div",Fe,[(0,a.bo)((0,a.Lk)("input",{"onUpdate:modelValue":t[4]||(t[4]=e=>i.knowledgeSearch=e),onFocus:t[5]||(t[5]=e=>s.fetchKnowledgePoints()),onInput:t[6]||(t[6]=e=>s.fetchKnowledgePoints()),placeholder:"搜索知识点"},null,544),[[n.Jo,i.knowledgeSearch]]),i.showKnowledgeList?((0,a.uX)(),(0,a.CE)("div",Xe,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(i.knowledgePoints,(e=>((0,a.uX)(),(0,a.CE)("div",{key:e.id,onClick:t=>s.selectKnowledge(e),class:"knowledge-item"},(0,f.v_)(e.title),9,Oe)))),128))])):(0,a.Q3)("",!0)],512)]),(0,a.Lk)("table",Ae,[t[14]||(t[14]=(0,a.Lk)("thead",null,[(0,a.Lk)("tr",null,[(0,a.Lk)("th",null,"编号"),(0,a.Lk)("th",null,"标题"),(0,a.Lk)("th",null,"难度"),(0,a.Lk)("th",null,"知识点"),(0,a.Lk)("th",null,"状态")])],-1)),(0,a.Lk)("tbody",null,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(i.problems,(e=>((0,a.uX)(),(0,a.CE)("tr",{key:e.id,onClick:t=>s.goToProblem(e.id)},[(0,a.Lk)("td",null,(0,f.v_)(e.id),1),(0,a.Lk)("td",null,(0,f.v_)(e.title),1),(0,a.Lk)("td",null,(0,f.v_)(s.getDifficultyText(e.difficulty)),1),(0,a.Lk)("td",null,[e.knowledge&&e.knowledge.length>0?((0,a.uX)(!0),(0,a.CE)(a.FK,{key:0},(0,a.pI)(e.knowledge,(e=>((0,a.uX)(),(0,a.CE)("span",{key:e.id,class:"knowledge-tag"},(0,f.v_)(e.title),1)))),128)):((0,a.uX)(),(0,a.CE)("span",Me,"无"))]),(0,a.Lk)("td",null,[(0,a.Lk)("span",{class:(0,f.C4)(["status-tag",{solved:1===e.status,unsolved:0===e.status}])},(0,f.v_)(s.getStatusText(e.status)),3)])],8,xe)))),128))])]),(0,a.Lk)("div",Je,[(0,a.Lk)("button",{disabled:1===i.page,onClick:t[7]||(t[7]=e=>s.changePage(i.page-1))},"上一页",8,Ne),(0,a.Lk)("span",null,"第 "+(0,f.v_)(i.page)+" 页 / 共 "+(0,f.v_)(i.totalPages)+" 页",1),(0,a.Lk)("button",{disabled:i.page===i.totalPages,onClick:t[8]||(t[8]=e=>s.changePage(i.page+1))},"下一页",8,Ie),(0,a.Lk)("div",Ue,[t[15]||(t[15]=(0,a.eW)(" 快速跳转至 ")),(0,a.bo)((0,a.Lk)("input",{"onUpdate:modelValue":t[9]||(t[9]=e=>i.jumpPage=e),type:"number",min:"1",max:i.totalPages,onKeyup:t[10]||(t[10]=(0,n.jR)(((...e)=>s.handleJump&&s.handleJump(...e)),["enter"]))},null,40,Be),[[n.Jo,i.jumpPage]]),t[16]||(t[16]=(0,a.eW)(" 页 ")),(0,a.Lk)("button",{onClick:t[11]||(t[11]=(...e)=>s.handleJump&&s.handleJump(...e))},"跳转")])])])}var Ve={data(){return{problems:[],page:1,totalPages:1,title:"",content:"",difficulty:"",statusFilter:"",knowledgeSearch:"",knowledgePoints:[],showKnowledgeList:!1,selectedKnowledge:null,token:h.A.get("token")||"",jumpPage:""}},methods:{async fetchProblems(){try{const e=await fetch("https://api.oj.东北大学.com/my_problem_list",{method:"POST",headers:{Authorization:this.token,"Content-Type":"application/json"},body:JSON.stringify({page:this.page,title:this.title||void 0,content:this.content||void 0,difficulty:this.difficulty?Number(this.difficulty):void 0,status_filter:this.statusFilter?Number(this.statusFilter):void 0,knowledge_id:this.selectedKnowledge?.id})}),t=await e.json();this.problems=t.problems,this.totalPages=t.pages}catch(e){console.error("Error:",e)}},goToProblem(e){this.$router.push(`/problem/${e}`)},changePage(e){this.page=e,this.fetchProblems()},getDifficultyText(e){const t={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10"};return t[e]||"未知"},getStatusText(e){return 1===e?"已会":"不会"},async fetchKnowledgePoints(){try{const e=await fetch("https://api.oj.东北大学.com/knowledge",{method:"POST",headers:{Authorization:this.token,"Content-Type":"application/json"},body:JSON.stringify({search:this.knowledgeSearch})}),t=await e.json();this.knowledgePoints=t,this.showKnowledgeList=!0}catch(e){console.error("Error:",e)}},selectKnowledge(e){this.selectedKnowledge=e,this.knowledgeSearch=e.title,this.showKnowledgeList=!1,this.page=1,this.fetchProblems()},handleClickOutside(e){const t=this.$refs.knowledgeSearch;t&&!t.contains(e.target)&&(this.showKnowledgeList=!1,this.selectedKnowledge||(this.knowledgeSearch=""))},handleJump(){const e=parseInt(this.jumpPage);e&&e>=1&&e<=this.totalPages?this.changePage(e):alert("请输入有效的页码!"),this.jumpPage=""}},watch:{title(){this.page=1,this.fetchProblems()},difficulty(){this.page=1,this.fetchProblems()},statusFilter(){this.page=1,this.fetchProblems()},content(){this.page=1,this.fetchProblems()},knowledgeSearch(e){e||(this.selectedKnowledge=null,this.page=1,this.fetchProblems())}},mounted(){document.title="我标记的题目 - OJ题库 - NEU小站",this.fetchProblems(),document.addEventListener("click",this.handleClickOutside)},unmounted(){document.removeEventListener("click",this.handleClickOutside)}};const qe=(0,p.A)(Ve,[["render",De],["__scopeId","data-v-3fac1adc"]]);var We=qe;const ze={class:"bookmark-page"},He={key:0,class:"loading"},Qe={key:1,class:"empty-state"},Re={key:2,class:"timeline"},Ye={class:"month-header"},Ge={class:"day-header"},Ze={class:"bookmark-grid"},et={class:"card-content"},tt={class:"problem-title"},ot={style:{color:"#FF9800"}},nt={class:"bookmark-title"},at={class:"bookmark-time"},lt={class:"card-actions"},it=["onClick"],st=["onClick"];function rt(e,t,o,n,l,i){const s=(0,a.g2)("router-link");return(0,a.uX)(),(0,a.CE)("div",ze,[t[5]||(t[5]=(0,a.Lk)("h1",null,"我的书签",-1)),l.loading?((0,a.uX)(),(0,a.CE)("div",He," 加载中... ")):0===i.bookmarksByMonth.length?((0,a.uX)(),(0,a.CE)("div",Qe,[t[1]||(t[1]=(0,a.Lk)("div",{class:"empty-icon"},"📚",-1)),t[2]||(t[2]=(0,a.Lk)("p",null,"您还没有添加任何书签",-1)),(0,a.bF)(s,{to:"/problems",class:"empty-action"},{default:(0,a.k6)((()=>t[0]||(t[0]=[(0,a.eW)(" 去浏览题目 ")]))),_:1})])):((0,a.uX)(),(0,a.CE)("div",Re,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(i.bookmarksByMonth,((e,o)=>((0,a.uX)(),(0,a.CE)("div",{key:o,class:"month-section"},[(0,a.Lk)("div",Ye,[t[3]||(t[3]=(0,a.Lk)("div",{class:"month-dot"},null,-1)),(0,a.Lk)("h2",null,(0,f.v_)(e.label),1)]),((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(e.days,((e,o)=>((0,a.uX)(),(0,a.CE)("div",{key:o,class:"day-section"},[(0,a.Lk)("div",Ge,[t[4]||(t[4]=(0,a.Lk)("div",{class:"day-dot"},null,-1)),(0,a.Lk)("h3",null,(0,f.v_)(e.label),1)]),(0,a.Lk)("div",Ze,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(e.bookmarks,(e=>((0,a.uX)(),(0,a.CE)("div",{key:e.id,class:"bookmark-card"},[(0,a.Lk)("div",et,[(0,a.Lk)("h4",tt,[(0,a.Lk)("span",ot,(0,f.v_)(e.problem_id)+".",1),(0,a.eW)(" "+(0,f.v_)(e.problem_title),1)]),(0,a.Lk)("p",nt,(0,f.v_)(e.title||"未命名书签"),1),(0,a.Lk)("div",at,"添加于 "+(0,f.v_)(i.formatTime(e.created_at)),1)]),(0,a.Lk)("div",lt,[(0,a.Lk)("button",{onClick:t=>i.goToProblem(e.problem_id),class:"action-btn view-btn"}," 进入本题 ",8,it),(0,a.Lk)("button",{onClick:t=>i.deleteBookmark(e.id),class:"action-btn delete-btn"}," 删除书签 ",8,st)])])))),128))])])))),128))])))),128))]))])}o(8111),o(7588);var ct={data(){return{bookmarks:[],loading:!0,token:h.A.get("token")||""}},computed:{bookmarksByMonth(){if(!this.bookmarks.length)return[];const e=[],t=new Map;return this.bookmarks.forEach((o=>{const n=new Date(o.created_at),a=`${n.getFullYear()}-${n.getMonth()+1}`,l=`${n.getFullYear()}-${n.getMonth()+1}-${n.getDate()}`;if(!t.has(a)){const o={key:a,label:`${n.getFullYear()}年${n.getMonth()+1}月`,days:[],dayMap:new Map};t.set(a,o),e.push(o)}const i=t.get(a);if(!i.dayMap.has(l)){const e={key:l,label:`${n.getMonth()+1}月${n.getDate()}日`,bookmarks:[]};i.dayMap.set(l,e),i.days.push(e)}i.dayMap.get(l).bookmarks.push(o)})),e.sort(((e,t)=>{const o=new Date(e.key+"-1"),n=new Date(t.key+"-1");return n-o})),e.forEach((e=>{e.days.sort(((e,t)=>{const o=new Date(e.key),n=new Date(t.key);return n-o}))})),e}},methods:{async fetchBookmarks(){this.loading=!0;try{const e=await fetch("https://api.oj.东北大学.com/bookmark/get",{headers:{Authorization:this.token}});if(!e.ok)throw new Error("获取书签失败");const t=await e.json();this.bookmarks=t.bookmarks}catch(e){console.error("Error fetching bookmarks:",e)}finally{this.loading=!1}},formatTime(e){const t=new Date(e),o=t.getHours().toString().padStart(2,"0"),n=t.getMinutes().toString().padStart(2,"0");return`${o}:${n}`},goToProblem(e){this.$router.push(`/problem/${e}`)},async deleteBookmark(e){if(confirm("确定要删除这个书签吗?"))try{const t=await fetch("https://api.oj.东北大学.com/bookmark/delete_mark",{method:"POST",headers:{Authorization:this.token,"Content-Type":"application/json"},body:JSON.stringify({mark_id:e})});if(!t.ok)throw new Error("删除书签失败");await this.fetchBookmarks()}catch(t){console.error("Error deleting bookmark:",t),alert("删除书签失败,请稍后重试")}}},mounted(){document.title="我的书签 - OJ题库 - NEU小站",this.fetchBookmarks()}};const dt=(0,p.A)(ct,[["render",rt],["__scopeId","data-v-0fc4ded2"]]);var ut=dt;const ht=[{path:"/",redirect:"/problems"},{path:"/problems",name:"ProblemList",component:A},{path:"/problem/:id",name:"ProblemDetail",component:$e,meta:{title:"题目详情"}},{path:"/my",name:"MyProblemList",component:We},{path:"/bookmarks",name:"BookmarkList",component:ut,meta:{title:"我的书签"}},{path:"/about",name:"About",component:()=>o.e(712).then(o.bind(o,9712)),meta:{title:"关于"}},{path:"/:pathMatch(.*)*",redirect:"/problems"}],kt=(0,b.aE)({history:(0,b.LA)(),routes:ht});var pt=kt,mt=o(782),gt=(0,mt.y$)({state:{},getters:{},mutations:{},actions:{},modules:{}});(0,n.Ef)(g).use(gt).use(pt).mount("#app")}},t={};function o(n){var a=t[n];if(void 0!==a)return a.exports;var l=t[n]={id:n,loaded:!1,exports:{}};return e[n].call(l.exports,l,l.exports,o),l.loaded=!0,l.exports}o.m=e,function(){var e=[];o.O=function(t,n,a,l){if(!n){var i=1/0;for(d=0;d=l)&&Object.keys(o.O).every((function(e){return o.O[e](n[r])}))?n.splice(r--,1):(s=!1,l0&&e[d-1][2]>l;d--)e[d]=e[d-1];e[d]=[n,a,l]}}(),function(){o.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return o.d(t,{a:t}),t}}(),function(){o.d=function(e,t){for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}}(),function(){o.f={},o.e=function(e){return Promise.all(Object.keys(o.f).reduce((function(t,n){return o.f[n](e,t),t}),[]))}}(),function(){o.u=function(e){return"js/"+e+".807a0a53.js"}}(),function(){o.miniCssF=function(e){return"css/"+e+".13c2d822.css"}}(),function(){o.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}}(),function(){var e={},t="front:";o.l=function(n,a,l,i){if(e[n])e[n].push(a);else{var s,r;if(void 0!==l)for(var c=document.getElementsByTagName("script"),d=0;dt[4]||(t[4]=[(0,a.eW)("题目列表")]))),_:1}),(0,a.bF)(k,{to:"/my",class:"nav-item"},{default:(0,a.k6)((()=>t[5]||(t[5]=[(0,a.eW)("我标记的题目")]))),_:1}),(0,a.bF)(k,{to:"/bookmarks",class:"nav-item"},{default:(0,a.k6)((()=>t[6]||(t[6]=[(0,a.eW)("我的书签")]))),_:1}),(0,a.bF)(k,{to:"/about",class:"nav-item"},{default:(0,a.k6)((()=>t[7]||(t[7]=[(0,a.eW)("关于")]))),_:1})]),t[8]||(t[8]=(0,a.Lk)("div",{class:"footer-info"},[(0,a.Lk)("div",{class:"version-info"},"NEU小站OJ题库 - v1.0"),(0,a.Lk)("div",{class:"source-info"},[(0,a.eW)("© 2025 "),(0,a.Lk)("a",{href:"https://www.东北大学.com",target:"_blank"},"NEU小站")])],-1))]),(0,a.Lk)("div",d,[(0,a.bF)(p)])],64)):((0,a.uX)(),(0,a.CE)("div",s,[t[1]||(t[1]=(0,a.Lk)("div",{class:"login-message"},"请登录后进入NEU小站OJ题库!",-1)),(0,a.Lk)("button",{class:"login-button",onClick:t[0]||(t[0]=(...e)=>h.goToLogin&&h.goToLogin(...e))},"前往登录"),t[2]||(t[2]=(0,a.Lk)("div",{class:"login-note"},"本系统所有题目来自东北大学OJ系统,本站仅归纳展示题目,不提供在线评测环境。",-1)),t[3]||(t[3]=(0,a.Lk)("div",{class:"login-note"},"本系统向所有用户公开,仅需注册账号即可使用,无需经过校内验证。",-1))]))])}var h=o(8704),k={data(){return{isLoggedIn:!1,isLoading:!0,token:h.A.get("token")||""}},watch:{isLoggedIn:{handler(e){document.title=e?"NEU小站OJ题库 - 题目列表":"NEU小站OJ题库"},immediate:!0}},methods:{async checkLoginStatus(){try{const e=await fetch("https://api.oj.东北大学.com/check_login",{headers:{Authorization:this.token}}),t=await e.json();this.isLoggedIn=t.isLoggedIn}catch(e){console.error("Error:",e),this.isLoggedIn=!1}finally{this.isLoading=!1}},goToLogin(){window.location.href="https://www.东北大学.com/submission"}},mounted(){this.checkLoginStatus()}},p=o(1241);const m=(0,p.A)(k,[["render",u]]);var g=m,b=o(1387),f=o(4232);const v={class:"problem-list"},y={class:"filters"},L={class:"knowledge-search",ref:"knowledgeSearch"},w={key:0,class:"knowledge-list"},C=["onClick"],P={class:"problems-table"},E=["onClick"],T={key:1,class:"no-knowledge"},_={class:"pagination"},S=["disabled"],$=["disabled"],j={class:"quick-jump"},K=["max"];function F(e,t,o,l,i,s){return(0,a.uX)(),(0,a.CE)("div",v,[(0,a.Lk)("div",y,[(0,a.bo)((0,a.Lk)("input",{"onUpdate:modelValue":t[0]||(t[0]=e=>i.title=e),placeholder:"搜索题目标题"},null,512),[[n.Jo,i.title]]),(0,a.bo)((0,a.Lk)("input",{"onUpdate:modelValue":t[1]||(t[1]=e=>i.content=e),placeholder:"搜索题目内容"},null,512),[[n.Jo,i.content]]),(0,a.bo)((0,a.Lk)("select",{"onUpdate:modelValue":t[2]||(t[2]=e=>i.difficulty=e)},t[12]||(t[12]=[(0,a.Fv)('',11)]),512),[[n.u1,i.difficulty]]),(0,a.bo)((0,a.Lk)("select",{"onUpdate:modelValue":t[3]||(t[3]=e=>i.statusFilter=e)},t[13]||(t[13]=[(0,a.Lk)("option",{value:""},"全部状态",-1),(0,a.Lk)("option",{value:"0"},"不显示已会的题",-1),(0,a.Lk)("option",{value:"1"},"不显示已会和不会的题",-1)]),512),[[n.u1,i.statusFilter]]),(0,a.Lk)("div",L,[(0,a.bo)((0,a.Lk)("input",{"onUpdate:modelValue":t[4]||(t[4]=e=>i.knowledgeSearch=e),onFocus:t[5]||(t[5]=e=>s.fetchKnowledgePoints()),onInput:t[6]||(t[6]=e=>s.fetchKnowledgePoints()),placeholder:"搜索知识点"},null,544),[[n.Jo,i.knowledgeSearch]]),i.showKnowledgeList?((0,a.uX)(),(0,a.CE)("div",w,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(i.knowledgePoints,(e=>((0,a.uX)(),(0,a.CE)("div",{key:e.id,onClick:t=>s.selectKnowledge(e),class:"knowledge-item"},(0,f.v_)(e.title),9,C)))),128))])):(0,a.Q3)("",!0)],512)]),(0,a.Lk)("table",P,[t[14]||(t[14]=(0,a.Lk)("thead",null,[(0,a.Lk)("tr",null,[(0,a.Lk)("th",null,"编号"),(0,a.Lk)("th",null,"标题"),(0,a.Lk)("th",null,"难度"),(0,a.Lk)("th",null,"知识点"),(0,a.Lk)("th",null,"状态")])],-1)),(0,a.Lk)("tbody",null,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(i.problems,(e=>((0,a.uX)(),(0,a.CE)("tr",{key:e.id,onClick:t=>s.goToProblem(e.id)},[(0,a.Lk)("td",null,(0,f.v_)(e.id),1),(0,a.Lk)("td",null,(0,f.v_)(e.title),1),(0,a.Lk)("td",null,(0,f.v_)(s.getDifficultyText(e.difficulty)),1),(0,a.Lk)("td",null,[e.knowledge&&e.knowledge.length>0?((0,a.uX)(!0),(0,a.CE)(a.FK,{key:0},(0,a.pI)(e.knowledge,(e=>((0,a.uX)(),(0,a.CE)("span",{key:e.id,class:"knowledge-tag"},(0,f.v_)(e.title),1)))),128)):((0,a.uX)(),(0,a.CE)("span",T,"无"))]),(0,a.Lk)("td",null,[(0,a.Lk)("span",{class:(0,f.C4)(["status-tag",{unmarked:null===e.status,solved:1===e.status,unsolved:0===e.status}])},(0,f.v_)(s.getStatusText(e.status)),3)])],8,E)))),128))])]),(0,a.Lk)("div",_,[(0,a.Lk)("button",{disabled:1===i.page,onClick:t[7]||(t[7]=e=>s.changePage(i.page-1))},"上一页",8,S),(0,a.Lk)("span",null,"第 "+(0,f.v_)(i.page)+" 页 / 共 "+(0,f.v_)(i.totalPages)+" 页",1),(0,a.Lk)("button",{disabled:i.page===i.totalPages,onClick:t[8]||(t[8]=e=>s.changePage(i.page+1))},"下一页",8,$),(0,a.Lk)("div",j,[t[15]||(t[15]=(0,a.eW)(" 快速跳转至 ")),(0,a.bo)((0,a.Lk)("input",{"onUpdate:modelValue":t[9]||(t[9]=e=>i.jumpPage=e),type:"number",min:"1",max:i.totalPages,onKeyup:t[10]||(t[10]=(0,n.jR)(((...e)=>s.handleJump&&s.handleJump(...e)),["enter"]))},null,40,K),[[n.Jo,i.jumpPage]]),t[16]||(t[16]=(0,a.eW)(" 页 ")),(0,a.Lk)("button",{onClick:t[11]||(t[11]=(...e)=>s.handleJump&&s.handleJump(...e))},"跳转")])])])}o(4114);var X={data(){return{problems:[],page:1,totalPages:1,title:"",content:"",difficulty:"",statusFilter:"",knowledgeSearch:"",knowledgePoints:[],showKnowledgeList:!1,selectedKnowledge:null,token:h.A.get("token")||"",jumpPage:""}},methods:{async fetchProblems(){try{const e=await fetch("https://api.oj.东北大学.com/problem_list",{method:"POST",headers:{Authorization:this.token,"Content-Type":"application/json"},body:JSON.stringify({page:this.page,title:this.title||void 0,content:this.content||void 0,difficulty:this.difficulty?Number(this.difficulty):void 0,status_filter:this.statusFilter?Number(this.statusFilter):void 0,knowledge_id:this.selectedKnowledge?.id})}),t=await e.json();this.problems=t.problems,this.totalPages=t.pages;const o={...this.$route.query,page:this.page};this.$router.replace({query:o},{keepActiveRoute:!0})}catch(e){console.error("Error:",e)}},goToProblem(e){this.$router.push(`/problem/${e}`)},changePage(e){e<1||e>this.totalPages||(this.page=e,this.fetchProblems())},getDifficultyText(e){const t={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10"};return t[e]||"未知"},getStatusText(e){const t={0:"不会",1:"已会",null:"未标记"};return t[e]||"未标记"},async fetchKnowledgePoints(){try{const e=await fetch("https://api.oj.东北大学.com/knowledge",{method:"POST",headers:{Authorization:this.token,"Content-Type":"application/json"},body:JSON.stringify({search:this.knowledgeSearch})}),t=await e.json();this.knowledgePoints=t,this.showKnowledgeList=!0}catch(e){console.error("Error:",e)}},selectKnowledge(e){this.selectedKnowledge=e,this.knowledgeSearch=e.title,this.showKnowledgeList=!1,this.page=1,this.fetchProblems()},goToKnowledge(e){this.$router.push({path:"/problems",query:{knowledge_id:e.id}})},handleClickOutside(e){const t=this.$refs.knowledgeSearch;t&&!t.contains(e.target)&&(this.showKnowledgeList=!1,this.selectedKnowledge||(this.knowledgeSearch=""))},handleJump(){const e=parseInt(this.jumpPage);e&&e>=1&&e<=this.totalPages?this.changePage(e):alert("请输入有效的页码!"),this.jumpPage=""}},watch:{title(){this.page=1,this.fetchProblems()},difficulty(){this.page=1,this.fetchProblems()},statusFilter(){this.page=1,this.fetchProblems()},content(){this.page=1,this.fetchProblems()},knowledgeSearch(e){e||(this.selectedKnowledge=null,this.page=1,this.fetchProblems())},"$route.query.page":{immediate:!0,handler(e){const t=parseInt(e);t&&t>=1&&(this.page=t,this.fetchProblems())}}},mounted(){const e=parseInt(this.$route.query.page);e&&e>=1&&(this.page=e),document.title="题目列表 - OJ题库 - NEU小站",this.fetchProblems(),document.addEventListener("click",this.handleClickOutside)},unmounted(){document.removeEventListener("click",this.handleClickOutside)}};const O=(0,p.A)(X,[["render",F],["__scopeId","data-v-4fb05069"]]);var A=O;const x={key:0,class:"problem-detail"},M={class:"problem-header"},J={class:"problem-meta"},N={class:"difficulty"},I={class:"knowledge-points",style:{"margin-top":"10px"}},U={key:1,class:"no-knowledge"},B={class:"feedback-section",style:{"margin-top":"10px"}},D={class:"problem-content"},V={class:"content-section"},q=["innerHTML"],W={class:"content-section"},z={class:"limits-container"},H={class:"limit-item"},Q={class:"limit-value"},R={class:"limit-item"},Y={class:"limit-value"},G={class:"content-section"},Z={class:"example"},ee={key:0,class:"content-section"},te=["innerHTML"],oe={class:"problem-status"},ne=["disabled"],ae=["disabled"],le={key:1,class:"modal"},ie={class:"modal-content"},se={class:"form-group"},re=["value"],ce={class:"form-group"},de={class:"modal-actions"},ue={key:2,class:"modal"},he={class:"modal-content"},ke={class:"form-group"},pe=["value"],me={class:"form-group"},ge={class:"quick-tags"},be=["onClick"],fe={class:"modal-actions"};function ve(e,t,o,l,i,s){return(0,a.uX)(),(0,a.CE)(a.FK,null,[i.problem?((0,a.uX)(),(0,a.CE)("div",x,[(0,a.Lk)("div",M,[(0,a.Lk)("h1",null,(0,f.v_)(i.problem.title),1),(0,a.Lk)("div",J,[(0,a.Lk)("span",N,"难度:"+(0,f.v_)(s.getDifficultyText(i.problem.difficulty)),1),(0,a.Lk)("div",I,[t[12]||(t[12]=(0,a.eW)(" 知识点: ")),i.problem.knowledge&&i.problem.knowledge.length>0?((0,a.uX)(!0),(0,a.CE)(a.FK,{key:0},(0,a.pI)(i.problem.knowledge,(e=>((0,a.uX)(),(0,a.CE)("span",{key:e.id,class:"knowledge-tag"},(0,f.v_)(e.title),1)))),128)):((0,a.uX)(),(0,a.CE)("span",U,"无"))]),(0,a.Lk)("div",B,[t[13]||(t[13]=(0,a.eW)(" 题目有问题?")),(0,a.Lk)("button",{class:"feedback-btn",onClick:t[0]||(t[0]=e=>i.showFeedbackModal=!0)},"反馈")])])]),(0,a.Lk)("div",D,[(0,a.Lk)("div",V,[t[14]||(t[14]=(0,a.Lk)("h2",null,"题目描述",-1)),(0,a.Lk)("div",{innerHTML:s.renderedContent},null,8,q)]),(0,a.Lk)("div",W,[t[17]||(t[17]=(0,a.Lk)("h2",null,"题目限制",-1)),(0,a.Lk)("div",z,[(0,a.Lk)("div",H,[t[15]||(t[15]=(0,a.Lk)("span",{class:"limit-label"},"内存限制:",-1)),(0,a.Lk)("span",Q,(0,f.v_)((i.problem.memory_limit/1024).toFixed(1))+" MB",1)]),(0,a.Lk)("div",R,[t[16]||(t[16]=(0,a.Lk)("span",{class:"limit-label"},"时间限制:",-1)),(0,a.Lk)("span",Y,(0,f.v_)(i.problem.time_limit)+" s",1)])])]),(0,a.Lk)("div",G,[t[20]||(t[20]=(0,a.Lk)("h2",null,"示例",-1)),(0,a.Lk)("div",Z,[t[18]||(t[18]=(0,a.Lk)("h3",null,"输入",-1)),(0,a.Lk)("pre",null,(0,f.v_)(i.problem.example_input),1),t[19]||(t[19]=(0,a.Lk)("h3",null,"输出",-1)),(0,a.Lk)("pre",null,(0,f.v_)(i.problem.example_output),1)])]),i.problem.hint?((0,a.uX)(),(0,a.CE)("div",ee,[t[21]||(t[21]=(0,a.Lk)("h2",null,"提示",-1)),(0,a.Lk)("div",{innerHTML:s.renderedHint},null,8,te)])):(0,a.Q3)("",!0)]),(0,a.Lk)("div",oe,[(0,a.Lk)("button",{onClick:t[1]||(t[1]=e=>s.markProblem(0)),class:(0,f.C4)({active:0===i.problem.status})}," 不会 ",2),(0,a.Lk)("button",{onClick:t[2]||(t[2]=e=>s.markProblem(1)),class:(0,f.C4)({active:1===i.problem.status})}," 已会 ",2),(0,a.Lk)("button",{onClick:t[3]||(t[3]=e=>i.showBookmarkModal=!0),class:"bookmark-btn"}," 添加书签 "),(0,a.Lk)("button",{onClick:t[4]||(t[4]=(...e)=>s.goToPreviousProblem&&s.goToPreviousProblem(...e)),class:"previous-problem",disabled:!i.problem.last}," 上一题 ",8,ne),(0,a.Lk)("button",{onClick:t[5]||(t[5]=(...e)=>s.goToNextProblem&&s.goToNextProblem(...e)),class:"next-problem",disabled:!i.problem.next}," 下一题 ",8,ae)])])):(0,a.Q3)("",!0),i.showBookmarkModal?((0,a.uX)(),(0,a.CE)("div",le,[(0,a.Lk)("div",ie,[t[24]||(t[24]=(0,a.Lk)("h3",null,"添加书签",-1)),(0,a.Lk)("div",se,[t[22]||(t[22]=(0,a.Lk)("label",null,"题目:",-1)),(0,a.Lk)("input",{type:"text",value:i.problem.title,disabled:""},null,8,re)]),(0,a.Lk)("div",ce,[t[23]||(t[23]=(0,a.Lk)("label",null,"书签内容(可选):",-1)),(0,a.bo)((0,a.Lk)("input",{type:"text","onUpdate:modelValue":t[6]||(t[6]=e=>i.bookmarkTitle=e),placeholder:"为这个书签添加描述..."},null,512),[[n.Jo,i.bookmarkTitle]])]),(0,a.Lk)("div",de,[(0,a.Lk)("button",{onClick:t[7]||(t[7]=(...e)=>s.addBookmark&&s.addBookmark(...e)),class:"submit-btn"},"确定"),(0,a.Lk)("button",{onClick:t[8]||(t[8]=e=>i.showBookmarkModal=!1),class:"cancel-btn"},"取消")])])])):(0,a.Q3)("",!0),i.showFeedbackModal?((0,a.uX)(),(0,a.CE)("div",ue,[(0,a.Lk)("div",he,[t[27]||(t[27]=(0,a.Lk)("h3",null,"题目问题反馈",-1)),(0,a.Lk)("div",ke,[t[25]||(t[25]=(0,a.Lk)("label",null,"题目:",-1)),(0,a.Lk)("input",{type:"text",value:i.problem.title,disabled:""},null,8,pe)]),(0,a.Lk)("div",me,[t[26]||(t[26]=(0,a.Lk)("label",null,"反馈内容:",-1)),(0,a.bo)((0,a.Lk)("textarea",{"onUpdate:modelValue":t[9]||(t[9]=e=>i.feedbackContent=e),placeholder:"请描述您遇到的问题...",rows:"4"},null,512),[[n.Jo,i.feedbackContent]])]),(0,a.Lk)("div",ge,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(i.quickTags,(e=>((0,a.uX)(),(0,a.CE)("button",{key:e,onClick:t=>s.appendTag(e),class:"tag-btn"},(0,f.v_)(e),9,be)))),128))]),(0,a.Lk)("div",fe,[(0,a.Lk)("button",{onClick:t[10]||(t[10]=(...e)=>s.submitFeedback&&s.submitFeedback(...e)),class:"submit-btn"},"提交"),(0,a.Lk)("button",{onClick:t[11]||(t[11]=e=>i.showFeedbackModal=!1),class:"cancel-btn"},"取消")])])])):(0,a.Q3)("",!0)],64)}var ye=o(642),Le=o(1995),we=o.n(Le),Ce=o(1109),Pe=(o(9351),o(437)),Ee=o(8734),Te=o.n(Ee),_e={data(){return{problem:null,md:null,token:h.A.get("token")||"",showFeedbackModal:!1,feedbackContent:"",quickTags:["图片无法加载","公式渲染错乱","题目内容有误"],showBookmarkModal:!1,bookmarkTitle:""}},created(){this.md=new ye.A({html:!0,breaks:!0,linkify:!0,highlight:function(e,t){if(t&&Ce.A.getLanguage(t))try{return Ce.A.highlight(e,{language:t}).value}catch(o){}return""}});const e=this.md.renderer.rules.text||function(e,t,o,n,a){return a.renderToken(e,t,o)};this.md.renderer.rules.text=function(t,o,n,a,l){let i=t[o].content;return i=i.replace(/(?{try{return Pe.Ay.renderToString(t.trim(),{displayMode:!1})}catch(o){return console.warn("KaTeX error:",o),e}})),i=i.replace(/(?{try{return Pe.Ay.renderToString(t.trim(),{displayMode:!0})}catch(o){return console.warn("KaTeX error:",o),e}})),t[o].content=i,e(t,o,n,a,l)},this.md.use(we())},computed:{renderedContent(){if(!this.problem)return"";let e=this.md.render(this.problem.content);return e=e.replace(/\$([^$\n]+?)\$/g,((e,t)=>{try{return Pe.Ay.renderToString(t.trim(),{displayMode:!1})}catch(o){return console.warn("KaTeX inline error:",o),e}})),e=e.replace(/\$\$([^$]+?)\$\$/g,((e,t)=>{try{return Pe.Ay.renderToString(t.trim(),{displayMode:!0})}catch(o){return console.warn("KaTeX display error:",o),e}})),e=Te().decode(e),e},renderedHint(){if(!this.problem||!this.problem.hint)return"";let e=this.md.render(this.problem.hint);return e=e.replace(/\$([^$\n]+?)\$/g,((e,t)=>{try{return Pe.Ay.renderToString(t.trim(),{displayMode:!1})}catch(o){return console.warn("KaTeX inline error:",o),e}})),e=e.replace(/\$\$([^$]+?)\$\$/g,((e,t)=>{try{return Pe.Ay.renderToString(t.trim(),{displayMode:!0})}catch(o){return console.warn("KaTeX display error:",o),e}})),e=Te().decode(e),e}},methods:{async fetchProblem(){try{const e=await fetch(`https://api.oj.东北大学.com/problem?problem_id=${this.$route.params.id}`,{headers:{Authorization:this.token}});this.problem=await e.json()}catch(e){console.error("Error:",e)}},async markProblem(e){try{const t=await fetch("https://api.oj.东北大学.com/mark",{method:"POST",headers:{Authorization:this.token,"Content-Type":"application/json"},body:JSON.stringify({problem_id:this.problem.id,status:this.problem.status===e?2:e})});t.ok&&await this.fetchProblem()}catch(t){console.error("Error:",t)}},getDifficultyText(e){const t={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10"};return t[e]||"未知"},goToKnowledge(e){this.$router.push({path:"/problems",query:{knowledge_id:e.id}})},async goToNextProblem(){this.problem.next?this.$router.push(`/problem/${this.problem.next}`):alert("已经是最后一题了~")},async goToPreviousProblem(){this.problem.last?this.$router.push(`/problem/${this.problem.last}`):alert("已经是第一题了~")},appendTag(e){this.feedbackContent?this.feedbackContent+=" "+e:this.feedbackContent=e},async submitFeedback(){if(this.feedbackContent.trim())try{const e=await fetch("https://api.oj.东北大学.com/report",{method:"POST",headers:{Authorization:this.token,"Content-Type":"application/json"},body:JSON.stringify({problem_id:this.problem.id,content:this.feedbackContent.trim()})});if(e.ok)alert("反馈已提交,感谢您的支持!"),this.showFeedbackModal=!1,this.feedbackContent="";else{const t=await e.json();alert(t.error||"提交失败,请稍后重试")}}catch(e){console.error("Error:",e),alert("提交失败,请稍后重试")}else alert("请输入反馈内容!")},async addBookmark(){if(this.problem)try{const e=await fetch("https://api.oj.东北大学.com/bookmark/add_mark",{method:"POST",headers:{Authorization:this.token,"Content-Type":"application/json"},body:JSON.stringify({problem_id:this.problem.id,title:this.bookmarkTitle.trim()})});if(e.ok){await e.json();alert("书签添加成功!"),this.showBookmarkModal=!1,this.bookmarkTitle=""}else{const t=await e.json();alert(t.error||"添加书签失败,请稍后重试")}}catch(e){console.error("Error adding bookmark:",e),alert("添加书签失败,请稍后重试")}}},mounted(){this.fetchProblem()},watch:{"$route.params.id"(){this.fetchProblem()},"problem.title"(){this.problem&&this.problem.title&&(document.title=`${this.problem.title} - OJ题库 - NEU小站`)}}};const Se=(0,p.A)(_e,[["render",ve]]);var $e=Se;const je={class:"problem-list"},Ke={class:"filters"},Fe={class:"knowledge-search",ref:"knowledgeSearch"},Xe={key:0,class:"knowledge-list"},Oe=["onClick"],Ae={class:"problems-table"},xe=["onClick"],Me={key:1,class:"no-knowledge"},Je={class:"pagination"},Ne=["disabled"],Ie=["disabled"],Ue={class:"quick-jump"},Be=["max"];function De(e,t,o,l,i,s){return(0,a.uX)(),(0,a.CE)("div",je,[(0,a.Lk)("div",Ke,[(0,a.bo)((0,a.Lk)("input",{"onUpdate:modelValue":t[0]||(t[0]=e=>i.title=e),placeholder:"搜索题目标题"},null,512),[[n.Jo,i.title]]),(0,a.bo)((0,a.Lk)("input",{"onUpdate:modelValue":t[1]||(t[1]=e=>i.content=e),placeholder:"搜索题目内容"},null,512),[[n.Jo,i.content]]),(0,a.bo)((0,a.Lk)("select",{"onUpdate:modelValue":t[2]||(t[2]=e=>i.difficulty=e)},t[12]||(t[12]=[(0,a.Fv)('',11)]),512),[[n.u1,i.difficulty]]),(0,a.bo)((0,a.Lk)("select",{"onUpdate:modelValue":t[3]||(t[3]=e=>i.statusFilter=e)},t[13]||(t[13]=[(0,a.Lk)("option",{value:""},"全部状态",-1),(0,a.Lk)("option",{value:"0"},"只看不会的题",-1),(0,a.Lk)("option",{value:"1"},"只看已会的题",-1)]),512),[[n.u1,i.statusFilter]]),(0,a.Lk)("div",Fe,[(0,a.bo)((0,a.Lk)("input",{"onUpdate:modelValue":t[4]||(t[4]=e=>i.knowledgeSearch=e),onFocus:t[5]||(t[5]=e=>s.fetchKnowledgePoints()),onInput:t[6]||(t[6]=e=>s.fetchKnowledgePoints()),placeholder:"搜索知识点"},null,544),[[n.Jo,i.knowledgeSearch]]),i.showKnowledgeList?((0,a.uX)(),(0,a.CE)("div",Xe,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(i.knowledgePoints,(e=>((0,a.uX)(),(0,a.CE)("div",{key:e.id,onClick:t=>s.selectKnowledge(e),class:"knowledge-item"},(0,f.v_)(e.title),9,Oe)))),128))])):(0,a.Q3)("",!0)],512)]),(0,a.Lk)("table",Ae,[t[14]||(t[14]=(0,a.Lk)("thead",null,[(0,a.Lk)("tr",null,[(0,a.Lk)("th",null,"编号"),(0,a.Lk)("th",null,"标题"),(0,a.Lk)("th",null,"难度"),(0,a.Lk)("th",null,"知识点"),(0,a.Lk)("th",null,"状态")])],-1)),(0,a.Lk)("tbody",null,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(i.problems,(e=>((0,a.uX)(),(0,a.CE)("tr",{key:e.id,onClick:t=>s.goToProblem(e.id)},[(0,a.Lk)("td",null,(0,f.v_)(e.id),1),(0,a.Lk)("td",null,(0,f.v_)(e.title),1),(0,a.Lk)("td",null,(0,f.v_)(s.getDifficultyText(e.difficulty)),1),(0,a.Lk)("td",null,[e.knowledge&&e.knowledge.length>0?((0,a.uX)(!0),(0,a.CE)(a.FK,{key:0},(0,a.pI)(e.knowledge,(e=>((0,a.uX)(),(0,a.CE)("span",{key:e.id,class:"knowledge-tag"},(0,f.v_)(e.title),1)))),128)):((0,a.uX)(),(0,a.CE)("span",Me,"无"))]),(0,a.Lk)("td",null,[(0,a.Lk)("span",{class:(0,f.C4)(["status-tag",{solved:1===e.status,unsolved:0===e.status}])},(0,f.v_)(s.getStatusText(e.status)),3)])],8,xe)))),128))])]),(0,a.Lk)("div",Je,[(0,a.Lk)("button",{disabled:1===i.page,onClick:t[7]||(t[7]=e=>s.changePage(i.page-1))},"上一页",8,Ne),(0,a.Lk)("span",null,"第 "+(0,f.v_)(i.page)+" 页 / 共 "+(0,f.v_)(i.totalPages)+" 页",1),(0,a.Lk)("button",{disabled:i.page===i.totalPages,onClick:t[8]||(t[8]=e=>s.changePage(i.page+1))},"下一页",8,Ie),(0,a.Lk)("div",Ue,[t[15]||(t[15]=(0,a.eW)(" 快速跳转至 ")),(0,a.bo)((0,a.Lk)("input",{"onUpdate:modelValue":t[9]||(t[9]=e=>i.jumpPage=e),type:"number",min:"1",max:i.totalPages,onKeyup:t[10]||(t[10]=(0,n.jR)(((...e)=>s.handleJump&&s.handleJump(...e)),["enter"]))},null,40,Be),[[n.Jo,i.jumpPage]]),t[16]||(t[16]=(0,a.eW)(" 页 ")),(0,a.Lk)("button",{onClick:t[11]||(t[11]=(...e)=>s.handleJump&&s.handleJump(...e))},"跳转")])])])}var Ve={data(){return{problems:[],page:1,totalPages:1,title:"",content:"",difficulty:"",statusFilter:"",knowledgeSearch:"",knowledgePoints:[],showKnowledgeList:!1,selectedKnowledge:null,token:h.A.get("token")||"",jumpPage:""}},methods:{async fetchProblems(){try{const e=await fetch("https://api.oj.东北大学.com/my_problem_list",{method:"POST",headers:{Authorization:this.token,"Content-Type":"application/json"},body:JSON.stringify({page:this.page,title:this.title||void 0,content:this.content||void 0,difficulty:this.difficulty?Number(this.difficulty):void 0,status_filter:this.statusFilter?Number(this.statusFilter):void 0,knowledge_id:this.selectedKnowledge?.id})}),t=await e.json();this.problems=t.problems,this.totalPages=t.pages}catch(e){console.error("Error:",e)}},goToProblem(e){this.$router.push(`/problem/${e}`)},changePage(e){this.page=e,this.fetchProblems()},getDifficultyText(e){const t={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",10:"10"};return t[e]||"未知"},getStatusText(e){return 1===e?"已会":"不会"},async fetchKnowledgePoints(){try{const e=await fetch("https://api.oj.东北大学.com/knowledge",{method:"POST",headers:{Authorization:this.token,"Content-Type":"application/json"},body:JSON.stringify({search:this.knowledgeSearch})}),t=await e.json();this.knowledgePoints=t,this.showKnowledgeList=!0}catch(e){console.error("Error:",e)}},selectKnowledge(e){this.selectedKnowledge=e,this.knowledgeSearch=e.title,this.showKnowledgeList=!1,this.page=1,this.fetchProblems()},handleClickOutside(e){const t=this.$refs.knowledgeSearch;t&&!t.contains(e.target)&&(this.showKnowledgeList=!1,this.selectedKnowledge||(this.knowledgeSearch=""))},handleJump(){const e=parseInt(this.jumpPage);e&&e>=1&&e<=this.totalPages?this.changePage(e):alert("请输入有效的页码!"),this.jumpPage=""}},watch:{title(){this.page=1,this.fetchProblems()},difficulty(){this.page=1,this.fetchProblems()},statusFilter(){this.page=1,this.fetchProblems()},content(){this.page=1,this.fetchProblems()},knowledgeSearch(e){e||(this.selectedKnowledge=null,this.page=1,this.fetchProblems())}},mounted(){document.title="我标记的题目 - OJ题库 - NEU小站",this.fetchProblems(),document.addEventListener("click",this.handleClickOutside)},unmounted(){document.removeEventListener("click",this.handleClickOutside)}};const qe=(0,p.A)(Ve,[["render",De],["__scopeId","data-v-3fac1adc"]]);var We=qe;const ze={class:"bookmark-page"},He={key:0,class:"loading"},Qe={key:1,class:"empty-state"},Re={key:2,class:"timeline"},Ye={class:"month-header"},Ge={class:"day-header"},Ze={class:"bookmark-grid"},et={class:"card-content"},tt={class:"problem-title"},ot={style:{color:"#FF9800"}},nt={class:"bookmark-title"},at={class:"bookmark-time"},lt={class:"card-actions"},it=["onClick"],st=["onClick"];function rt(e,t,o,n,l,i){const s=(0,a.g2)("router-link");return(0,a.uX)(),(0,a.CE)("div",ze,[t[5]||(t[5]=(0,a.Lk)("h1",null,"我的书签",-1)),l.loading?((0,a.uX)(),(0,a.CE)("div",He," 加载中... ")):0===i.bookmarksByMonth.length?((0,a.uX)(),(0,a.CE)("div",Qe,[t[1]||(t[1]=(0,a.Lk)("div",{class:"empty-icon"},"📚",-1)),t[2]||(t[2]=(0,a.Lk)("p",null,"您还没有添加任何书签",-1)),(0,a.bF)(s,{to:"/problems",class:"empty-action"},{default:(0,a.k6)((()=>t[0]||(t[0]=[(0,a.eW)(" 去浏览题目 ")]))),_:1})])):((0,a.uX)(),(0,a.CE)("div",Re,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(i.bookmarksByMonth,((e,o)=>((0,a.uX)(),(0,a.CE)("div",{key:o,class:"month-section"},[(0,a.Lk)("div",Ye,[t[3]||(t[3]=(0,a.Lk)("div",{class:"month-dot"},null,-1)),(0,a.Lk)("h2",null,(0,f.v_)(e.label),1)]),((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(e.days,((e,o)=>((0,a.uX)(),(0,a.CE)("div",{key:o,class:"day-section"},[(0,a.Lk)("div",Ge,[t[4]||(t[4]=(0,a.Lk)("div",{class:"day-dot"},null,-1)),(0,a.Lk)("h3",null,(0,f.v_)(e.label),1)]),(0,a.Lk)("div",Ze,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(e.bookmarks,(e=>((0,a.uX)(),(0,a.CE)("div",{key:e.id,class:"bookmark-card"},[(0,a.Lk)("div",et,[(0,a.Lk)("h4",tt,[(0,a.Lk)("span",ot,(0,f.v_)(e.problem_id)+".",1),(0,a.eW)(" "+(0,f.v_)(e.problem_title),1)]),(0,a.Lk)("p",nt,(0,f.v_)(e.title||"未命名书签"),1),(0,a.Lk)("div",at,"添加于 "+(0,f.v_)(i.formatTime(e.created_at)),1)]),(0,a.Lk)("div",lt,[(0,a.Lk)("button",{onClick:t=>i.goToProblem(e.problem_id),class:"action-btn view-btn"}," 进入本题 ",8,it),(0,a.Lk)("button",{onClick:t=>i.deleteBookmark(e.id),class:"action-btn delete-btn"}," 删除书签 ",8,st)])])))),128))])])))),128))])))),128))]))])}o(8111),o(7588);var ct={data(){return{bookmarks:[],loading:!0,token:h.A.get("token")||""}},computed:{bookmarksByMonth(){if(!this.bookmarks.length)return[];const e=[],t=new Map;return this.bookmarks.forEach((o=>{const n=new Date(o.created_at),a=`${n.getFullYear()}-${n.getMonth()+1}`,l=`${n.getFullYear()}-${n.getMonth()+1}-${n.getDate()}`;if(!t.has(a)){const o={key:a,label:`${n.getFullYear()}年${n.getMonth()+1}月`,days:[],dayMap:new Map};t.set(a,o),e.push(o)}const i=t.get(a);if(!i.dayMap.has(l)){const e={key:l,label:`${n.getMonth()+1}月${n.getDate()}日`,bookmarks:[]};i.dayMap.set(l,e),i.days.push(e)}i.dayMap.get(l).bookmarks.push(o)})),e.sort(((e,t)=>{const o=new Date(e.key+"-1"),n=new Date(t.key+"-1");return n-o})),e.forEach((e=>{e.days.sort(((e,t)=>{const o=new Date(e.key),n=new Date(t.key);return n-o}))})),e}},methods:{async fetchBookmarks(){this.loading=!0;try{const e=await fetch("https://api.oj.东北大学.com/bookmark/get",{headers:{Authorization:this.token}});if(!e.ok)throw new Error("获取书签失败");const t=await e.json();this.bookmarks=t.bookmarks}catch(e){console.error("Error fetching bookmarks:",e)}finally{this.loading=!1}},formatTime(e){const t=new Date(e),o=t.getHours().toString().padStart(2,"0"),n=t.getMinutes().toString().padStart(2,"0");return`${o}:${n}`},goToProblem(e){this.$router.push(`/problem/${e}`)},async deleteBookmark(e){if(confirm("确定要删除这个书签吗?"))try{const t=await fetch("https://api.oj.东北大学.com/bookmark/delete_mark",{method:"POST",headers:{Authorization:this.token,"Content-Type":"application/json"},body:JSON.stringify({mark_id:e})});if(!t.ok)throw new Error("删除书签失败");await this.fetchBookmarks()}catch(t){console.error("Error deleting bookmark:",t),alert("删除书签失败,请稍后重试")}}},mounted(){document.title="我的书签 - OJ题库 - NEU小站",this.fetchBookmarks()}};const dt=(0,p.A)(ct,[["render",rt],["__scopeId","data-v-344362de"]]);var ut=dt;const ht=[{path:"/",redirect:"/problems"},{path:"/problems",name:"ProblemList",component:A},{path:"/problem/:id",name:"ProblemDetail",component:$e,meta:{title:"题目详情"}},{path:"/my",name:"MyProblemList",component:We},{path:"/bookmarks",name:"BookmarkList",component:ut,meta:{title:"我的书签"}},{path:"/about",name:"About",component:()=>o.e(712).then(o.bind(o,9712)),meta:{title:"关于"}},{path:"/:pathMatch(.*)*",redirect:"/problems"}],kt=(0,b.aE)({history:(0,b.LA)(),routes:ht});var pt=kt,mt=o(782),gt=(0,mt.y$)({state:{},getters:{},mutations:{},actions:{},modules:{}});(0,n.Ef)(g).use(gt).use(pt).mount("#app")}},t={};function o(n){var a=t[n];if(void 0!==a)return a.exports;var l=t[n]={id:n,loaded:!1,exports:{}};return e[n].call(l.exports,l,l.exports,o),l.loaded=!0,l.exports}o.m=e,function(){var e=[];o.O=function(t,n,a,l){if(!n){var i=1/0;for(d=0;d=l)&&Object.keys(o.O).every((function(e){return o.O[e](n[r])}))?n.splice(r--,1):(s=!1,l0&&e[d-1][2]>l;d--)e[d]=e[d-1];e[d]=[n,a,l]}}(),function(){o.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return o.d(t,{a:t}),t}}(),function(){o.d=function(e,t){for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}}(),function(){o.f={},o.e=function(e){return Promise.all(Object.keys(o.f).reduce((function(t,n){return o.f[n](e,t),t}),[]))}}(),function(){o.u=function(e){return"js/"+e+".807a0a53.js"}}(),function(){o.miniCssF=function(e){return"css/"+e+".13c2d822.css"}}(),function(){o.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}}(),function(){var e={},t="front:";o.l=function(n,a,l,i){if(e[n])e[n].push(a);else{var s,r;if(void 0!==l)for(var c=document.getElementsByTagName("script"),d=0;d