From 0ea8e2f9c0f31fe40c05c5dc3deb24bfcadb443e Mon Sep 17 00:00:00 2001
From: ember <1279347317@qq.com>
Date: Mon, 5 Jan 2026 11:55:41 +0800
Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AF=B9wordhelper=E7=99=BB?=
=?UTF-8?q?=E5=BD=95=E7=9A=84=E6=94=AF=E6=8C=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
dist/css/{668.62d677ed.css => 150.6bb33b0a.css} | 2 +-
dist/index.html | 2 +-
dist/js/{668.980b0479.js => 150.b39c3e77.js} | 4 ++--
dist/js/{app.5df77a6c.js => app.5d973a4f.js} | 4 ++--
src/views/UserCenter.vue | 6 ++++++
5 files changed, 12 insertions(+), 6 deletions(-)
rename dist/css/{668.62d677ed.css => 150.6bb33b0a.css} (92%)
rename dist/js/{668.980b0479.js => 150.b39c3e77.js} (90%)
rename dist/js/{app.5df77a6c.js => app.5d973a4f.js} (98%)
diff --git a/dist/css/668.62d677ed.css b/dist/css/150.6bb33b0a.css
similarity index 92%
rename from dist/css/668.62d677ed.css
rename to dist/css/150.6bb33b0a.css
index 8ec1df3..4cf8e8a 100644
--- a/dist/css/668.62d677ed.css
+++ b/dist/css/150.6bb33b0a.css
@@ -1 +1 @@
-.user-info-card[data-v-4ea2fd79]{width:100%}.card-container[data-v-4ea2fd79]{background-color:#fff;border-radius:12px;box-shadow:0 4px 20px rgba(0,0,0,.08);overflow:hidden;position:relative;transition:all .3s ease}.detail-header[data-v-4ea2fd79]{position:relative;padding:20px 20px 4px;display:flex;align-items:flex-start}.header-bg[data-v-4ea2fd79]{position:absolute;top:0;left:0;right:0;height:70px;background:linear-gradient(135deg,#3182ce,#63b3ed);opacity:.2}.avatar-wrapper[data-v-4ea2fd79]{position:relative;margin-right:16px}.detail-avatar[data-v-4ea2fd79]{width:80px;height:80px;border-radius:50%;-o-object-fit:cover;object-fit:cover;border:4px solid #fff;box-shadow:0 2px 10px rgba(0,0,0,.1);position:relative;z-index:1;background-color:#fff}.avatar-edit-overlay[data-v-4ea2fd79]{position:absolute;bottom:0;right:0;background:rgba(49,130,206,.8);width:28px;height:28px;border-radius:50%;display:flex;justify-content:center;align-items:center;cursor:pointer;z-index:2;transition:all .2s ease;border:2px solid #fff}.avatar-edit-overlay[data-v-4ea2fd79]:hover{background:#3182ce;transform:scale(1.1)}.detail-right[data-v-4ea2fd79]{flex:1;position:relative;padding-top:8px}.detail-name-container[data-v-4ea2fd79]{display:flex;align-items:center;gap:8px}.detail-name[data-v-4ea2fd79]{font-weight:600;font-size:20px;color:#2d3748;margin-bottom:4px}.vip-badge[data-v-4ea2fd79]{height:25px;vertical-align:middle;margin-bottom:4px}.edit-btn[data-v-4ea2fd79]{background:none;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;transition:all .2s ease}.edit-btn[data-v-4ea2fd79]:hover{background-color:#edf2f7}.edit-icon[data-v-4ea2fd79]{font-style:normal;font-size:14px}.user-badges[data-v-4ea2fd79]{display:flex;gap:6px;margin-top:16px}.badge[data-v-4ea2fd79]{display:inline-block;padding:2px 8px;border-radius:4px;font-size:12px;color:#fff;font-weight:500}.verified[data-v-4ea2fd79]{background-color:#3182ce}.invited[data-v-4ea2fd79]{background-color:#f56565}.medal[data-v-4ea2fd79]{background-color:#ecc94b;color:#744210}.campus-email[data-v-4ea2fd79]{background-color:#51aae0;color:#fff}.user-sign-container[data-v-4ea2fd79]{margin:16px 20px}.user-sign[data-v-4ea2fd79]{display:flex;align-items:flex-start;gap:10px;padding:12px 16px;background-color:#f7fafc;border-radius:8px;position:relative}.sign-icon[data-v-4ea2fd79]{font-size:16px;color:#718096;margin-top:2px}.sign-text[data-v-4ea2fd79]{flex:1;font-size:14px;color:#4a5568;line-height:1.6;word-break:break-word;margin-top:3px}.user-email[data-v-4ea2fd79]{display:flex;align-items:center;gap:10px;padding:8px 20px;margin:8px 20px;background-color:#f7fafc;border-radius:8px}.email-icon[data-v-4ea2fd79]{font-size:16px;color:#718096}.email-text[data-v-4ea2fd79]{font-size:14px;color:#4a5568}.user-stats[data-v-4ea2fd79]{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;background-color:#f7fafc;margin:16px 20px;border-radius:8px}.stat-item[data-v-4ea2fd79]{text-align:center;flex:1}.stat-separator[data-v-4ea2fd79]{width:1px;height:28px;background-color:#e2e8f0}.stat-value[data-v-4ea2fd79]{font-weight:600;font-size:18px;color:#2d3748}.stat-label[data-v-4ea2fd79]{font-size:13px;color:#718096;margin-top:4px}@media (max-width:640px){.detail-header[data-v-4ea2fd79]{flex-direction:column;align-items:center;text-align:center;padding:20px 16px 4px}.avatar-wrapper[data-v-4ea2fd79]{margin-right:0;margin-bottom:16px}.detail-name-container[data-v-4ea2fd79]{justify-content:center}.user-badges[data-v-4ea2fd79]{justify-content:center;margin-top:4px}}.clickable[data-v-4ea2fd79]{cursor:pointer;transition:background-color .2s}.clickable[data-v-4ea2fd79]:hover{background-color:#edf2f7}.modal-overlay[data-v-4ea2fd79]{position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.5);display:flex;justify-content:center;align-items:center;z-index:1000}.modal-content[data-v-4ea2fd79]{background-color:#fff;border-radius:12px;width:90%;max-width:500px;max-height:80vh;display:flex;flex-direction:column;box-shadow:0 10px 25px rgba(0,0,0,.2)}.modal-header[data-v-4ea2fd79]{padding:16px 20px;border-bottom:1px solid #e2e8f0;display:flex;justify-content:space-between;align-items:center}.modal-header h3[data-v-4ea2fd79]{margin:0;font-size:18px;color:#2d3748}.close-modal-btn[data-v-4ea2fd79]{background:none;border:none;font-size:24px;color:#a0aec0;cursor:pointer;line-height:1}.modal-body[data-v-4ea2fd79]{flex:1;overflow-y:auto;padding:0}.empty-state[data-v-4ea2fd79],.loading-state[data-v-4ea2fd79]{padding:40px;text-align:center;color:#718096}.user-list-item[data-v-4ea2fd79]{padding:12px 20px;border-bottom:1px solid #f7fafc;display:flex;justify-content:space-between;align-items:center;gap:12px}.user-list-item[data-v-4ea2fd79]:last-child{border-bottom:none}.user-meta-wrapper[data-v-4ea2fd79]{flex:1;min-width:0}.user-meta-wrapper[data-v-4ea2fd79] .user-card{box-shadow:none;margin:0;border:none;background:transparent}.list-action-btn[data-v-4ea2fd79]{padding:6px 12px;border-radius:4px;font-size:12px;font-weight:500;cursor:pointer;white-space:nowrap;transition:all .2s;border:1px solid transparent}.btn-follow[data-v-4ea2fd79]{background-color:#3182ce;color:#fff}.btn-follow[data-v-4ea2fd79]:hover{background-color:#2c5282}.btn-cancel[data-v-4ea2fd79]{background-color:#fff;border-color:#cbd5e0;color:#718096}.btn-cancel[data-v-4ea2fd79]:hover{background-color:#f7fafc;border-color:#a0aec0}.modal-footer[data-v-4ea2fd79]{padding:12px 20px;border-top:1px solid #e2e8f0;display:flex;justify-content:center;align-items:center;gap:16px}.page-btn[data-v-4ea2fd79]{padding:4px 12px;border:1px solid #e2e8f0;background-color:#fff;border-radius:4px;cursor:pointer}.page-btn[data-v-4ea2fd79]:disabled{opacity:.5;cursor:not-allowed}.coin-container[data-v-0bd9ed96]{padding:24px;background-color:#fff;border-radius:12px;box-shadow:0 4px 16px rgba(0,0,0,.08)}.not-activated[data-v-0bd9ed96]{text-align:center}.alert-info[data-v-0bd9ed96]{background-color:#f0f7ff;border-left:4px solid #1890ff;padding:20px;border-radius:8px;margin-bottom:20px}.alert-info p[data-v-0bd9ed96]{color:#2c3e50;font-size:16px;margin-bottom:16px}.coin-info[data-v-0bd9ed96]{margin-bottom:24px;padding:20px;background:linear-gradient(135deg,#f6f8ff,#f0f7ff);border-radius:10px;border:1px solid #e6f0ff}.coin-info h3[data-v-0bd9ed96]{color:#2c3e50;font-size:18px;margin:0}.coin-amount[data-v-0bd9ed96]{font-weight:600;color:#ff9500;font-size:24px;margin:0 4px}.transactions h4[data-v-0bd9ed96]{color:#2c3e50;font-size:18px;margin-bottom:16px;font-weight:500}.transaction-table[data-v-0bd9ed96]{width:100%;border-collapse:separate;border-spacing:0;margin-bottom:24px;border-radius:8px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,.04)}.transaction-table td[data-v-0bd9ed96],.transaction-table th[data-v-0bd9ed96]{padding:16px;text-align:left;border-bottom:1px solid #edf2f7}.transaction-table th[data-v-0bd9ed96]{background-color:#f8fafc;font-weight:600;color:#4a5568;font-size:14px;text-transform:uppercase;letter-spacing:.5px}.transaction-table tr[data-v-0bd9ed96]:hover{background-color:#f8fafc;transition:background-color .2s ease}.transaction-table tr:last-child td[data-v-0bd9ed96]{border-bottom:none}.credit[data-v-0bd9ed96]{color:#e53e3e;font-weight:500}.debit[data-v-0bd9ed96]{color:#38a169;font-weight:500}.pagination[data-v-0bd9ed96]{display:flex;justify-content:center;align-items:center;margin-top:24px;gap:12px}.page-info[data-v-0bd9ed96]{margin:0 16px;color:#4a5568;font-size:14px;font-weight:500}.no-records[data-v-0bd9ed96]{text-align:center;padding:32px;color:#718096;background-color:#f8fafc;border-radius:8px;font-size:15px}.modal[data-v-0bd9ed96]{display:flex;position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.4);z-index:1000;justify-content:center;align-items:center;backdrop-filter:blur(4px)}.modal-content[data-v-0bd9ed96]{background-color:#fff;border-radius:12px;width:90%;max-width:480px;box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04);transform:translateY(0);transition:transform .3s ease}.modal-header[data-v-0bd9ed96]{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-bottom:1px solid #edf2f7}.modal-header h3[data-v-0bd9ed96]{color:#2d3748;font-size:18px;font-weight:600;margin:0}.close[data-v-0bd9ed96]{font-size:24px;cursor:pointer;color:#a0aec0;transition:color .2s ease}.close[data-v-0bd9ed96]:hover{color:#4a5568}.modal-body[data-v-0bd9ed96]{padding:24px}.form-group[data-v-0bd9ed96]{margin-bottom:20px}.form-group label[data-v-0bd9ed96]{display:block;margin-bottom:8px;color:#4a5568;font-size:14px;font-weight:500}.input-group[data-v-0bd9ed96]{display:flex;gap:12px}.input-group input[data-v-0bd9ed96]{flex:1}.modal-message[data-v-0bd9ed96]{margin:16px 0;padding:12px 16px;background-color:#f8fafc;border-left:4px solid #3182ce;color:#2d3748;font-size:14px;border-radius:4px}.verify-btn[data-v-0bd9ed96]{width:100%;margin-top:20px}.btn[data-v-0bd9ed96]{display:inline-flex;align-items:center;justify-content:center;padding:8px 16px;font-size:14px;font-weight:500;line-height:1.5;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;border:1px solid transparent;border-radius:6px;transition:all .2s ease}.btn[data-v-0bd9ed96]:hover{transform:translateY(-1px);box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.btn[data-v-0bd9ed96]:active{transform:translateY(0);box-shadow:none}.btn-primary[data-v-0bd9ed96]{color:#fff;background-color:#3182ce;border-color:#3182ce}.btn-primary[data-v-0bd9ed96]:hover{background-color:#2c5282;border-color:#2c5282}.btn-success[data-v-0bd9ed96]{color:#fff;background-color:#38a169;border-color:#38a169}.btn-success[data-v-0bd9ed96]:hover{background-color:#2f855a;border-color:#2f855a}.btn-outline-primary[data-v-0bd9ed96]{color:#3182ce;background-color:transparent;border-color:#3182ce}.btn-outline-primary[data-v-0bd9ed96]:hover{color:#fff;background-color:#3182ce}.btn-sm[data-v-0bd9ed96]{padding:6px 12px;font-size:13px;border-radius:4px}.btn[data-v-0bd9ed96]:disabled{opacity:.65;cursor:not-allowed;transform:none;box-shadow:none}.form-control[data-v-0bd9ed96]{display:block;width:100%;padding:8px 12px;font-size:14px;line-height:1.5;color:#2d3748;background-color:#fff;border:1px solid #e2e8f0;border-radius:6px;transition:all .2s ease}.form-control[data-v-0bd9ed96]:focus{border-color:#4299e1;box-shadow:0 0 0 3px rgba(66,153,225,.15);outline:none}.form-control[data-v-0bd9ed96]::-moz-placeholder{color:#a0aec0}.form-control[data-v-0bd9ed96]::placeholder{color:#a0aec0}@media (max-width:640px){.coin-container[data-v-0bd9ed96]{padding:16px}.transaction-table td[data-v-0bd9ed96],.transaction-table th[data-v-0bd9ed96]{padding:12px;font-size:13px}.modal-content[data-v-0bd9ed96]{width:95%;margin:16px}}.policy-notification[data-v-0bd9ed96]{background-color:#fffbeb;border-left:4px solid #f59e0b;color:#92400e;padding:16px;border-radius:8px;margin-bottom:24px;font-size:15px;text-align:left}.submission-container[data-v-68797b30]{background-color:#fff;border-radius:12px;box-shadow:0 4px 16px rgba(0,0,0,.08);padding:20px;margin-bottom:24px}.header[data-v-68797b30]{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;padding-bottom:16px;border-bottom:1px solid #e2e8f0}.title[data-v-68797b30]{font-size:18px;font-weight:600;color:#2d3748;margin:0}.header-buttons[data-v-68797b30]{display:flex;gap:12px}.key-manage-btn[data-v-68797b30]{background-color:#6b7280;color:#fff;border:none;border-radius:6px;padding:8px 16px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease}.key-manage-btn[data-v-68797b30]:hover{background-color:#4b5563;transform:translateY(-1px);box-shadow:0 4px 6px -1px rgba(0,0,0,.1)}.manage-btn[data-v-68797b30]{background-color:#3182ce;color:#fff;border:none;border-radius:6px;padding:8px 16px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease}.manage-btn[data-v-68797b30]:hover{background-color:#2c5282;transform:translateY(-1px);box-shadow:0 4px 6px -1px rgba(0,0,0,.1)}.submission-table-wrapper[data-v-68797b30]{overflow-x:auto}.submission-table[data-v-68797b30]{width:100%;border-collapse:separate;border-spacing:0;white-space:nowrap}.submission-table td[data-v-68797b30],.submission-table th[data-v-68797b30]{padding:12px 16px;text-align:left;border-bottom:1px solid #e2e8f0;font-size:14px}.submission-table th[data-v-68797b30]{background-color:#f7fafc;color:#4a5568;font-weight:600;position:sticky;top:0}.submission-table tr:last-child td[data-v-68797b30]{border-bottom:none}.submission-table tbody tr[data-v-68797b30]{transition:background-color .2s ease}.submission-table tbody tr[data-v-68797b30]:hover{background-color:#f7fafc}.clickable[data-v-68797b30]{cursor:pointer;position:relative}.clickable[data-v-68797b30]:hover{background-color:#ebf8ff!important}.clickable[data-v-68797b30]:after{content:"";position:absolute;left:0;top:0;width:3px;height:100%;background-color:#3182ce}.title-cell[data-v-68797b30]{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.empty-state[data-v-68797b30]{padding:40px 20px;text-align:center;color:#718096;font-size:15px;background-color:#f7fafc;border-radius:8px}.pagination[data-v-68797b30]{display:flex;justify-content:center;align-items:center;margin-top:20px;gap:12px}.page-btn[data-v-68797b30]{background-color:#fff;border:1px solid #e2e8f0;color:#4a5568;padding:6px 12px;border-radius:6px;font-size:14px;cursor:pointer;transition:all .2s ease}.page-btn[data-v-68797b30]:hover:not(:disabled){background-color:#f7fafc;border-color:#cbd5e0}.page-btn[data-v-68797b30]:disabled{opacity:.5;cursor:not-allowed}.page-info[data-v-68797b30]{color:#4a5568;font-size:14px;font-weight:500}.status-approved[data-v-68797b30]{color:#38a169;background-color:#f0fff4;padding:4px 8px;border-radius:4px;font-weight:500;font-size:13px}.status-pending[data-v-68797b30]{color:#d69e2e;background-color:#fffaf0;padding:4px 8px;border-radius:4px;font-weight:500;font-size:13px}.status-rejected[data-v-68797b30]{color:#e53e3e;background-color:#fff5f5;padding:4px 8px;border-radius:4px;font-weight:500;font-size:13px}.edit-btn[data-v-68797b30]{background-color:#4299e1;color:#fff;border:none;border-radius:4px;padding:4px 8px;font-size:13px;cursor:pointer;transition:all .2s ease}.edit-btn[data-v-68797b30]:hover{background-color:#3182ce;transform:translateY(-1px);box-shadow:0 2px 4px rgba(0,0,0,.1)}.action-buttons[data-v-68797b30]{display:flex;gap:8px;flex-wrap:wrap}.private-btn[data-v-68797b30]{background-color:#f56565;color:#fff;border:none;border-radius:4px;padding:4px 8px;font-size:13px;cursor:pointer;transition:all .2s ease}.private-btn[data-v-68797b30]:hover{background-color:#e53e3e;transform:translateY(-1px);box-shadow:0 2px 4px rgba(0,0,0,.1)}.public-btn[data-v-68797b30]{background-color:#48bb78;color:#fff;border:none;border-radius:4px;padding:4px 8px;font-size:13px;cursor:pointer;transition:all .2s ease}.public-btn[data-v-68797b30]:hover{background-color:#38a169;transform:translateY(-1px);box-shadow:0 2px 4px rgba(0,0,0,.1)}.status-public[data-v-68797b30]{color:#38a169;background-color:#f0fff4;padding:4px 8px;border-radius:4px;font-weight:500;font-size:13px}.status-private[data-v-68797b30]{color:#e53e3e;background-color:#fff5f5;padding:4px 8px;border-radius:4px;font-weight:500;font-size:13px}.status-unknown[data-v-68797b30]{color:#a0aec0;font-size:13px}.modal-overlay[data-v-68797b30]{position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.5);display:flex;justify-content:center;align-items:center;z-index:1000}.modal-content[data-v-68797b30]{background-color:#fff;border-radius:12px;box-shadow:0 10px 25px -5px rgba(0,0,0,.15);width:90%;max-width:600px;max-height:80vh;overflow:hidden;display:flex;flex-direction:column}.modal-header[data-v-68797b30]{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #e2e8f0}.modal-header h3[data-v-68797b30]{margin:0;font-size:18px;font-weight:600;color:#2d3748}.close-btn[data-v-68797b30]{background:none;border:none;font-size:24px;color:#718096;cursor:pointer;transition:color .2s ease}.close-btn[data-v-68797b30]:hover{color:#4a5568}.modal-body[data-v-68797b30]{padding:20px;overflow-y:auto}.key-management-modal[data-v-68797b30]{min-height:300px}.exchange-key-btn[data-v-68797b30]{background-color:#3182ce;color:#fff;border:none;border-radius:6px;padding:8px 16px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease;margin-bottom:20px}.exchange-key-btn[data-v-68797b30]:hover{background-color:#2c5282;transform:translateY(-1px);box-shadow:0 4px 6px -1px rgba(0,0,0,.1)}.key-table-wrapper[data-v-68797b30]{overflow-x:auto;width:100%}.key-table[data-v-68797b30]{width:100%;min-width:500px;border-collapse:separate;border-spacing:0}.key-table td[data-v-68797b30],.key-table th[data-v-68797b30]{padding:12px 16px;text-align:left;border-bottom:1px solid #e2e8f0;font-size:14px}.key-table th[data-v-68797b30]{background-color:#f7fafc;color:#4a5568;font-weight:600;position:sticky;top:0}.key-content[data-v-68797b30]{display:flex;align-items:center;gap:10px}.toggle-visibility[data-v-68797b30]{background:none;border:none;cursor:pointer;color:#718096;padding:4px;display:flex;align-items:center;justify-content:center;transition:color .2s ease}.toggle-visibility[data-v-68797b30]:hover{color:#4a5568}.status-valid[data-v-68797b30]{color:#38a169;background-color:#f0fff4}.status-invalid[data-v-68797b30],.status-valid[data-v-68797b30]{padding:4px 8px;border-radius:4px;font-weight:500;font-size:13px}.status-invalid[data-v-68797b30]{color:#e53e3e;background-color:#fff5f5}.empty-keys[data-v-68797b30],.loading-keys[data-v-68797b30]{padding:40px 20px;text-align:center;color:#718096;font-size:15px;background-color:#f7fafc;border-radius:8px}.exchange-key-modal[data-v-68797b30]{max-width:450px}.form-group[data-v-68797b30]{margin-bottom:16px}.form-group label[data-v-68797b30]{display:block;margin-bottom:8px;font-weight:500;color:#4a5568;font-size:14px}.form-group input[data-v-68797b30]{width:100%;padding:10px 12px;border:1px solid #e2e8f0;border-radius:6px;font-size:14px;transition:border-color .2s ease}.form-group input[data-v-68797b30]:focus{outline:none;border-color:#3182ce;box-shadow:0 0 0 3px rgba(66,153,225,.15)}.form-actions[data-v-68797b30]{margin-top:24px;display:flex;justify-content:flex-end}.submit-btn[data-v-68797b30]{background-color:#3182ce;color:#fff;border:none;border-radius:6px;padding:10px 20px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease}.submit-btn[data-v-68797b30]:hover:not(:disabled){background-color:#2c5282;transform:translateY(-1px);box-shadow:0 4px 6px -1px rgba(0,0,0,.1)}.submit-btn[data-v-68797b30]:disabled{opacity:.5;cursor:not-allowed}@media (max-width:768px){.submission-container[data-v-68797b30]{padding:16px}.header[data-v-68797b30]{flex-direction:column;align-items:flex-start;gap:12px}.header-buttons[data-v-68797b30]{display:flex;width:100%;justify-content:space-between}.key-manage-btn[data-v-68797b30],.manage-btn[data-v-68797b30]{flex:1}.modal-content[data-v-68797b30]{width:95%;max-height:90vh}.key-table-wrapper[data-v-68797b30]{margin:0 -10px;padding:0 10px;width:calc(100% + 20px)}.key-table td[data-v-68797b30],.key-table th[data-v-68797b30]{padding:10px 12px;font-size:13px;white-space:nowrap}}.ranking-opt-in[data-v-68797b30]{margin-bottom:20px;display:flex;align-items:center;padding:0 4px}.checkbox-label[data-v-68797b30]{display:flex;align-items:center;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;font-size:15px;color:#4a5568}.checkbox-label input[data-v-68797b30]{margin-right:8px;width:18px;height:18px;cursor:pointer;accent-color:#3182ce}.checkbox-text[data-v-68797b30]{font-weight:500}.user-center[data-v-799c197d]{min-height:100vh;background-color:#f4f7fa;padding-top:60px}.container[data-v-799c197d]{max-width:1200px;margin:0 auto;padding:24px 16px;display:flex;flex-direction:column;gap:24px}.login-required-container[data-v-799c197d]{display:flex;justify-content:center;align-items:center;height:calc(100vh - 200px)}.login-required-message[data-v-799c197d]{background-color:#fff;padding:30px 50px;border-radius:10px;box-shadow:0 4px 15px rgba(0,0,0,.1);text-align:center}.login-required-message h2[data-v-799c197d]{font-size:24px;color:#333;margin-bottom:10px}.login-required-message p[data-v-799c197d]{font-size:16px;color:#666}.upper-section[data-v-799c197d]{display:flex;gap:24px;flex-wrap:wrap}.coin-container[data-v-799c197d],.user-info-container[data-v-799c197d]{flex:1;min-width:300px}@media (min-width:769px){.upper-section[data-v-799c197d]{align-items:stretch}.coin-container[data-v-799c197d],.user-info-container[data-v-799c197d]{display:flex;flex-direction:column;height:350px}.coin-container[data-v-799c197d]>:first-child{flex:1;overflow-y:auto;display:flex;flex-direction:column}.coin-container[data-v-799c197d] ::-webkit-scrollbar{width:6px}.coin-container[data-v-799c197d] ::-webkit-scrollbar-track{background:#f1f1f1;border-radius:10px}.coin-container[data-v-799c197d] ::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:10px}.coin-container[data-v-799c197d] ::-webkit-scrollbar-thumb:hover{background:#a8a8a8}}.lower-section[data-v-799c197d]{width:100%}@media (max-width:768px){.upper-section[data-v-799c197d]{flex-direction:column}.coin-container[data-v-799c197d],.user-info-container[data-v-799c197d]{width:100%;height:auto}.container[data-v-799c197d]{padding:16px 12px}}.loading-container[data-v-799c197d]{display:flex;justify-content:center;align-items:center;height:calc(100vh - 60px)}.loading-spinner[data-v-799c197d]{padding:20px;background-color:#fff;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,.1);font-size:16px;color:#3182ce}.user-center[data-v-799c197d]{transition:all .3s ease}@media (max-width:480px){.container[data-v-799c197d]{padding:12px 8px}}
\ No newline at end of file
+.user-info-card[data-v-4ea2fd79]{width:100%}.card-container[data-v-4ea2fd79]{background-color:#fff;border-radius:12px;box-shadow:0 4px 20px rgba(0,0,0,.08);overflow:hidden;position:relative;transition:all .3s ease}.detail-header[data-v-4ea2fd79]{position:relative;padding:20px 20px 4px;display:flex;align-items:flex-start}.header-bg[data-v-4ea2fd79]{position:absolute;top:0;left:0;right:0;height:70px;background:linear-gradient(135deg,#3182ce,#63b3ed);opacity:.2}.avatar-wrapper[data-v-4ea2fd79]{position:relative;margin-right:16px}.detail-avatar[data-v-4ea2fd79]{width:80px;height:80px;border-radius:50%;-o-object-fit:cover;object-fit:cover;border:4px solid #fff;box-shadow:0 2px 10px rgba(0,0,0,.1);position:relative;z-index:1;background-color:#fff}.avatar-edit-overlay[data-v-4ea2fd79]{position:absolute;bottom:0;right:0;background:rgba(49,130,206,.8);width:28px;height:28px;border-radius:50%;display:flex;justify-content:center;align-items:center;cursor:pointer;z-index:2;transition:all .2s ease;border:2px solid #fff}.avatar-edit-overlay[data-v-4ea2fd79]:hover{background:#3182ce;transform:scale(1.1)}.detail-right[data-v-4ea2fd79]{flex:1;position:relative;padding-top:8px}.detail-name-container[data-v-4ea2fd79]{display:flex;align-items:center;gap:8px}.detail-name[data-v-4ea2fd79]{font-weight:600;font-size:20px;color:#2d3748;margin-bottom:4px}.vip-badge[data-v-4ea2fd79]{height:25px;vertical-align:middle;margin-bottom:4px}.edit-btn[data-v-4ea2fd79]{background:none;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;transition:all .2s ease}.edit-btn[data-v-4ea2fd79]:hover{background-color:#edf2f7}.edit-icon[data-v-4ea2fd79]{font-style:normal;font-size:14px}.user-badges[data-v-4ea2fd79]{display:flex;gap:6px;margin-top:16px}.badge[data-v-4ea2fd79]{display:inline-block;padding:2px 8px;border-radius:4px;font-size:12px;color:#fff;font-weight:500}.verified[data-v-4ea2fd79]{background-color:#3182ce}.invited[data-v-4ea2fd79]{background-color:#f56565}.medal[data-v-4ea2fd79]{background-color:#ecc94b;color:#744210}.campus-email[data-v-4ea2fd79]{background-color:#51aae0;color:#fff}.user-sign-container[data-v-4ea2fd79]{margin:16px 20px}.user-sign[data-v-4ea2fd79]{display:flex;align-items:flex-start;gap:10px;padding:12px 16px;background-color:#f7fafc;border-radius:8px;position:relative}.sign-icon[data-v-4ea2fd79]{font-size:16px;color:#718096;margin-top:2px}.sign-text[data-v-4ea2fd79]{flex:1;font-size:14px;color:#4a5568;line-height:1.6;word-break:break-word;margin-top:3px}.user-email[data-v-4ea2fd79]{display:flex;align-items:center;gap:10px;padding:8px 20px;margin:8px 20px;background-color:#f7fafc;border-radius:8px}.email-icon[data-v-4ea2fd79]{font-size:16px;color:#718096}.email-text[data-v-4ea2fd79]{font-size:14px;color:#4a5568}.user-stats[data-v-4ea2fd79]{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;background-color:#f7fafc;margin:16px 20px;border-radius:8px}.stat-item[data-v-4ea2fd79]{text-align:center;flex:1}.stat-separator[data-v-4ea2fd79]{width:1px;height:28px;background-color:#e2e8f0}.stat-value[data-v-4ea2fd79]{font-weight:600;font-size:18px;color:#2d3748}.stat-label[data-v-4ea2fd79]{font-size:13px;color:#718096;margin-top:4px}@media (max-width:640px){.detail-header[data-v-4ea2fd79]{flex-direction:column;align-items:center;text-align:center;padding:20px 16px 4px}.avatar-wrapper[data-v-4ea2fd79]{margin-right:0;margin-bottom:16px}.detail-name-container[data-v-4ea2fd79]{justify-content:center}.user-badges[data-v-4ea2fd79]{justify-content:center;margin-top:4px}}.clickable[data-v-4ea2fd79]{cursor:pointer;transition:background-color .2s}.clickable[data-v-4ea2fd79]:hover{background-color:#edf2f7}.modal-overlay[data-v-4ea2fd79]{position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.5);display:flex;justify-content:center;align-items:center;z-index:1000}.modal-content[data-v-4ea2fd79]{background-color:#fff;border-radius:12px;width:90%;max-width:500px;max-height:80vh;display:flex;flex-direction:column;box-shadow:0 10px 25px rgba(0,0,0,.2)}.modal-header[data-v-4ea2fd79]{padding:16px 20px;border-bottom:1px solid #e2e8f0;display:flex;justify-content:space-between;align-items:center}.modal-header h3[data-v-4ea2fd79]{margin:0;font-size:18px;color:#2d3748}.close-modal-btn[data-v-4ea2fd79]{background:none;border:none;font-size:24px;color:#a0aec0;cursor:pointer;line-height:1}.modal-body[data-v-4ea2fd79]{flex:1;overflow-y:auto;padding:0}.empty-state[data-v-4ea2fd79],.loading-state[data-v-4ea2fd79]{padding:40px;text-align:center;color:#718096}.user-list-item[data-v-4ea2fd79]{padding:12px 20px;border-bottom:1px solid #f7fafc;display:flex;justify-content:space-between;align-items:center;gap:12px}.user-list-item[data-v-4ea2fd79]:last-child{border-bottom:none}.user-meta-wrapper[data-v-4ea2fd79]{flex:1;min-width:0}.user-meta-wrapper[data-v-4ea2fd79] .user-card{box-shadow:none;margin:0;border:none;background:transparent}.list-action-btn[data-v-4ea2fd79]{padding:6px 12px;border-radius:4px;font-size:12px;font-weight:500;cursor:pointer;white-space:nowrap;transition:all .2s;border:1px solid transparent}.btn-follow[data-v-4ea2fd79]{background-color:#3182ce;color:#fff}.btn-follow[data-v-4ea2fd79]:hover{background-color:#2c5282}.btn-cancel[data-v-4ea2fd79]{background-color:#fff;border-color:#cbd5e0;color:#718096}.btn-cancel[data-v-4ea2fd79]:hover{background-color:#f7fafc;border-color:#a0aec0}.modal-footer[data-v-4ea2fd79]{padding:12px 20px;border-top:1px solid #e2e8f0;display:flex;justify-content:center;align-items:center;gap:16px}.page-btn[data-v-4ea2fd79]{padding:4px 12px;border:1px solid #e2e8f0;background-color:#fff;border-radius:4px;cursor:pointer}.page-btn[data-v-4ea2fd79]:disabled{opacity:.5;cursor:not-allowed}.coin-container[data-v-0bd9ed96]{padding:24px;background-color:#fff;border-radius:12px;box-shadow:0 4px 16px rgba(0,0,0,.08)}.not-activated[data-v-0bd9ed96]{text-align:center}.alert-info[data-v-0bd9ed96]{background-color:#f0f7ff;border-left:4px solid #1890ff;padding:20px;border-radius:8px;margin-bottom:20px}.alert-info p[data-v-0bd9ed96]{color:#2c3e50;font-size:16px;margin-bottom:16px}.coin-info[data-v-0bd9ed96]{margin-bottom:24px;padding:20px;background:linear-gradient(135deg,#f6f8ff,#f0f7ff);border-radius:10px;border:1px solid #e6f0ff}.coin-info h3[data-v-0bd9ed96]{color:#2c3e50;font-size:18px;margin:0}.coin-amount[data-v-0bd9ed96]{font-weight:600;color:#ff9500;font-size:24px;margin:0 4px}.transactions h4[data-v-0bd9ed96]{color:#2c3e50;font-size:18px;margin-bottom:16px;font-weight:500}.transaction-table[data-v-0bd9ed96]{width:100%;border-collapse:separate;border-spacing:0;margin-bottom:24px;border-radius:8px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,.04)}.transaction-table td[data-v-0bd9ed96],.transaction-table th[data-v-0bd9ed96]{padding:16px;text-align:left;border-bottom:1px solid #edf2f7}.transaction-table th[data-v-0bd9ed96]{background-color:#f8fafc;font-weight:600;color:#4a5568;font-size:14px;text-transform:uppercase;letter-spacing:.5px}.transaction-table tr[data-v-0bd9ed96]:hover{background-color:#f8fafc;transition:background-color .2s ease}.transaction-table tr:last-child td[data-v-0bd9ed96]{border-bottom:none}.credit[data-v-0bd9ed96]{color:#e53e3e;font-weight:500}.debit[data-v-0bd9ed96]{color:#38a169;font-weight:500}.pagination[data-v-0bd9ed96]{display:flex;justify-content:center;align-items:center;margin-top:24px;gap:12px}.page-info[data-v-0bd9ed96]{margin:0 16px;color:#4a5568;font-size:14px;font-weight:500}.no-records[data-v-0bd9ed96]{text-align:center;padding:32px;color:#718096;background-color:#f8fafc;border-radius:8px;font-size:15px}.modal[data-v-0bd9ed96]{display:flex;position:fixed;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.4);z-index:1000;justify-content:center;align-items:center;backdrop-filter:blur(4px)}.modal-content[data-v-0bd9ed96]{background-color:#fff;border-radius:12px;width:90%;max-width:480px;box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04);transform:translateY(0);transition:transform .3s ease}.modal-header[data-v-0bd9ed96]{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-bottom:1px solid #edf2f7}.modal-header h3[data-v-0bd9ed96]{color:#2d3748;font-size:18px;font-weight:600;margin:0}.close[data-v-0bd9ed96]{font-size:24px;cursor:pointer;color:#a0aec0;transition:color .2s ease}.close[data-v-0bd9ed96]:hover{color:#4a5568}.modal-body[data-v-0bd9ed96]{padding:24px}.form-group[data-v-0bd9ed96]{margin-bottom:20px}.form-group label[data-v-0bd9ed96]{display:block;margin-bottom:8px;color:#4a5568;font-size:14px;font-weight:500}.input-group[data-v-0bd9ed96]{display:flex;gap:12px}.input-group input[data-v-0bd9ed96]{flex:1}.modal-message[data-v-0bd9ed96]{margin:16px 0;padding:12px 16px;background-color:#f8fafc;border-left:4px solid #3182ce;color:#2d3748;font-size:14px;border-radius:4px}.verify-btn[data-v-0bd9ed96]{width:100%;margin-top:20px}.btn[data-v-0bd9ed96]{display:inline-flex;align-items:center;justify-content:center;padding:8px 16px;font-size:14px;font-weight:500;line-height:1.5;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;border:1px solid transparent;border-radius:6px;transition:all .2s ease}.btn[data-v-0bd9ed96]:hover{transform:translateY(-1px);box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.btn[data-v-0bd9ed96]:active{transform:translateY(0);box-shadow:none}.btn-primary[data-v-0bd9ed96]{color:#fff;background-color:#3182ce;border-color:#3182ce}.btn-primary[data-v-0bd9ed96]:hover{background-color:#2c5282;border-color:#2c5282}.btn-success[data-v-0bd9ed96]{color:#fff;background-color:#38a169;border-color:#38a169}.btn-success[data-v-0bd9ed96]:hover{background-color:#2f855a;border-color:#2f855a}.btn-outline-primary[data-v-0bd9ed96]{color:#3182ce;background-color:transparent;border-color:#3182ce}.btn-outline-primary[data-v-0bd9ed96]:hover{color:#fff;background-color:#3182ce}.btn-sm[data-v-0bd9ed96]{padding:6px 12px;font-size:13px;border-radius:4px}.btn[data-v-0bd9ed96]:disabled{opacity:.65;cursor:not-allowed;transform:none;box-shadow:none}.form-control[data-v-0bd9ed96]{display:block;width:100%;padding:8px 12px;font-size:14px;line-height:1.5;color:#2d3748;background-color:#fff;border:1px solid #e2e8f0;border-radius:6px;transition:all .2s ease}.form-control[data-v-0bd9ed96]:focus{border-color:#4299e1;box-shadow:0 0 0 3px rgba(66,153,225,.15);outline:none}.form-control[data-v-0bd9ed96]::-moz-placeholder{color:#a0aec0}.form-control[data-v-0bd9ed96]::placeholder{color:#a0aec0}@media (max-width:640px){.coin-container[data-v-0bd9ed96]{padding:16px}.transaction-table td[data-v-0bd9ed96],.transaction-table th[data-v-0bd9ed96]{padding:12px;font-size:13px}.modal-content[data-v-0bd9ed96]{width:95%;margin:16px}}.policy-notification[data-v-0bd9ed96]{background-color:#fffbeb;border-left:4px solid #f59e0b;color:#92400e;padding:16px;border-radius:8px;margin-bottom:24px;font-size:15px;text-align:left}.submission-container[data-v-68797b30]{background-color:#fff;border-radius:12px;box-shadow:0 4px 16px rgba(0,0,0,.08);padding:20px;margin-bottom:24px}.header[data-v-68797b30]{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;padding-bottom:16px;border-bottom:1px solid #e2e8f0}.title[data-v-68797b30]{font-size:18px;font-weight:600;color:#2d3748;margin:0}.header-buttons[data-v-68797b30]{display:flex;gap:12px}.key-manage-btn[data-v-68797b30]{background-color:#6b7280;color:#fff;border:none;border-radius:6px;padding:8px 16px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease}.key-manage-btn[data-v-68797b30]:hover{background-color:#4b5563;transform:translateY(-1px);box-shadow:0 4px 6px -1px rgba(0,0,0,.1)}.manage-btn[data-v-68797b30]{background-color:#3182ce;color:#fff;border:none;border-radius:6px;padding:8px 16px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease}.manage-btn[data-v-68797b30]:hover{background-color:#2c5282;transform:translateY(-1px);box-shadow:0 4px 6px -1px rgba(0,0,0,.1)}.submission-table-wrapper[data-v-68797b30]{overflow-x:auto}.submission-table[data-v-68797b30]{width:100%;border-collapse:separate;border-spacing:0;white-space:nowrap}.submission-table td[data-v-68797b30],.submission-table th[data-v-68797b30]{padding:12px 16px;text-align:left;border-bottom:1px solid #e2e8f0;font-size:14px}.submission-table th[data-v-68797b30]{background-color:#f7fafc;color:#4a5568;font-weight:600;position:sticky;top:0}.submission-table tr:last-child td[data-v-68797b30]{border-bottom:none}.submission-table tbody tr[data-v-68797b30]{transition:background-color .2s ease}.submission-table tbody tr[data-v-68797b30]:hover{background-color:#f7fafc}.clickable[data-v-68797b30]{cursor:pointer;position:relative}.clickable[data-v-68797b30]:hover{background-color:#ebf8ff!important}.clickable[data-v-68797b30]:after{content:"";position:absolute;left:0;top:0;width:3px;height:100%;background-color:#3182ce}.title-cell[data-v-68797b30]{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.empty-state[data-v-68797b30]{padding:40px 20px;text-align:center;color:#718096;font-size:15px;background-color:#f7fafc;border-radius:8px}.pagination[data-v-68797b30]{display:flex;justify-content:center;align-items:center;margin-top:20px;gap:12px}.page-btn[data-v-68797b30]{background-color:#fff;border:1px solid #e2e8f0;color:#4a5568;padding:6px 12px;border-radius:6px;font-size:14px;cursor:pointer;transition:all .2s ease}.page-btn[data-v-68797b30]:hover:not(:disabled){background-color:#f7fafc;border-color:#cbd5e0}.page-btn[data-v-68797b30]:disabled{opacity:.5;cursor:not-allowed}.page-info[data-v-68797b30]{color:#4a5568;font-size:14px;font-weight:500}.status-approved[data-v-68797b30]{color:#38a169;background-color:#f0fff4;padding:4px 8px;border-radius:4px;font-weight:500;font-size:13px}.status-pending[data-v-68797b30]{color:#d69e2e;background-color:#fffaf0;padding:4px 8px;border-radius:4px;font-weight:500;font-size:13px}.status-rejected[data-v-68797b30]{color:#e53e3e;background-color:#fff5f5;padding:4px 8px;border-radius:4px;font-weight:500;font-size:13px}.edit-btn[data-v-68797b30]{background-color:#4299e1;color:#fff;border:none;border-radius:4px;padding:4px 8px;font-size:13px;cursor:pointer;transition:all .2s ease}.edit-btn[data-v-68797b30]:hover{background-color:#3182ce;transform:translateY(-1px);box-shadow:0 2px 4px rgba(0,0,0,.1)}.action-buttons[data-v-68797b30]{display:flex;gap:8px;flex-wrap:wrap}.private-btn[data-v-68797b30]{background-color:#f56565;color:#fff;border:none;border-radius:4px;padding:4px 8px;font-size:13px;cursor:pointer;transition:all .2s ease}.private-btn[data-v-68797b30]:hover{background-color:#e53e3e;transform:translateY(-1px);box-shadow:0 2px 4px rgba(0,0,0,.1)}.public-btn[data-v-68797b30]{background-color:#48bb78;color:#fff;border:none;border-radius:4px;padding:4px 8px;font-size:13px;cursor:pointer;transition:all .2s ease}.public-btn[data-v-68797b30]:hover{background-color:#38a169;transform:translateY(-1px);box-shadow:0 2px 4px rgba(0,0,0,.1)}.status-public[data-v-68797b30]{color:#38a169;background-color:#f0fff4;padding:4px 8px;border-radius:4px;font-weight:500;font-size:13px}.status-private[data-v-68797b30]{color:#e53e3e;background-color:#fff5f5;padding:4px 8px;border-radius:4px;font-weight:500;font-size:13px}.status-unknown[data-v-68797b30]{color:#a0aec0;font-size:13px}.modal-overlay[data-v-68797b30]{position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.5);display:flex;justify-content:center;align-items:center;z-index:1000}.modal-content[data-v-68797b30]{background-color:#fff;border-radius:12px;box-shadow:0 10px 25px -5px rgba(0,0,0,.15);width:90%;max-width:600px;max-height:80vh;overflow:hidden;display:flex;flex-direction:column}.modal-header[data-v-68797b30]{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #e2e8f0}.modal-header h3[data-v-68797b30]{margin:0;font-size:18px;font-weight:600;color:#2d3748}.close-btn[data-v-68797b30]{background:none;border:none;font-size:24px;color:#718096;cursor:pointer;transition:color .2s ease}.close-btn[data-v-68797b30]:hover{color:#4a5568}.modal-body[data-v-68797b30]{padding:20px;overflow-y:auto}.key-management-modal[data-v-68797b30]{min-height:300px}.exchange-key-btn[data-v-68797b30]{background-color:#3182ce;color:#fff;border:none;border-radius:6px;padding:8px 16px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease;margin-bottom:20px}.exchange-key-btn[data-v-68797b30]:hover{background-color:#2c5282;transform:translateY(-1px);box-shadow:0 4px 6px -1px rgba(0,0,0,.1)}.key-table-wrapper[data-v-68797b30]{overflow-x:auto;width:100%}.key-table[data-v-68797b30]{width:100%;min-width:500px;border-collapse:separate;border-spacing:0}.key-table td[data-v-68797b30],.key-table th[data-v-68797b30]{padding:12px 16px;text-align:left;border-bottom:1px solid #e2e8f0;font-size:14px}.key-table th[data-v-68797b30]{background-color:#f7fafc;color:#4a5568;font-weight:600;position:sticky;top:0}.key-content[data-v-68797b30]{display:flex;align-items:center;gap:10px}.toggle-visibility[data-v-68797b30]{background:none;border:none;cursor:pointer;color:#718096;padding:4px;display:flex;align-items:center;justify-content:center;transition:color .2s ease}.toggle-visibility[data-v-68797b30]:hover{color:#4a5568}.status-valid[data-v-68797b30]{color:#38a169;background-color:#f0fff4}.status-invalid[data-v-68797b30],.status-valid[data-v-68797b30]{padding:4px 8px;border-radius:4px;font-weight:500;font-size:13px}.status-invalid[data-v-68797b30]{color:#e53e3e;background-color:#fff5f5}.empty-keys[data-v-68797b30],.loading-keys[data-v-68797b30]{padding:40px 20px;text-align:center;color:#718096;font-size:15px;background-color:#f7fafc;border-radius:8px}.exchange-key-modal[data-v-68797b30]{max-width:450px}.form-group[data-v-68797b30]{margin-bottom:16px}.form-group label[data-v-68797b30]{display:block;margin-bottom:8px;font-weight:500;color:#4a5568;font-size:14px}.form-group input[data-v-68797b30]{width:100%;padding:10px 12px;border:1px solid #e2e8f0;border-radius:6px;font-size:14px;transition:border-color .2s ease}.form-group input[data-v-68797b30]:focus{outline:none;border-color:#3182ce;box-shadow:0 0 0 3px rgba(66,153,225,.15)}.form-actions[data-v-68797b30]{margin-top:24px;display:flex;justify-content:flex-end}.submit-btn[data-v-68797b30]{background-color:#3182ce;color:#fff;border:none;border-radius:6px;padding:10px 20px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease}.submit-btn[data-v-68797b30]:hover:not(:disabled){background-color:#2c5282;transform:translateY(-1px);box-shadow:0 4px 6px -1px rgba(0,0,0,.1)}.submit-btn[data-v-68797b30]:disabled{opacity:.5;cursor:not-allowed}@media (max-width:768px){.submission-container[data-v-68797b30]{padding:16px}.header[data-v-68797b30]{flex-direction:column;align-items:flex-start;gap:12px}.header-buttons[data-v-68797b30]{display:flex;width:100%;justify-content:space-between}.key-manage-btn[data-v-68797b30],.manage-btn[data-v-68797b30]{flex:1}.modal-content[data-v-68797b30]{width:95%;max-height:90vh}.key-table-wrapper[data-v-68797b30]{margin:0 -10px;padding:0 10px;width:calc(100% + 20px)}.key-table td[data-v-68797b30],.key-table th[data-v-68797b30]{padding:10px 12px;font-size:13px;white-space:nowrap}}.ranking-opt-in[data-v-68797b30]{margin-bottom:20px;display:flex;align-items:center;padding:0 4px}.checkbox-label[data-v-68797b30]{display:flex;align-items:center;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;font-size:15px;color:#4a5568}.checkbox-label input[data-v-68797b30]{margin-right:8px;width:18px;height:18px;cursor:pointer;accent-color:#3182ce}.checkbox-text[data-v-68797b30]{font-weight:500}.user-center[data-v-5c494a02]{min-height:100vh;background-color:#f4f7fa;padding-top:60px}.container[data-v-5c494a02]{max-width:1200px;margin:0 auto;padding:24px 16px;display:flex;flex-direction:column;gap:24px}.login-required-container[data-v-5c494a02]{display:flex;justify-content:center;align-items:center;height:calc(100vh - 200px)}.login-required-message[data-v-5c494a02]{background-color:#fff;padding:30px 50px;border-radius:10px;box-shadow:0 4px 15px rgba(0,0,0,.1);text-align:center}.login-required-message h2[data-v-5c494a02]{font-size:24px;color:#333;margin-bottom:10px}.login-required-message p[data-v-5c494a02]{font-size:16px;color:#666}.upper-section[data-v-5c494a02]{display:flex;gap:24px;flex-wrap:wrap}.coin-container[data-v-5c494a02],.user-info-container[data-v-5c494a02]{flex:1;min-width:300px}@media (min-width:769px){.upper-section[data-v-5c494a02]{align-items:stretch}.coin-container[data-v-5c494a02],.user-info-container[data-v-5c494a02]{display:flex;flex-direction:column;height:350px}.coin-container[data-v-5c494a02]>:first-child{flex:1;overflow-y:auto;display:flex;flex-direction:column}.coin-container[data-v-5c494a02] ::-webkit-scrollbar{width:6px}.coin-container[data-v-5c494a02] ::-webkit-scrollbar-track{background:#f1f1f1;border-radius:10px}.coin-container[data-v-5c494a02] ::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:10px}.coin-container[data-v-5c494a02] ::-webkit-scrollbar-thumb:hover{background:#a8a8a8}}.lower-section[data-v-5c494a02]{width:100%}@media (max-width:768px){.upper-section[data-v-5c494a02]{flex-direction:column}.coin-container[data-v-5c494a02],.user-info-container[data-v-5c494a02]{width:100%;height:auto}.container[data-v-5c494a02]{padding:16px 12px}}.loading-container[data-v-5c494a02]{display:flex;justify-content:center;align-items:center;height:calc(100vh - 60px)}.loading-spinner[data-v-5c494a02]{padding:20px;background-color:#fff;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,.1);font-size:16px;color:#3182ce}.user-center[data-v-5c494a02]{transition:all .3s ease}@media (max-width:480px){.container[data-v-5c494a02]{padding:12px 8px}}
\ No newline at end of file
diff --git a/dist/index.html b/dist/index.html
index a8ec48f..ce0bbd9 100644
--- a/dist/index.html
+++ b/dist/index.html
@@ -1 +1 @@
-
NEU小站
\ No newline at end of file
+NEU小站
\ No newline at end of file
diff --git a/dist/js/668.980b0479.js b/dist/js/150.b39c3e77.js
similarity index 90%
rename from dist/js/668.980b0479.js
rename to dist/js/150.b39c3e77.js
index 03c9272..737d7cf 100644
--- a/dist/js/668.980b0479.js
+++ b/dist/js/150.b39c3e77.js
@@ -1,2 +1,2 @@
-"use strict";(self["webpackChunknewfront"]=self["webpackChunknewfront"]||[]).push([[668],{1668:function(t,e,s){s.r(e),s.d(e,{default:function(){return me}});var i=s(1411);const n={class:"user-center"},a={key:0,class:"loading-container"},o={key:1,class:"container"},l={class:"upper-section"},r={class:"user-info-container"},c={class:"coin-container"},d={class:"lower-section"},u={key:2,class:"login-required-container"};function h(t,e,s,h,g,k){const p=(0,i.g2)("Navbar"),v=(0,i.g2)("UserInfo"),m=(0,i.g2)("Coin"),f=(0,i.g2)("SubmissionList");return(0,i.uX)(),(0,i.CE)("div",n,[(0,i.bF)(p),g.isLoading?((0,i.uX)(),(0,i.CE)("div",a,e[0]||(e[0]=[(0,i.Lk)("div",{class:"loading-spinner"},"加载中...",-1)]))):g.isAuthenticated?((0,i.uX)(),(0,i.CE)("div",o,[(0,i.Lk)("div",l,[(0,i.Lk)("div",r,[(0,i.bF)(v,{ref:"userInfo"},null,512)]),(0,i.Lk)("div",c,[(0,i.bF)(m,{ref:"coin"},null,512)])]),(0,i.Lk)("div",d,[(0,i.bF)(f,{onManageWorks:k.handleManageWorks},null,8,["onManageWorks"])])])):((0,i.uX)(),(0,i.CE)("div",u,e[1]||(e[1]=[(0,i.Lk)("div",{class:"login-required-message"},[(0,i.Lk)("h2",null,"请先登录!"),(0,i.Lk)("p",null,"您需要登录后才能访问个人中心")],-1)])))])}s(4945);var g=s(4493),k=s(2515);const p={class:"user-info-card"},v={class:"card-container"},m={class:"detail-header"},f={class:"avatar-wrapper"},y=["src"],L={class:"detail-right"},b={class:"detail-name-container"},w={class:"detail-name"},C={key:0,src:"https://download.xn--xhq44jb2fzpc.com/images/vip_g3.svg",class:"vip-badge",alt:"VIP",title:"VIP用户"},_={class:"user-badges"},A=["title"],x=["title"],E={key:2,class:"badge medal"},P={class:"user-sign-container"},M={class:"user-sign"},I={class:"sign-text"},S={class:"user-email"},X={class:"email-text"},$={key:0,class:"badge campus-email"},j={class:"user-stats"},F={class:"stat-value"},T={class:"stat-value"},K={class:"stat-item"},z={class:"stat-value"},O={key:0,class:"modal-overlay"},D={class:"modal-content"},q={class:"modal-header"},N={class:"modal-body"},Q={key:0,class:"loading-state"},U={key:1,class:"empty-state"},R={key:2,class:"user-list"},J={class:"user-meta-wrapper"},W=["onClick"],V={key:0,class:"modal-footer"},B=["disabled"],H={class:"page-info"},G=["disabled"];function Y(t,e,s,n,a,o){const l=(0,i.g2)("UserMeta");return(0,i.uX)(),(0,i.CE)("div",p,[(0,i.Lk)("div",v,[(0,i.Lk)("div",m,[e[11]||(e[11]=(0,i.Lk)("div",{class:"header-bg"},null,-1)),(0,i.Lk)("div",f,[(0,i.Lk)("img",{src:a.userInfo.avatar_path,alt:"用户头像",class:"detail-avatar"},null,8,y),(0,i.Lk)("div",{class:"avatar-edit-overlay",onClick:e[0]||(e[0]=(...t)=>o.triggerFileInput&&o.triggerFileInput(...t))},e[9]||(e[9]=[(0,i.Lk)("i",{class:"edit-icon"},"📷",-1)])),(0,i.Lk)("input",{type:"file",ref:"fileInput",style:{display:"none"},accept:"image/*",onChange:e[1]||(e[1]=(...t)=>o.uploadAvatar&&o.uploadAvatar(...t))},null,544)]),(0,i.Lk)("div",L,[(0,i.Lk)("div",b,[(0,i.Lk)("div",w,[(0,i.eW)((0,k.v_)(a.userInfo.nickname)+" ",1),a.userInfo.is_vip?((0,i.uX)(),(0,i.CE)("img",C)):(0,i.Q3)("",!0)]),(0,i.Lk)("button",{class:"edit-btn",onClick:e[2]||(e[2]=(...t)=>o.editNickname&&o.editNickname(...t)),title:"修改昵称"},e[10]||(e[10]=[(0,i.Lk)("i",{class:"edit-icon"},"✏️",-1)]))]),(0,i.Lk)("div",_,[a.userInfo.verified?((0,i.uX)(),(0,i.CE)("span",{key:0,class:"badge verified",title:a.userInfo.verified},"认证",8,A)):(0,i.Q3)("",!0),a.userInfo.invited?((0,i.uX)(),(0,i.CE)("span",{key:1,class:"badge invited",title:a.userInfo.invited},"特邀",8,x)):(0,i.Q3)("",!0),a.userInfo.medal?((0,i.uX)(),(0,i.CE)("span",E,"小站奖章")):(0,i.Q3)("",!0)])])]),(0,i.Lk)("div",P,[(0,i.Lk)("div",M,[e[13]||(e[13]=(0,i.Lk)("div",{class:"sign-icon"},"✍️",-1)),(0,i.Lk)("div",I,(0,k.v_)(a.userInfo.sign||"这个人很懒,还没有写个性签名~"),1),(0,i.Lk)("button",{class:"edit-btn",onClick:e[3]||(e[3]=(...t)=>o.editSign&&o.editSign(...t)),title:"修改签名"},e[12]||(e[12]=[(0,i.Lk)("i",{class:"edit-icon"},"✏️",-1)]))])]),(0,i.Lk)("div",S,[e[14]||(e[14]=(0,i.Lk)("div",{class:"email-icon"},"📧",-1)),(0,i.Lk)("div",X,(0,k.v_)(a.userInfo.email),1),o.isCampusEmail?((0,i.uX)(),(0,i.CE)("span",$,"校园邮箱")):(0,i.Q3)("",!0)]),(0,i.Lk)("div",j,[(0,i.Lk)("div",{class:"stat-item clickable",onClick:e[4]||(e[4]=t=>o.openList(1))},[(0,i.Lk)("div",F,(0,k.v_)(a.userInfo.follower||0),1),e[15]||(e[15]=(0,i.Lk)("div",{class:"stat-label"},"粉丝",-1))]),e[18]||(e[18]=(0,i.Lk)("div",{class:"stat-separator"},null,-1)),(0,i.Lk)("div",{class:"stat-item clickable",onClick:e[5]||(e[5]=t=>o.openList(0))},[(0,i.Lk)("div",T,(0,k.v_)(a.userInfo.following||0),1),e[16]||(e[16]=(0,i.Lk)("div",{class:"stat-label"},"关注",-1))]),e[19]||(e[19]=(0,i.Lk)("div",{class:"stat-separator"},null,-1)),(0,i.Lk)("div",K,[(0,i.Lk)("div",z,(0,k.v_)(a.userInfo.coin||"未激活"),1),e[17]||(e[17]=(0,i.Lk)("div",{class:"stat-label"},"东币",-1))])])]),a.showListModal?((0,i.uX)(),(0,i.CE)("div",O,[(0,i.Lk)("div",D,[(0,i.Lk)("div",q,[(0,i.Lk)("h3",null,(0,k.v_)(0===a.listMode?"我的关注":"我的粉丝"),1),(0,i.Lk)("button",{class:"close-modal-btn",onClick:e[6]||(e[6]=(...t)=>o.closeList&&o.closeList(...t))},"×")]),(0,i.Lk)("div",N,[a.listLoading?((0,i.uX)(),(0,i.CE)("div",Q,"加载中...")):0===a.userList.length?((0,i.uX)(),(0,i.CE)("div",U,"暂无数据")):((0,i.uX)(),(0,i.CE)("div",R,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(a.userList,(t=>((0,i.uX)(),(0,i.CE)("div",{key:t.user_id,class:"user-list-item"},[(0,i.Lk)("div",J,[(0,i.bF)(l,{id:t.user_id,showFollow:!1},null,8,["id"])]),(0,i.Lk)("button",{class:(0,k.C4)(["list-action-btn",{"btn-cancel":t.is_following,"btn-follow":!t.is_following}]),onClick:e=>o.handleListFollowAction(t)},(0,k.v_)(t.is_following?"取消关注":"关注"),11,W)])))),128))]))]),a.listPagination.pages>1?((0,i.uX)(),(0,i.CE)("div",V,[(0,i.Lk)("button",{class:"page-btn",disabled:1===a.listPagination.current,onClick:e[7]||(e[7]=t=>o.changePage(a.listPagination.current-1))},"上一页",8,B),(0,i.Lk)("span",H,(0,k.v_)(a.listPagination.current)+" / "+(0,k.v_)(a.listPagination.pages),1),(0,i.Lk)("button",{class:"page-btn",disabled:a.listPagination.current===a.listPagination.pages,onClick:e[8]||(e[8]=t=>o.changePage(a.listPagination.current+1))},"下一页",8,G)])):(0,i.Q3)("",!0)])])):(0,i.Q3)("",!0)])}var Z=s(2453),tt=s(6707),et=s(6042),st={name:"UserInfo",components:{UserMeta:et.A},data(){return{userInfo:{id:"",nickname:"加载中...",verified:null,invited:null,medal:!1,avatar_path:"",email:"",sign:"",follower:0,following:0,coin:0},showListModal:!1,listMode:0,userList:[],listLoading:!1,listPagination:{current:1,total:0,pages:1}}},computed:{isCampusEmail(){if(!this.userInfo.email)return!1;const t=["@stu.neu.edu.cn","@stu.neuq.edu.cn","@mails.neu.edu.cn"];return t.some((t=>this.userInfo.email.endsWith(t)))}},created(){this.fetchUserInfo()},methods:{async fetchUserInfo(){try{const t=Z.A.get("token");if(!t)return void this.showMessage("未登录或登录已过期","error");const e=await fetch("https://newfront.xn--xhq44jb2fzpc.com/user/info",{method:"GET",headers:{Authorization:t}});if(!e.ok)throw new Error("获取用户信息失败");const s=await e.json();this.userInfo=s}catch(t){console.error("获取用户信息出错:",t),this.showMessage("获取用户信息失败","error")}},triggerFileInput(){this.$refs.fileInput.click()},async uploadAvatar(t){const e=t.target.files[0];if(!e)return void this.showMessage("请选择一个文件","error");if(e.size>1048576)return void this.showMessage("头像必须小于1MB","error");const s=Z.A.get("token");if(s)try{const t=new FormData;t.append("avatar",e);const i=await fetch("https://userlogin.xn--xhq44jb2fzpc.com/avatar/upload",{method:"POST",headers:{Authorization:s},body:t});if(i.ok){const t=await i.json();this.userInfo.avatar_path=t.avatarUrl,this.showMessage("头像上传成功","success")}else 401===i.status||403===i.status?this.showMessage("权限错误,请重新登录后再试","error"):this.showMessage("上传失败,请稍后再试","error")}catch(i){console.error("头像上传错误:",i),this.showMessage("上传过程中发生错误","error")}else this.showMessage("请先登录,再上传头像","error")},async editNickname(){const t=Z.A.get("token");t?(0,tt.A)({title:"修改昵称",message:"请输入新的昵称:",showInput:!0,inputPlaceholder:"请输入新昵称",inputValue:this.userInfo.nickname,confirmText:"确认",cancelText:"取消",cancel:!0}).then((async({value:e})=>{if(null!==e&&""!==e.trim())try{const s=await fetch("https://userlogin.xn--xhq44jb2fzpc.com/avatar/edit-nickname",{method:"POST",headers:{"Content-Type":"application/json",Authorization:t},body:JSON.stringify({nickname:e.trim()})});if(s.ok){await s.json();this.userInfo.nickname=e.trim(),this.showMessage("昵称修改成功","success")}else{const t=await s.json();this.showMessage(`修改昵称失败:${t.message}`,"error")}}catch(s){console.error("修改昵称错误:",s),this.showMessage("发生错误,请稍后再试","error")}else this.showMessage("昵称不能为空","error")})).catch((()=>{})):this.showMessage("您尚未登录,请登录后再尝试修改昵称","error")},async editSign(){const t=Z.A.get("token");if(!t)return void this.showMessage("您尚未登录,请登录后再尝试修改签名","error");const e=this.userInfo.sign||"";(0,tt.A)({title:"修改个性签名",message:"请输入新的个性签名 (最多20个汉字,留空表示删除个性签名):",showInput:!0,inputValue:e,inputPlaceholder:"请输入个性签名",confirmText:"确认",cancelText:"取消",cancel:!0}).then((async({value:e})=>{if(null!==e)try{const s=await fetch("https://newfront.xn--xhq44jb2fzpc.com/user/sign",{method:"POST",headers:{"Content-Type":"application/json",Authorization:t},body:JSON.stringify({sign:e.trim()})});if(s.ok)this.userInfo.sign=e.trim(),this.showMessage("个性签名修改成功","success");else{const t=await s.json();this.showMessage(`修改签名失败:${t.message}`,"error")}}catch(s){console.error("修改签名错误:",s),this.showMessage("发生错误,请稍后再试","error")}})).catch((()=>{}))},openList(t){this.listMode=t,this.showListModal=!0,this.fetchFollowList(1)},closeList(){this.showListModal=!1,this.userList=[]},async fetchFollowList(t=1){this.listLoading=!0;try{const e=Z.A.get("token");if(!e)return;const s=await fetch("https://newfront.xn--xhq44jb2fzpc.com/user/follow/get",{method:"POST",headers:{"Content-Type":"application/json",Authorization:e},body:JSON.stringify({mode:this.listMode,page_num:t})});if(s.ok){const t=await s.json();this.userList=t.list,this.listPagination.current=t.current_page,this.listPagination.total=t.total,this.listPagination.pages=t.total_pages}else this.showMessage("获取列表失败","error")}catch(e){console.error("获取列表错误:",e),this.showMessage("网络错误","error")}finally{this.listLoading=!1}},async handleListFollowAction(t){const e=t.is_following,s=t.user_id,i=Z.A.get("token");i?e?(0,tt.A)({title:"取消关注",message:"确定取消关注该用户吗?",confirmText:"确定",cancelText:"取消",cancel:!0}).then((async()=>{await this.executeFollowAction(s,!e)})).catch((()=>{})):await this.executeFollowAction(s,!e):this.showMessage("请先登录","error")},async executeFollowAction(t,e){const s=Z.A.get("token");try{const i=await fetch("https://newfront.xn--xhq44jb2fzpc.com/user/follow/do",{method:"POST",headers:{"Content-Type":"application/json",Authorization:s},body:JSON.stringify({user_id:t})});if(i.ok)this.showMessage(e?"关注成功":"取消关注成功","success"),this.fetchFollowList(this.listPagination.current),this.fetchUserInfo();else{const t=await i.json();this.showMessage(t.message||"操作失败","error")}}catch(i){console.error("操作错误:",i),this.showMessage("网络错误","error")}},changePage(t){t<1||t>this.listPagination.pages||this.fetchFollowList(t)},showMessage(t,e="success"){this.$barMessage({message:t,type:e})}}},it=s(6968);const nt=(0,it.A)(st,[["render",Y],["__scopeId","data-v-4ea2fd79"]]);var at=nt;const ot={class:"coin-container"},lt={key:0,class:"not-activated"},rt={class:"alert alert-warning policy-notification"},ct={key:1,class:"activated"},dt={class:"alert alert-warning policy-notification"},ut={class:"coin-info"},ht={class:"coin-amount"},gt={class:"transactions"},kt={key:0,class:"no-records"},pt={key:1,class:"transaction-table"},vt={key:2,class:"pagination"},mt=["disabled"],ft={class:"page-info"},yt=["disabled"];function Lt(t,e,s,n,a,o){return(0,i.uX)(),(0,i.CE)("div",ot,[a.isActivated?((0,i.uX)(),(0,i.CE)("div",ct,[(0,i.Lk)("div",dt,(0,k.v_)(a.policyNotification),1),(0,i.Lk)("div",ut,[(0,i.Lk)("h3",null,[e[3]||(e[3]=(0,i.eW)("您当前拥有 ")),(0,i.Lk)("span",ht,(0,k.v_)(a.coinAmount),1),e[4]||(e[4]=(0,i.eW)(" 枚东币"))])]),(0,i.Lk)("div",gt,[0===a.transactions.length?((0,i.uX)(),(0,i.CE)("div",kt," 暂无交易记录 ")):((0,i.uX)(),(0,i.CE)("table",pt,[e[5]||(e[5]=(0,i.Lk)("thead",null,[(0,i.Lk)("tr",null,[(0,i.Lk)("th",null,"时间"),(0,i.Lk)("th",null,"金额"),(0,i.Lk)("th",null,"备注")])],-1)),(0,i.Lk)("tbody",null,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(a.transactions,(t=>((0,i.uX)(),(0,i.CE)("tr",{key:t.id},[(0,i.Lk)("td",null,(0,k.v_)(o.formatDate(t.created_at)),1),(0,i.Lk)("td",{class:(0,k.C4)({credit:"credit"===t.type,debit:"debit"===t.type})},(0,k.v_)("credit"===t.type?"+":"-")+(0,k.v_)(t.amount),3),(0,i.Lk)("td",null,(0,k.v_)(t.note),1)])))),128))])])),a.totalPages>1?((0,i.uX)(),(0,i.CE)("div",vt,[(0,i.Lk)("button",{disabled:1===a.currentPage,onClick:e[0]||(e[0]=t=>o.loadTransactions(a.currentPage-1)),class:"btn btn-sm btn-outline-primary"}," 上一页 ",8,mt),(0,i.Lk)("span",ft,(0,k.v_)(a.currentPage)+" / "+(0,k.v_)(a.totalPages),1),(0,i.Lk)("button",{disabled:a.currentPage===a.totalPages,onClick:e[1]||(e[1]=t=>o.loadTransactions(a.currentPage+1)),class:"btn btn-sm btn-outline-primary"}," 下一页 ",8,yt)])):(0,i.Q3)("",!0)])])):((0,i.uX)(),(0,i.CE)("div",lt,[(0,i.Lk)("div",rt,(0,k.v_)(a.policyNotification),1),e[2]||(e[2]=(0,i.Lk)("div",{class:"alert alert-info"},[(0,i.Lk)("p",null,"东币系统在账号完成校园验证后自动激活。")],-1))]))])}var bt={name:"CoinComponent",data(){return{isActivated:!1,coinAmount:0,transactions:[],currentPage:1,totalPages:1,policyNotification:"由于政策原因,短信验证码服务已于2025.4.13下线,后续东币系统将在校园验证通过后自动激活。之前已完成校园验证但未手动激活东币系统的用户,系统已为您自动激活东币系统。"}},created(){this.loadTransactions(1)},methods:{async loadTransactions(t){try{const e=Z.A.get("token");if(!e)return console.error("未找到登录token"),void(this.isActivated=!1);const s=await fetch("https://newfront.xn--xhq44jb2fzpc.com/coin/transactions",{method:"POST",headers:{Authorization:e,"Content-Type":"application/json"},body:JSON.stringify({page_num:t})}),i=await s.json();if(s.ok)this.isActivated=!0,this.coinAmount=i.coinAmount,this.transactions=i.transactions,this.currentPage=i.current_page,this.totalPages=i.total_pages;else{if(403!==s.status||"用户未激活东币系统"!==i.message)throw new Error(i.message||"获取交易记录失败");this.isActivated=!1,this.coinAmount=0,this.transactions=[]}}catch(e){console.error("获取交易记录出错:",e),this.isActivated=!1}},formatDate(t){const e=new Date(t);return`${e.getFullYear()}/${e.getMonth()+1}/${e.getDate()} ${e.getHours()}:${String(e.getMinutes()).padStart(2,"0")}:${String(e.getSeconds()).padStart(2,"0")}`}}};const wt=(0,it.A)(bt,[["render",Lt],["__scopeId","data-v-0bd9ed96"]]);var Ct=wt,_t=s(1561);const At={class:"submission-container"},xt={class:"header"},Et={class:"header-buttons"},Pt={key:0,class:"modal-overlay"},Mt={class:"modal-content key-management-modal"},It={class:"modal-header"},St={class:"modal-body"},Xt={key:0,class:"key-table-wrapper"},$t={class:"key-table"},jt={class:"key-cell"},Ft={class:"key-content"},Tt=["onClick"],Kt={key:0,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round",width:"24",height:"24","stroke-width":"1.1"},zt={key:1,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round",width:"24",height:"24","stroke-width":"1.1"},Ot={key:1,class:"loading-keys"},Dt={key:2,class:"empty-keys"},qt={key:1,class:"modal-overlay"},Nt={class:"modal-content exchange-key-modal"},Qt={class:"modal-header"},Ut={class:"modal-body"},Rt={class:"form-group"},Jt={class:"form-group"},Wt={class:"form-actions"},Vt=["disabled"],Bt={class:"submission-table-wrapper"},Ht={key:0,class:"submission-table"},Gt={key:0},Yt=["onClick"],Zt={class:"title-cell"},te={key:0},ee={key:1,class:"status-unknown"},se={class:"action-buttons"},ie=["onClick"],ne=["onClick"],ae={key:1,class:"empty-state"},oe={key:2,class:"pagination"},le=["disabled"],re={class:"page-info"},ce=["disabled"];function de(t,e,s,n,a,o){return(0,i.uX)(),(0,i.CE)("div",At,[(0,i.Lk)("div",xt,[e[10]||(e[10]=(0,i.Lk)("h3",{class:"title"},"我的投稿记录",-1)),(0,i.Lk)("div",Et,[(0,i.Lk)("button",{class:"key-manage-btn",onClick:e[0]||(e[0]=t=>a.showKeyManagement=!0)},"密钥管理"),(0,i.Lk)("button",{class:"manage-btn",onClick:e[1]||(e[1]=(...t)=>o.handleManage&&o.handleManage(...t))},"我要投稿")])]),a.showKeyManagement?((0,i.uX)(),(0,i.CE)("div",Pt,[(0,i.Lk)("div",Mt,[(0,i.Lk)("div",It,[e[11]||(e[11]=(0,i.Lk)("h3",null,"密钥管理",-1)),(0,i.Lk)("button",{class:"close-btn",onClick:e[2]||(e[2]=t=>a.showKeyManagement=!1)},"×")]),(0,i.Lk)("div",St,[(0,i.Lk)("button",{class:"exchange-key-btn",onClick:e[3]||(e[3]=t=>a.showExchangeKey=!0)},"兑换密钥"),a.keyList.length>0?((0,i.uX)(),(0,i.CE)("div",Xt,[(0,i.Lk)("table",$t,[e[14]||(e[14]=(0,i.Lk)("thead",null,[(0,i.Lk)("tr",null,[(0,i.Lk)("th",null,"密钥"),(0,i.Lk)("th",null,"状态"),(0,i.Lk)("th",null,"创建时间"),(0,i.Lk)("th",null,"最后使用时间")])],-1)),(0,i.Lk)("tbody",null,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(a.keyList,((t,s)=>((0,i.uX)(),(0,i.CE)("tr",{key:s},[(0,i.Lk)("td",jt,[(0,i.Lk)("div",Ft,[(0,i.Lk)("span",null,(0,k.v_)(a.visibleKeyIndex===s?t.key_plaintext:"******"),1),(0,i.Lk)("button",{class:"toggle-visibility",onClick:t=>o.toggleKeyVisibility(s)},[a.visibleKeyIndex!==s?((0,i.uX)(),(0,i.CE)("svg",Kt,e[12]||(e[12]=[(0,i.Lk)("path",{d:"M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0"},null,-1),(0,i.Lk)("path",{d:"M21 12c-2.4 4 -5.4 6 -9 6c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6"},null,-1)]))):((0,i.uX)(),(0,i.CE)("svg",zt,e[13]||(e[13]=[(0,i.Lk)("path",{d:"M10.585 10.587a2 2 0 0 0 2.829 2.828"},null,-1),(0,i.Lk)("path",{d:"M16.681 16.673a8.717 8.717 0 0 1 -4.681 1.327c-3.6 0 -6.6 -2 -9 -6c1.272 -2.12 2.712 -3.678 4.32 -4.674m2.86 -1.146a9.055 9.055 0 0 1 1.82 -.18c3.6 0 6.6 2 9 6c-.666 1.11 -1.379 2.067 -2.138 2.87"},null,-1),(0,i.Lk)("path",{d:"M3 3l18 18"},null,-1)])))],8,Tt)])]),(0,i.Lk)("td",null,[(0,i.Lk)("span",{class:(0,k.C4)(t.is_valid?"status-valid":"status-invalid")},(0,k.v_)(t.is_valid?"有效":"无效"),3)]),(0,i.Lk)("td",null,(0,k.v_)(o.formatDate(t.created_at)),1),(0,i.Lk)("td",null,(0,k.v_)(t.last_used_at?o.formatDate(t.last_used_at):"未使用"),1)])))),128))])])])):a.loadingKeyList?((0,i.uX)(),(0,i.CE)("div",Ot," 加载中... ")):((0,i.uX)(),(0,i.CE)("div",Dt,e[15]||(e[15]=[(0,i.Lk)("p",null,"暂无密钥记录",-1)])))])])])):(0,i.Q3)("",!0),a.showExchangeKey?((0,i.uX)(),(0,i.CE)("div",qt,[(0,i.Lk)("div",Nt,[(0,i.Lk)("div",Qt,[e[16]||(e[16]=(0,i.Lk)("h3",null,"兑换密钥",-1)),(0,i.Lk)("button",{class:"close-btn",onClick:e[4]||(e[4]=t=>a.showExchangeKey=!1)},"×")]),(0,i.Lk)("div",Ut,[(0,i.Lk)("div",Rt,[e[17]||(e[17]=(0,i.Lk)("label",{for:"invite-code"},"邀请码",-1)),(0,i.bo)((0,i.Lk)("input",{id:"invite-code","onUpdate:modelValue":e[5]||(e[5]=t=>a.exchangeForm.invite_code=t),type:"text",placeholder:"输入邀请码"},null,512),[[_t.Jo,a.exchangeForm.invite_code]])]),(0,i.Lk)("div",Jt,[e[18]||(e[18]=(0,i.Lk)("label",{for:"custom-key"},"自定义密钥",-1)),(0,i.bo)((0,i.Lk)("input",{id:"custom-key","onUpdate:modelValue":e[6]||(e[6]=t=>a.exchangeForm.key=t),type:"text",placeholder:"输入您的自定义密钥"},null,512),[[_t.Jo,a.exchangeForm.key]])]),(0,i.Lk)("div",Wt,[(0,i.Lk)("button",{class:"submit-btn",disabled:!a.exchangeForm.invite_code||!a.exchangeForm.key||a.submitting,onClick:e[7]||(e[7]=(...t)=>o.exchangeKey&&o.exchangeKey(...t))},(0,k.v_)(a.submitting?"处理中...":"确认兑换"),9,Vt)])])])])):(0,i.Q3)("",!0),(0,i.Lk)("div",Bt,[a.submissions.length>0?((0,i.uX)(),(0,i.CE)("table",Ht,[(0,i.Lk)("thead",null,[(0,i.Lk)("tr",null,[e[19]||(e[19]=(0,i.Lk)("th",null,"标题",-1)),e[20]||(e[20]=(0,i.Lk)("th",null,"板块",-1)),e[21]||(e[21]=(0,i.Lk)("th",null,"审核状态",-1)),a.setPrivate?((0,i.uX)(),(0,i.CE)("th",Gt,"文章权限")):(0,i.Q3)("",!0),e[22]||(e[22]=(0,i.Lk)("th",null,"审核备注",-1)),e[23]||(e[23]=(0,i.Lk)("th",null,"投稿时间",-1)),e[24]||(e[24]=(0,i.Lk)("th",null,"状态更新时间",-1)),e[25]||(e[25]=(0,i.Lk)("th",null,"操作",-1))])]),(0,i.Lk)("tbody",null,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(a.submissions,(t=>((0,i.uX)(),(0,i.CE)("tr",{key:t.id,class:(0,k.C4)({clickable:t.article_id}),onClick:e=>t.article_id&&o.navigateToArticle(t.article_id)},[(0,i.Lk)("td",Zt,(0,k.v_)(t.title),1),(0,i.Lk)("td",null,(0,k.v_)(t.section),1),(0,i.Lk)("td",null,[(0,i.Lk)("span",{class:(0,k.C4)(o.getStatusClass(t.status))},(0,k.v_)(t.status),3)]),a.setPrivate?((0,i.uX)(),(0,i.CE)("td",te,["已通过"===t.status&&t.hasOwnProperty("is_public")?((0,i.uX)(),(0,i.CE)("span",{key:0,class:(0,k.C4)(t.is_public?"status-public":"status-private")},(0,k.v_)(t.is_public?"公开":"私密"),3)):((0,i.uX)(),(0,i.CE)("span",ee,"-"))])):(0,i.Q3)("",!0),(0,i.Lk)("td",null,(0,k.v_)(t.note||"无"),1),(0,i.Lk)("td",null,(0,k.v_)(o.formatDate(t.created_at)),1),(0,i.Lk)("td",null,(0,k.v_)(o.formatDate(t.updated_at)),1),(0,i.Lk)("td",null,[(0,i.Lk)("div",se,["已通过"===t.status&&t.article_id&&t.owner?((0,i.uX)(),(0,i.CE)("button",{key:0,class:"edit-btn",onClick:(0,_t.D$)((e=>o.navigateToEdit(t.article_id)),["stop"])}," 编辑 ",8,ie)):(0,i.Q3)("",!0),a.setPrivate&&"已通过"===t.status&&t.article_id&&t.owner&&t.hasOwnProperty("is_public")?((0,i.uX)(),(0,i.CE)("button",{key:1,class:(0,k.C4)(t.is_public?"private-btn":"public-btn"),onClick:(0,_t.D$)((e=>o.toggleArticleAccess(t)),["stop"])},(0,k.v_)(t.is_public?"设为私密":"设为公开"),11,ne)):(0,i.Q3)("",!0)])])],10,Yt)))),128))])])):((0,i.uX)(),(0,i.CE)("div",ae,e[26]||(e[26]=[(0,i.Lk)("p",null,"暂无投稿记录",-1)]))),a.totalPages>1?((0,i.uX)(),(0,i.CE)("div",oe,[(0,i.Lk)("button",{disabled:1===a.currentPage,onClick:e[8]||(e[8]=t=>o.loadSubmissions(a.currentPage-1)),class:"page-btn"}," 上一页 ",8,le),(0,i.Lk)("span",re,(0,k.v_)(a.currentPage)+" / "+(0,k.v_)(a.totalPages),1),(0,i.Lk)("button",{disabled:a.currentPage===a.totalPages,onClick:e[9]||(e[9]=t=>o.loadSubmissions(a.currentPage+1)),class:"page-btn"}," 下一页 ",8,ce)])):(0,i.Q3)("",!0)])])}var ue={name:"SubmissionList",data(){return{submissions:[],currentPage:1,totalPages:1,totalSubmissions:0,loading:!1,setPrivate:!1,inRank:!0,updatingRank:!1,loadingKeyList:!1,showKeyManagement:!1,showExchangeKey:!1,keyList:[],visibleKeyIndex:-1,exchangeForm:{invite_code:"",key:""},submitting:!1}},created(){this.loadSubmissions(1)},methods:{async loadSubmissions(t){this.loading=!0;try{const e=Z.A.get("token");if(!e)return void console.error("未找到登录token");const s=await fetch("https://newfront.xn--xhq44jb2fzpc.com/user/submission",{method:"POST",headers:{Authorization:e,"Content-Type":"application/json"},body:JSON.stringify({page_num:t})});if(!s.ok)throw new Error("获取投稿记录失败");const i=await s.json();this.submissions=i.submissions,this.currentPage=i.current_page,this.totalPages=i.total_pages,this.totalSubmissions=i.total_submissions,this.setPrivate=i.set_private||!1,i.hasOwnProperty("in_rank")&&(this.inRank=i.in_rank)}catch(e){console.error("获取投稿记录出错:",e)}finally{this.loading=!1}},async updateRankingStatus(){const t=new Date,e=new Date(t);e.setHours(t.getHours()+1);const s=`${e.getHours()}:00`,i=this.inRank,n=i?`您确认参与投稿排行榜吗?如确认,榜单将在下次更新时(${s})显示您。`:`您确认退出投稿排行榜吗?如确认,榜单将在下次更新时(${s})不再显示您。`;try{await tt.A.confirm(n,"提示"),this.updatingRank=!0;const t=Z.A.get("token");if(!t)return tt.A.alert("未找到登录token","错误"),void(this.inRank=!this.inRank);const e=await fetch("https://newfront.xn--xhq44jb2fzpc.com/ranking/in",{method:"POST",headers:{Authorization:t,"Content-Type":"application/json"},body:JSON.stringify({in:this.inRank})});if(!e.ok)throw new Error("更新设置失败");await e.json();const s=i?"参与":"退出";this.$barMessage.success(`您已成功${s}投稿排行榜!`)}catch(a){if(this.inRank=!this.inRank,"cancel"===a||a&&"cancel"===a.action)return;console.error("更新排行榜设置失败:",a),tt.A.alert("更新设置失败,请稍后重试","错误")}finally{this.updatingRank=!1}},handleManage(){console.log("点击了作品管理按钮"),this.$emit("manage-works")},navigateToArticle(t){this.$router.push(`/article/${t}`)},navigateToEdit(t){const e=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||window.innerWidth<768;e?tt.A.confirm("建议在电脑端进行编辑以获得最佳体验。仍要继续吗?","提示").then((()=>{this.$router.push(`/edit?article=${t}`)})).catch((()=>{console.log("用户取消了在移动端编辑")})):this.$router.push(`/edit?article=${t}`)},formatDate(t){if(!t)return"未知";const e=new Date(t);return`${e.getFullYear()}/${e.getMonth()+1}/${e.getDate()} ${e.getHours()}:${String(e.getMinutes()).padStart(2,"0")}:${String(e.getSeconds()).padStart(2,"0")}`},getStatusClass(t){switch(t){case"已通过":return"status-approved";case"审核中":return"status-pending";case"未通过":return"status-rejected";default:return""}},async loadKeyList(){this.loadingKeyList=!0;try{const t=Z.A.get("token");if(!t)return void console.error("未找到登录token");const e=await fetch("https://newfront.xn--xhq44jb2fzpc.com/encrypt/getcode",{method:"GET",headers:{Authorization:t,"Content-Type":"application/json"}});if(!e.ok)throw new Error("获取密钥列表失败");const s=await e.json();if(!s.success)throw new Error(s.message||"获取密钥列表失败");this.keyList=s.data||[]}catch(t){console.error("获取密钥列表出错:",t),tt.A.alert(t.message||"获取密钥列表失败,请稍后再试","错误")}finally{this.loadingKeyList=!1}},toggleKeyVisibility(t){this.visibleKeyIndex===t?this.visibleKeyIndex=-1:this.visibleKeyIndex=t},async exchangeKey(){if(this.exchangeForm.invite_code&&this.exchangeForm.key){this.submitting=!0;try{const t=Z.A.get("token");if(!t)return void console.error("未找到登录token");const e=await fetch("https://newfront.xn--xhq44jb2fzpc.com/encrypt/setcode",{method:"POST",headers:{Authorization:t,"Content-Type":"application/json"},body:JSON.stringify(this.exchangeForm)}),s=await e.json();if(!s.success)throw new Error(s.message||"密钥兑换失败");tt.A.alert("密钥兑换成功","提示"),this.showExchangeKey=!1,this.exchangeForm.invite_code="",this.exchangeForm.key="",this.loadKeyList()}catch(t){console.error("密钥兑换出错:",t),tt.A.alert(t.message||"密钥兑换失败,请稍后再试","错误")}finally{this.submitting=!1}}else tt.A.alert("请输入邀请码和密钥","提示")},async checkAndFillInviteCode(){try{const t=Z.A.get("token");if(!t)return;const e=await fetch("https://newfront.xn--xhq44jb2fzpc.com/encrypt/invite",{method:"GET",headers:{Authorization:t,"Content-Type":"application/json"}});if(e.ok){const t=await e.json();t.success&&t.invite_code&&(this.exchangeForm.invite_code=t.invite_code,this.$barMessage.success("检测到您具有未使用的邀请码,已自动填充"))}}catch(t){console.error("获取邀请码失败:",t)}},async toggleArticleAccess(t){if(!t.article_id)return void tt.A.alert("无效的文章ID","错误");const e=t.is_public?"设为私密":"设为公开";try{await tt.A.confirm(`确认要将文章《${t.title}》${e}吗?`,"确认操作");const s=Z.A.get("token");if(!s)return void tt.A.alert("请先登录","提示");const i=await fetch("https://newfront.xn--xhq44jb2fzpc.com/user/access",{method:"POST",headers:{Authorization:s,"Content-Type":"application/json"},body:JSON.stringify({article_id:t.article_id})});if(!i.ok){const t=await i.json().catch((()=>({})));throw new Error(t.message||"操作失败")}const n=await i.json();t.is_public=n.is_public,this.$barMessage.success(n.message||"操作成功")}catch(s){if("cancel"===s.action)return;console.error("切换文章访问权限失败:",s),this.$barMessage.error(s.message||"操作失败,请稍后再试")}}},watch:{showExchangeKey(t){t&&this.checkAndFillInviteCode()},showKeyManagement(t){t?this.loadKeyList():this.visibleKeyIndex=-1}}};const he=(0,it.A)(ue,[["render",de],["__scopeId","data-v-68797b30"]]);var ge=he,ke=s(122),pe={name:"UserCenter",components:{Navbar:g.A,UserInfo:at,Coin:Ct,SubmissionList:ge},data(){return{isAuthenticated:!1,isLoading:!0}},created(){document.title="个人中心 - NEU小站"},mounted(){this.checkAuthAndFetchUserInfo()},methods:{async checkAuthAndFetchUserInfo(){const t=Z.A.get("token");if(!t)return this.isLoading=!1,"/user-center"===this.$route.path?void this.$router.replace("/login"):void("/login"===this.$route.path&&this.showLoginDialog());try{const e=await fetch("https://newfront.xn--xhq44jb2fzpc.com/user/islogin",{method:"GET",headers:{Authorization:t}});if(!e.ok)throw new Error("Token 验证失败");const s=await e.json();if(!s||!s.isLoggedIn)throw new Error("Token 验证成功但返回状态不正确");this.isAuthenticated=!0,this.isLoading=!1,"/login"===this.$route.path&&this.$router.replace("/user-center")}catch(e){if(console.error("获取用户信息出错:",e),this.isLoading=!1,Z.A.remove("token"),"/user-center"===this.$route.path)return void this.$router.replace("/login");"/login"===this.$route.path&&this.showLoginDialog()}},showLoginDialog(){(0,ke.A)().then((t=>{console.log("登录成功:",t),this.isAuthenticated=!0,this.$router.replace("/user-center")})).catch((t=>{console.log("登录取消:",t)}))},handleManageWorks(){const t=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||window.innerWidth<768;t?tt.A.confirm("建议在电脑端进行投稿以获得最佳体验。仍要继续吗?","提示").then((()=>{this.$router.push("/submit")})).catch((()=>{console.log("用户取消了在移动端投稿")})):this.$router.push("/submit")}}};const ve=(0,it.A)(pe,[["render",h],["__scopeId","data-v-799c197d"]]);var me=ve}}]);
-//# sourceMappingURL=668.980b0479.js.map
\ No newline at end of file
+"use strict";(self["webpackChunknewfront"]=self["webpackChunknewfront"]||[]).push([[150],{6150:function(t,e,s){s.r(e),s.d(e,{default:function(){return me}});var i=s(1411);const n={class:"user-center"},a={key:0,class:"loading-container"},o={key:1,class:"container"},l={class:"upper-section"},r={class:"user-info-container"},c={class:"coin-container"},d={class:"lower-section"},u={key:2,class:"login-required-container"};function h(t,e,s,h,g,k){const p=(0,i.g2)("Navbar"),v=(0,i.g2)("UserInfo"),m=(0,i.g2)("Coin"),f=(0,i.g2)("SubmissionList");return(0,i.uX)(),(0,i.CE)("div",n,[(0,i.bF)(p),g.isLoading?((0,i.uX)(),(0,i.CE)("div",a,e[0]||(e[0]=[(0,i.Lk)("div",{class:"loading-spinner"},"加载中...",-1)]))):g.isAuthenticated?((0,i.uX)(),(0,i.CE)("div",o,[(0,i.Lk)("div",l,[(0,i.Lk)("div",r,[(0,i.bF)(v,{ref:"userInfo"},null,512)]),(0,i.Lk)("div",c,[(0,i.bF)(m,{ref:"coin"},null,512)])]),(0,i.Lk)("div",d,[(0,i.bF)(f,{onManageWorks:k.handleManageWorks},null,8,["onManageWorks"])])])):((0,i.uX)(),(0,i.CE)("div",u,e[1]||(e[1]=[(0,i.Lk)("div",{class:"login-required-message"},[(0,i.Lk)("h2",null,"请先登录!"),(0,i.Lk)("p",null,"您需要登录后才能访问个人中心")],-1)])))])}s(4945);var g=s(4493),k=s(2515);const p={class:"user-info-card"},v={class:"card-container"},m={class:"detail-header"},f={class:"avatar-wrapper"},y=["src"],L={class:"detail-right"},b={class:"detail-name-container"},w={class:"detail-name"},_={key:0,src:"https://download.xn--xhq44jb2fzpc.com/images/vip_g3.svg",class:"vip-badge",alt:"VIP",title:"VIP用户"},C={class:"user-badges"},A=["title"],x=["title"],E={key:2,class:"badge medal"},P={class:"user-sign-container"},M={class:"user-sign"},I={class:"sign-text"},S={class:"user-email"},$={class:"email-text"},X={key:0,class:"badge campus-email"},j={class:"user-stats"},F={class:"stat-value"},T={class:"stat-value"},K={class:"stat-item"},z={class:"stat-value"},O={key:0,class:"modal-overlay"},D={class:"modal-content"},q={class:"modal-header"},N={class:"modal-body"},U={key:0,class:"loading-state"},Q={key:1,class:"empty-state"},R={key:2,class:"user-list"},J={class:"user-meta-wrapper"},W=["onClick"],V={key:0,class:"modal-footer"},B=["disabled"],H={class:"page-info"},G=["disabled"];function Y(t,e,s,n,a,o){const l=(0,i.g2)("UserMeta");return(0,i.uX)(),(0,i.CE)("div",p,[(0,i.Lk)("div",v,[(0,i.Lk)("div",m,[e[11]||(e[11]=(0,i.Lk)("div",{class:"header-bg"},null,-1)),(0,i.Lk)("div",f,[(0,i.Lk)("img",{src:a.userInfo.avatar_path,alt:"用户头像",class:"detail-avatar"},null,8,y),(0,i.Lk)("div",{class:"avatar-edit-overlay",onClick:e[0]||(e[0]=(...t)=>o.triggerFileInput&&o.triggerFileInput(...t))},e[9]||(e[9]=[(0,i.Lk)("i",{class:"edit-icon"},"📷",-1)])),(0,i.Lk)("input",{type:"file",ref:"fileInput",style:{display:"none"},accept:"image/*",onChange:e[1]||(e[1]=(...t)=>o.uploadAvatar&&o.uploadAvatar(...t))},null,544)]),(0,i.Lk)("div",L,[(0,i.Lk)("div",b,[(0,i.Lk)("div",w,[(0,i.eW)((0,k.v_)(a.userInfo.nickname)+" ",1),a.userInfo.is_vip?((0,i.uX)(),(0,i.CE)("img",_)):(0,i.Q3)("",!0)]),(0,i.Lk)("button",{class:"edit-btn",onClick:e[2]||(e[2]=(...t)=>o.editNickname&&o.editNickname(...t)),title:"修改昵称"},e[10]||(e[10]=[(0,i.Lk)("i",{class:"edit-icon"},"✏️",-1)]))]),(0,i.Lk)("div",C,[a.userInfo.verified?((0,i.uX)(),(0,i.CE)("span",{key:0,class:"badge verified",title:a.userInfo.verified},"认证",8,A)):(0,i.Q3)("",!0),a.userInfo.invited?((0,i.uX)(),(0,i.CE)("span",{key:1,class:"badge invited",title:a.userInfo.invited},"特邀",8,x)):(0,i.Q3)("",!0),a.userInfo.medal?((0,i.uX)(),(0,i.CE)("span",E,"小站奖章")):(0,i.Q3)("",!0)])])]),(0,i.Lk)("div",P,[(0,i.Lk)("div",M,[e[13]||(e[13]=(0,i.Lk)("div",{class:"sign-icon"},"✍️",-1)),(0,i.Lk)("div",I,(0,k.v_)(a.userInfo.sign||"这个人很懒,还没有写个性签名~"),1),(0,i.Lk)("button",{class:"edit-btn",onClick:e[3]||(e[3]=(...t)=>o.editSign&&o.editSign(...t)),title:"修改签名"},e[12]||(e[12]=[(0,i.Lk)("i",{class:"edit-icon"},"✏️",-1)]))])]),(0,i.Lk)("div",S,[e[14]||(e[14]=(0,i.Lk)("div",{class:"email-icon"},"📧",-1)),(0,i.Lk)("div",$,(0,k.v_)(a.userInfo.email),1),o.isCampusEmail?((0,i.uX)(),(0,i.CE)("span",X,"校园邮箱")):(0,i.Q3)("",!0)]),(0,i.Lk)("div",j,[(0,i.Lk)("div",{class:"stat-item clickable",onClick:e[4]||(e[4]=t=>o.openList(1))},[(0,i.Lk)("div",F,(0,k.v_)(a.userInfo.follower||0),1),e[15]||(e[15]=(0,i.Lk)("div",{class:"stat-label"},"粉丝",-1))]),e[18]||(e[18]=(0,i.Lk)("div",{class:"stat-separator"},null,-1)),(0,i.Lk)("div",{class:"stat-item clickable",onClick:e[5]||(e[5]=t=>o.openList(0))},[(0,i.Lk)("div",T,(0,k.v_)(a.userInfo.following||0),1),e[16]||(e[16]=(0,i.Lk)("div",{class:"stat-label"},"关注",-1))]),e[19]||(e[19]=(0,i.Lk)("div",{class:"stat-separator"},null,-1)),(0,i.Lk)("div",K,[(0,i.Lk)("div",z,(0,k.v_)(a.userInfo.coin||"未激活"),1),e[17]||(e[17]=(0,i.Lk)("div",{class:"stat-label"},"东币",-1))])])]),a.showListModal?((0,i.uX)(),(0,i.CE)("div",O,[(0,i.Lk)("div",D,[(0,i.Lk)("div",q,[(0,i.Lk)("h3",null,(0,k.v_)(0===a.listMode?"我的关注":"我的粉丝"),1),(0,i.Lk)("button",{class:"close-modal-btn",onClick:e[6]||(e[6]=(...t)=>o.closeList&&o.closeList(...t))},"×")]),(0,i.Lk)("div",N,[a.listLoading?((0,i.uX)(),(0,i.CE)("div",U,"加载中...")):0===a.userList.length?((0,i.uX)(),(0,i.CE)("div",Q,"暂无数据")):((0,i.uX)(),(0,i.CE)("div",R,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(a.userList,(t=>((0,i.uX)(),(0,i.CE)("div",{key:t.user_id,class:"user-list-item"},[(0,i.Lk)("div",J,[(0,i.bF)(l,{id:t.user_id,showFollow:!1},null,8,["id"])]),(0,i.Lk)("button",{class:(0,k.C4)(["list-action-btn",{"btn-cancel":t.is_following,"btn-follow":!t.is_following}]),onClick:e=>o.handleListFollowAction(t)},(0,k.v_)(t.is_following?"取消关注":"关注"),11,W)])))),128))]))]),a.listPagination.pages>1?((0,i.uX)(),(0,i.CE)("div",V,[(0,i.Lk)("button",{class:"page-btn",disabled:1===a.listPagination.current,onClick:e[7]||(e[7]=t=>o.changePage(a.listPagination.current-1))},"上一页",8,B),(0,i.Lk)("span",H,(0,k.v_)(a.listPagination.current)+" / "+(0,k.v_)(a.listPagination.pages),1),(0,i.Lk)("button",{class:"page-btn",disabled:a.listPagination.current===a.listPagination.pages,onClick:e[8]||(e[8]=t=>o.changePage(a.listPagination.current+1))},"下一页",8,G)])):(0,i.Q3)("",!0)])])):(0,i.Q3)("",!0)])}var Z=s(2453),tt=s(6707),et=s(6042),st={name:"UserInfo",components:{UserMeta:et.A},data(){return{userInfo:{id:"",nickname:"加载中...",verified:null,invited:null,medal:!1,avatar_path:"",email:"",sign:"",follower:0,following:0,coin:0},showListModal:!1,listMode:0,userList:[],listLoading:!1,listPagination:{current:1,total:0,pages:1}}},computed:{isCampusEmail(){if(!this.userInfo.email)return!1;const t=["@stu.neu.edu.cn","@stu.neuq.edu.cn","@mails.neu.edu.cn"];return t.some((t=>this.userInfo.email.endsWith(t)))}},created(){this.fetchUserInfo()},methods:{async fetchUserInfo(){try{const t=Z.A.get("token");if(!t)return void this.showMessage("未登录或登录已过期","error");const e=await fetch("https://newfront.xn--xhq44jb2fzpc.com/user/info",{method:"GET",headers:{Authorization:t}});if(!e.ok)throw new Error("获取用户信息失败");const s=await e.json();this.userInfo=s}catch(t){console.error("获取用户信息出错:",t),this.showMessage("获取用户信息失败","error")}},triggerFileInput(){this.$refs.fileInput.click()},async uploadAvatar(t){const e=t.target.files[0];if(!e)return void this.showMessage("请选择一个文件","error");if(e.size>1048576)return void this.showMessage("头像必须小于1MB","error");const s=Z.A.get("token");if(s)try{const t=new FormData;t.append("avatar",e);const i=await fetch("https://userlogin.xn--xhq44jb2fzpc.com/avatar/upload",{method:"POST",headers:{Authorization:s},body:t});if(i.ok){const t=await i.json();this.userInfo.avatar_path=t.avatarUrl,this.showMessage("头像上传成功","success")}else 401===i.status||403===i.status?this.showMessage("权限错误,请重新登录后再试","error"):this.showMessage("上传失败,请稍后再试","error")}catch(i){console.error("头像上传错误:",i),this.showMessage("上传过程中发生错误","error")}else this.showMessage("请先登录,再上传头像","error")},async editNickname(){const t=Z.A.get("token");t?(0,tt.A)({title:"修改昵称",message:"请输入新的昵称:",showInput:!0,inputPlaceholder:"请输入新昵称",inputValue:this.userInfo.nickname,confirmText:"确认",cancelText:"取消",cancel:!0}).then((async({value:e})=>{if(null!==e&&""!==e.trim())try{const s=await fetch("https://userlogin.xn--xhq44jb2fzpc.com/avatar/edit-nickname",{method:"POST",headers:{"Content-Type":"application/json",Authorization:t},body:JSON.stringify({nickname:e.trim()})});if(s.ok){await s.json();this.userInfo.nickname=e.trim(),this.showMessage("昵称修改成功","success")}else{const t=await s.json();this.showMessage(`修改昵称失败:${t.message}`,"error")}}catch(s){console.error("修改昵称错误:",s),this.showMessage("发生错误,请稍后再试","error")}else this.showMessage("昵称不能为空","error")})).catch((()=>{})):this.showMessage("您尚未登录,请登录后再尝试修改昵称","error")},async editSign(){const t=Z.A.get("token");if(!t)return void this.showMessage("您尚未登录,请登录后再尝试修改签名","error");const e=this.userInfo.sign||"";(0,tt.A)({title:"修改个性签名",message:"请输入新的个性签名 (最多20个汉字,留空表示删除个性签名):",showInput:!0,inputValue:e,inputPlaceholder:"请输入个性签名",confirmText:"确认",cancelText:"取消",cancel:!0}).then((async({value:e})=>{if(null!==e)try{const s=await fetch("https://newfront.xn--xhq44jb2fzpc.com/user/sign",{method:"POST",headers:{"Content-Type":"application/json",Authorization:t},body:JSON.stringify({sign:e.trim()})});if(s.ok)this.userInfo.sign=e.trim(),this.showMessage("个性签名修改成功","success");else{const t=await s.json();this.showMessage(`修改签名失败:${t.message}`,"error")}}catch(s){console.error("修改签名错误:",s),this.showMessage("发生错误,请稍后再试","error")}})).catch((()=>{}))},openList(t){this.listMode=t,this.showListModal=!0,this.fetchFollowList(1)},closeList(){this.showListModal=!1,this.userList=[]},async fetchFollowList(t=1){this.listLoading=!0;try{const e=Z.A.get("token");if(!e)return;const s=await fetch("https://newfront.xn--xhq44jb2fzpc.com/user/follow/get",{method:"POST",headers:{"Content-Type":"application/json",Authorization:e},body:JSON.stringify({mode:this.listMode,page_num:t})});if(s.ok){const t=await s.json();this.userList=t.list,this.listPagination.current=t.current_page,this.listPagination.total=t.total,this.listPagination.pages=t.total_pages}else this.showMessage("获取列表失败","error")}catch(e){console.error("获取列表错误:",e),this.showMessage("网络错误","error")}finally{this.listLoading=!1}},async handleListFollowAction(t){const e=t.is_following,s=t.user_id,i=Z.A.get("token");i?e?(0,tt.A)({title:"取消关注",message:"确定取消关注该用户吗?",confirmText:"确定",cancelText:"取消",cancel:!0}).then((async()=>{await this.executeFollowAction(s,!e)})).catch((()=>{})):await this.executeFollowAction(s,!e):this.showMessage("请先登录","error")},async executeFollowAction(t,e){const s=Z.A.get("token");try{const i=await fetch("https://newfront.xn--xhq44jb2fzpc.com/user/follow/do",{method:"POST",headers:{"Content-Type":"application/json",Authorization:s},body:JSON.stringify({user_id:t})});if(i.ok)this.showMessage(e?"关注成功":"取消关注成功","success"),this.fetchFollowList(this.listPagination.current),this.fetchUserInfo();else{const t=await i.json();this.showMessage(t.message||"操作失败","error")}}catch(i){console.error("操作错误:",i),this.showMessage("网络错误","error")}},changePage(t){t<1||t>this.listPagination.pages||this.fetchFollowList(t)},showMessage(t,e="success"){this.$barMessage({message:t,type:e})}}},it=s(6968);const nt=(0,it.A)(st,[["render",Y],["__scopeId","data-v-4ea2fd79"]]);var at=nt;const ot={class:"coin-container"},lt={key:0,class:"not-activated"},rt={class:"alert alert-warning policy-notification"},ct={key:1,class:"activated"},dt={class:"alert alert-warning policy-notification"},ut={class:"coin-info"},ht={class:"coin-amount"},gt={class:"transactions"},kt={key:0,class:"no-records"},pt={key:1,class:"transaction-table"},vt={key:2,class:"pagination"},mt=["disabled"],ft={class:"page-info"},yt=["disabled"];function Lt(t,e,s,n,a,o){return(0,i.uX)(),(0,i.CE)("div",ot,[a.isActivated?((0,i.uX)(),(0,i.CE)("div",ct,[(0,i.Lk)("div",dt,(0,k.v_)(a.policyNotification),1),(0,i.Lk)("div",ut,[(0,i.Lk)("h3",null,[e[3]||(e[3]=(0,i.eW)("您当前拥有 ")),(0,i.Lk)("span",ht,(0,k.v_)(a.coinAmount),1),e[4]||(e[4]=(0,i.eW)(" 枚东币"))])]),(0,i.Lk)("div",gt,[0===a.transactions.length?((0,i.uX)(),(0,i.CE)("div",kt," 暂无交易记录 ")):((0,i.uX)(),(0,i.CE)("table",pt,[e[5]||(e[5]=(0,i.Lk)("thead",null,[(0,i.Lk)("tr",null,[(0,i.Lk)("th",null,"时间"),(0,i.Lk)("th",null,"金额"),(0,i.Lk)("th",null,"备注")])],-1)),(0,i.Lk)("tbody",null,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(a.transactions,(t=>((0,i.uX)(),(0,i.CE)("tr",{key:t.id},[(0,i.Lk)("td",null,(0,k.v_)(o.formatDate(t.created_at)),1),(0,i.Lk)("td",{class:(0,k.C4)({credit:"credit"===t.type,debit:"debit"===t.type})},(0,k.v_)("credit"===t.type?"+":"-")+(0,k.v_)(t.amount),3),(0,i.Lk)("td",null,(0,k.v_)(t.note),1)])))),128))])])),a.totalPages>1?((0,i.uX)(),(0,i.CE)("div",vt,[(0,i.Lk)("button",{disabled:1===a.currentPage,onClick:e[0]||(e[0]=t=>o.loadTransactions(a.currentPage-1)),class:"btn btn-sm btn-outline-primary"}," 上一页 ",8,mt),(0,i.Lk)("span",ft,(0,k.v_)(a.currentPage)+" / "+(0,k.v_)(a.totalPages),1),(0,i.Lk)("button",{disabled:a.currentPage===a.totalPages,onClick:e[1]||(e[1]=t=>o.loadTransactions(a.currentPage+1)),class:"btn btn-sm btn-outline-primary"}," 下一页 ",8,yt)])):(0,i.Q3)("",!0)])])):((0,i.uX)(),(0,i.CE)("div",lt,[(0,i.Lk)("div",rt,(0,k.v_)(a.policyNotification),1),e[2]||(e[2]=(0,i.Lk)("div",{class:"alert alert-info"},[(0,i.Lk)("p",null,"东币系统在账号完成校园验证后自动激活。")],-1))]))])}var bt={name:"CoinComponent",data(){return{isActivated:!1,coinAmount:0,transactions:[],currentPage:1,totalPages:1,policyNotification:"由于政策原因,短信验证码服务已于2025.4.13下线,后续东币系统将在校园验证通过后自动激活。之前已完成校园验证但未手动激活东币系统的用户,系统已为您自动激活东币系统。"}},created(){this.loadTransactions(1)},methods:{async loadTransactions(t){try{const e=Z.A.get("token");if(!e)return console.error("未找到登录token"),void(this.isActivated=!1);const s=await fetch("https://newfront.xn--xhq44jb2fzpc.com/coin/transactions",{method:"POST",headers:{Authorization:e,"Content-Type":"application/json"},body:JSON.stringify({page_num:t})}),i=await s.json();if(s.ok)this.isActivated=!0,this.coinAmount=i.coinAmount,this.transactions=i.transactions,this.currentPage=i.current_page,this.totalPages=i.total_pages;else{if(403!==s.status||"用户未激活东币系统"!==i.message)throw new Error(i.message||"获取交易记录失败");this.isActivated=!1,this.coinAmount=0,this.transactions=[]}}catch(e){console.error("获取交易记录出错:",e),this.isActivated=!1}},formatDate(t){const e=new Date(t);return`${e.getFullYear()}/${e.getMonth()+1}/${e.getDate()} ${e.getHours()}:${String(e.getMinutes()).padStart(2,"0")}:${String(e.getSeconds()).padStart(2,"0")}`}}};const wt=(0,it.A)(bt,[["render",Lt],["__scopeId","data-v-0bd9ed96"]]);var _t=wt,Ct=s(1561);const At={class:"submission-container"},xt={class:"header"},Et={class:"header-buttons"},Pt={key:0,class:"modal-overlay"},Mt={class:"modal-content key-management-modal"},It={class:"modal-header"},St={class:"modal-body"},$t={key:0,class:"key-table-wrapper"},Xt={class:"key-table"},jt={class:"key-cell"},Ft={class:"key-content"},Tt=["onClick"],Kt={key:0,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round",width:"24",height:"24","stroke-width":"1.1"},zt={key:1,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round",width:"24",height:"24","stroke-width":"1.1"},Ot={key:1,class:"loading-keys"},Dt={key:2,class:"empty-keys"},qt={key:1,class:"modal-overlay"},Nt={class:"modal-content exchange-key-modal"},Ut={class:"modal-header"},Qt={class:"modal-body"},Rt={class:"form-group"},Jt={class:"form-group"},Wt={class:"form-actions"},Vt=["disabled"],Bt={class:"submission-table-wrapper"},Ht={key:0,class:"submission-table"},Gt={key:0},Yt=["onClick"],Zt={class:"title-cell"},te={key:0},ee={key:1,class:"status-unknown"},se={class:"action-buttons"},ie=["onClick"],ne=["onClick"],ae={key:1,class:"empty-state"},oe={key:2,class:"pagination"},le=["disabled"],re={class:"page-info"},ce=["disabled"];function de(t,e,s,n,a,o){return(0,i.uX)(),(0,i.CE)("div",At,[(0,i.Lk)("div",xt,[e[10]||(e[10]=(0,i.Lk)("h3",{class:"title"},"我的投稿记录",-1)),(0,i.Lk)("div",Et,[(0,i.Lk)("button",{class:"key-manage-btn",onClick:e[0]||(e[0]=t=>a.showKeyManagement=!0)},"密钥管理"),(0,i.Lk)("button",{class:"manage-btn",onClick:e[1]||(e[1]=(...t)=>o.handleManage&&o.handleManage(...t))},"我要投稿")])]),a.showKeyManagement?((0,i.uX)(),(0,i.CE)("div",Pt,[(0,i.Lk)("div",Mt,[(0,i.Lk)("div",It,[e[11]||(e[11]=(0,i.Lk)("h3",null,"密钥管理",-1)),(0,i.Lk)("button",{class:"close-btn",onClick:e[2]||(e[2]=t=>a.showKeyManagement=!1)},"×")]),(0,i.Lk)("div",St,[(0,i.Lk)("button",{class:"exchange-key-btn",onClick:e[3]||(e[3]=t=>a.showExchangeKey=!0)},"兑换密钥"),a.keyList.length>0?((0,i.uX)(),(0,i.CE)("div",$t,[(0,i.Lk)("table",Xt,[e[14]||(e[14]=(0,i.Lk)("thead",null,[(0,i.Lk)("tr",null,[(0,i.Lk)("th",null,"密钥"),(0,i.Lk)("th",null,"状态"),(0,i.Lk)("th",null,"创建时间"),(0,i.Lk)("th",null,"最后使用时间")])],-1)),(0,i.Lk)("tbody",null,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(a.keyList,((t,s)=>((0,i.uX)(),(0,i.CE)("tr",{key:s},[(0,i.Lk)("td",jt,[(0,i.Lk)("div",Ft,[(0,i.Lk)("span",null,(0,k.v_)(a.visibleKeyIndex===s?t.key_plaintext:"******"),1),(0,i.Lk)("button",{class:"toggle-visibility",onClick:t=>o.toggleKeyVisibility(s)},[a.visibleKeyIndex!==s?((0,i.uX)(),(0,i.CE)("svg",Kt,e[12]||(e[12]=[(0,i.Lk)("path",{d:"M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0"},null,-1),(0,i.Lk)("path",{d:"M21 12c-2.4 4 -5.4 6 -9 6c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6"},null,-1)]))):((0,i.uX)(),(0,i.CE)("svg",zt,e[13]||(e[13]=[(0,i.Lk)("path",{d:"M10.585 10.587a2 2 0 0 0 2.829 2.828"},null,-1),(0,i.Lk)("path",{d:"M16.681 16.673a8.717 8.717 0 0 1 -4.681 1.327c-3.6 0 -6.6 -2 -9 -6c1.272 -2.12 2.712 -3.678 4.32 -4.674m2.86 -1.146a9.055 9.055 0 0 1 1.82 -.18c3.6 0 6.6 2 9 6c-.666 1.11 -1.379 2.067 -2.138 2.87"},null,-1),(0,i.Lk)("path",{d:"M3 3l18 18"},null,-1)])))],8,Tt)])]),(0,i.Lk)("td",null,[(0,i.Lk)("span",{class:(0,k.C4)(t.is_valid?"status-valid":"status-invalid")},(0,k.v_)(t.is_valid?"有效":"无效"),3)]),(0,i.Lk)("td",null,(0,k.v_)(o.formatDate(t.created_at)),1),(0,i.Lk)("td",null,(0,k.v_)(t.last_used_at?o.formatDate(t.last_used_at):"未使用"),1)])))),128))])])])):a.loadingKeyList?((0,i.uX)(),(0,i.CE)("div",Ot," 加载中... ")):((0,i.uX)(),(0,i.CE)("div",Dt,e[15]||(e[15]=[(0,i.Lk)("p",null,"暂无密钥记录",-1)])))])])])):(0,i.Q3)("",!0),a.showExchangeKey?((0,i.uX)(),(0,i.CE)("div",qt,[(0,i.Lk)("div",Nt,[(0,i.Lk)("div",Ut,[e[16]||(e[16]=(0,i.Lk)("h3",null,"兑换密钥",-1)),(0,i.Lk)("button",{class:"close-btn",onClick:e[4]||(e[4]=t=>a.showExchangeKey=!1)},"×")]),(0,i.Lk)("div",Qt,[(0,i.Lk)("div",Rt,[e[17]||(e[17]=(0,i.Lk)("label",{for:"invite-code"},"邀请码",-1)),(0,i.bo)((0,i.Lk)("input",{id:"invite-code","onUpdate:modelValue":e[5]||(e[5]=t=>a.exchangeForm.invite_code=t),type:"text",placeholder:"输入邀请码"},null,512),[[Ct.Jo,a.exchangeForm.invite_code]])]),(0,i.Lk)("div",Jt,[e[18]||(e[18]=(0,i.Lk)("label",{for:"custom-key"},"自定义密钥",-1)),(0,i.bo)((0,i.Lk)("input",{id:"custom-key","onUpdate:modelValue":e[6]||(e[6]=t=>a.exchangeForm.key=t),type:"text",placeholder:"输入您的自定义密钥"},null,512),[[Ct.Jo,a.exchangeForm.key]])]),(0,i.Lk)("div",Wt,[(0,i.Lk)("button",{class:"submit-btn",disabled:!a.exchangeForm.invite_code||!a.exchangeForm.key||a.submitting,onClick:e[7]||(e[7]=(...t)=>o.exchangeKey&&o.exchangeKey(...t))},(0,k.v_)(a.submitting?"处理中...":"确认兑换"),9,Vt)])])])])):(0,i.Q3)("",!0),(0,i.Lk)("div",Bt,[a.submissions.length>0?((0,i.uX)(),(0,i.CE)("table",Ht,[(0,i.Lk)("thead",null,[(0,i.Lk)("tr",null,[e[19]||(e[19]=(0,i.Lk)("th",null,"标题",-1)),e[20]||(e[20]=(0,i.Lk)("th",null,"板块",-1)),e[21]||(e[21]=(0,i.Lk)("th",null,"审核状态",-1)),a.setPrivate?((0,i.uX)(),(0,i.CE)("th",Gt,"文章权限")):(0,i.Q3)("",!0),e[22]||(e[22]=(0,i.Lk)("th",null,"审核备注",-1)),e[23]||(e[23]=(0,i.Lk)("th",null,"投稿时间",-1)),e[24]||(e[24]=(0,i.Lk)("th",null,"状态更新时间",-1)),e[25]||(e[25]=(0,i.Lk)("th",null,"操作",-1))])]),(0,i.Lk)("tbody",null,[((0,i.uX)(!0),(0,i.CE)(i.FK,null,(0,i.pI)(a.submissions,(t=>((0,i.uX)(),(0,i.CE)("tr",{key:t.id,class:(0,k.C4)({clickable:t.article_id}),onClick:e=>t.article_id&&o.navigateToArticle(t.article_id)},[(0,i.Lk)("td",Zt,(0,k.v_)(t.title),1),(0,i.Lk)("td",null,(0,k.v_)(t.section),1),(0,i.Lk)("td",null,[(0,i.Lk)("span",{class:(0,k.C4)(o.getStatusClass(t.status))},(0,k.v_)(t.status),3)]),a.setPrivate?((0,i.uX)(),(0,i.CE)("td",te,["已通过"===t.status&&t.hasOwnProperty("is_public")?((0,i.uX)(),(0,i.CE)("span",{key:0,class:(0,k.C4)(t.is_public?"status-public":"status-private")},(0,k.v_)(t.is_public?"公开":"私密"),3)):((0,i.uX)(),(0,i.CE)("span",ee,"-"))])):(0,i.Q3)("",!0),(0,i.Lk)("td",null,(0,k.v_)(t.note||"无"),1),(0,i.Lk)("td",null,(0,k.v_)(o.formatDate(t.created_at)),1),(0,i.Lk)("td",null,(0,k.v_)(o.formatDate(t.updated_at)),1),(0,i.Lk)("td",null,[(0,i.Lk)("div",se,["已通过"===t.status&&t.article_id&&t.owner?((0,i.uX)(),(0,i.CE)("button",{key:0,class:"edit-btn",onClick:(0,Ct.D$)((e=>o.navigateToEdit(t.article_id)),["stop"])}," 编辑 ",8,ie)):(0,i.Q3)("",!0),a.setPrivate&&"已通过"===t.status&&t.article_id&&t.owner&&t.hasOwnProperty("is_public")?((0,i.uX)(),(0,i.CE)("button",{key:1,class:(0,k.C4)(t.is_public?"private-btn":"public-btn"),onClick:(0,Ct.D$)((e=>o.toggleArticleAccess(t)),["stop"])},(0,k.v_)(t.is_public?"设为私密":"设为公开"),11,ne)):(0,i.Q3)("",!0)])])],10,Yt)))),128))])])):((0,i.uX)(),(0,i.CE)("div",ae,e[26]||(e[26]=[(0,i.Lk)("p",null,"暂无投稿记录",-1)]))),a.totalPages>1?((0,i.uX)(),(0,i.CE)("div",oe,[(0,i.Lk)("button",{disabled:1===a.currentPage,onClick:e[8]||(e[8]=t=>o.loadSubmissions(a.currentPage-1)),class:"page-btn"}," 上一页 ",8,le),(0,i.Lk)("span",re,(0,k.v_)(a.currentPage)+" / "+(0,k.v_)(a.totalPages),1),(0,i.Lk)("button",{disabled:a.currentPage===a.totalPages,onClick:e[9]||(e[9]=t=>o.loadSubmissions(a.currentPage+1)),class:"page-btn"}," 下一页 ",8,ce)])):(0,i.Q3)("",!0)])])}var ue={name:"SubmissionList",data(){return{submissions:[],currentPage:1,totalPages:1,totalSubmissions:0,loading:!1,setPrivate:!1,inRank:!0,updatingRank:!1,loadingKeyList:!1,showKeyManagement:!1,showExchangeKey:!1,keyList:[],visibleKeyIndex:-1,exchangeForm:{invite_code:"",key:""},submitting:!1}},created(){this.loadSubmissions(1)},methods:{async loadSubmissions(t){this.loading=!0;try{const e=Z.A.get("token");if(!e)return void console.error("未找到登录token");const s=await fetch("https://newfront.xn--xhq44jb2fzpc.com/user/submission",{method:"POST",headers:{Authorization:e,"Content-Type":"application/json"},body:JSON.stringify({page_num:t})});if(!s.ok)throw new Error("获取投稿记录失败");const i=await s.json();this.submissions=i.submissions,this.currentPage=i.current_page,this.totalPages=i.total_pages,this.totalSubmissions=i.total_submissions,this.setPrivate=i.set_private||!1,i.hasOwnProperty("in_rank")&&(this.inRank=i.in_rank)}catch(e){console.error("获取投稿记录出错:",e)}finally{this.loading=!1}},async updateRankingStatus(){const t=new Date,e=new Date(t);e.setHours(t.getHours()+1);const s=`${e.getHours()}:00`,i=this.inRank,n=i?`您确认参与投稿排行榜吗?如确认,榜单将在下次更新时(${s})显示您。`:`您确认退出投稿排行榜吗?如确认,榜单将在下次更新时(${s})不再显示您。`;try{await tt.A.confirm(n,"提示"),this.updatingRank=!0;const t=Z.A.get("token");if(!t)return tt.A.alert("未找到登录token","错误"),void(this.inRank=!this.inRank);const e=await fetch("https://newfront.xn--xhq44jb2fzpc.com/ranking/in",{method:"POST",headers:{Authorization:t,"Content-Type":"application/json"},body:JSON.stringify({in:this.inRank})});if(!e.ok)throw new Error("更新设置失败");await e.json();const s=i?"参与":"退出";this.$barMessage.success(`您已成功${s}投稿排行榜!`)}catch(a){if(this.inRank=!this.inRank,"cancel"===a||a&&"cancel"===a.action)return;console.error("更新排行榜设置失败:",a),tt.A.alert("更新设置失败,请稍后重试","错误")}finally{this.updatingRank=!1}},handleManage(){console.log("点击了作品管理按钮"),this.$emit("manage-works")},navigateToArticle(t){this.$router.push(`/article/${t}`)},navigateToEdit(t){const e=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||window.innerWidth<768;e?tt.A.confirm("建议在电脑端进行编辑以获得最佳体验。仍要继续吗?","提示").then((()=>{this.$router.push(`/edit?article=${t}`)})).catch((()=>{console.log("用户取消了在移动端编辑")})):this.$router.push(`/edit?article=${t}`)},formatDate(t){if(!t)return"未知";const e=new Date(t);return`${e.getFullYear()}/${e.getMonth()+1}/${e.getDate()} ${e.getHours()}:${String(e.getMinutes()).padStart(2,"0")}:${String(e.getSeconds()).padStart(2,"0")}`},getStatusClass(t){switch(t){case"已通过":return"status-approved";case"审核中":return"status-pending";case"未通过":return"status-rejected";default:return""}},async loadKeyList(){this.loadingKeyList=!0;try{const t=Z.A.get("token");if(!t)return void console.error("未找到登录token");const e=await fetch("https://newfront.xn--xhq44jb2fzpc.com/encrypt/getcode",{method:"GET",headers:{Authorization:t,"Content-Type":"application/json"}});if(!e.ok)throw new Error("获取密钥列表失败");const s=await e.json();if(!s.success)throw new Error(s.message||"获取密钥列表失败");this.keyList=s.data||[]}catch(t){console.error("获取密钥列表出错:",t),tt.A.alert(t.message||"获取密钥列表失败,请稍后再试","错误")}finally{this.loadingKeyList=!1}},toggleKeyVisibility(t){this.visibleKeyIndex===t?this.visibleKeyIndex=-1:this.visibleKeyIndex=t},async exchangeKey(){if(this.exchangeForm.invite_code&&this.exchangeForm.key){this.submitting=!0;try{const t=Z.A.get("token");if(!t)return void console.error("未找到登录token");const e=await fetch("https://newfront.xn--xhq44jb2fzpc.com/encrypt/setcode",{method:"POST",headers:{Authorization:t,"Content-Type":"application/json"},body:JSON.stringify(this.exchangeForm)}),s=await e.json();if(!s.success)throw new Error(s.message||"密钥兑换失败");tt.A.alert("密钥兑换成功","提示"),this.showExchangeKey=!1,this.exchangeForm.invite_code="",this.exchangeForm.key="",this.loadKeyList()}catch(t){console.error("密钥兑换出错:",t),tt.A.alert(t.message||"密钥兑换失败,请稍后再试","错误")}finally{this.submitting=!1}}else tt.A.alert("请输入邀请码和密钥","提示")},async checkAndFillInviteCode(){try{const t=Z.A.get("token");if(!t)return;const e=await fetch("https://newfront.xn--xhq44jb2fzpc.com/encrypt/invite",{method:"GET",headers:{Authorization:t,"Content-Type":"application/json"}});if(e.ok){const t=await e.json();t.success&&t.invite_code&&(this.exchangeForm.invite_code=t.invite_code,this.$barMessage.success("检测到您具有未使用的邀请码,已自动填充"))}}catch(t){console.error("获取邀请码失败:",t)}},async toggleArticleAccess(t){if(!t.article_id)return void tt.A.alert("无效的文章ID","错误");const e=t.is_public?"设为私密":"设为公开";try{await tt.A.confirm(`确认要将文章《${t.title}》${e}吗?`,"确认操作");const s=Z.A.get("token");if(!s)return void tt.A.alert("请先登录","提示");const i=await fetch("https://newfront.xn--xhq44jb2fzpc.com/user/access",{method:"POST",headers:{Authorization:s,"Content-Type":"application/json"},body:JSON.stringify({article_id:t.article_id})});if(!i.ok){const t=await i.json().catch((()=>({})));throw new Error(t.message||"操作失败")}const n=await i.json();t.is_public=n.is_public,this.$barMessage.success(n.message||"操作成功")}catch(s){if("cancel"===s.action)return;console.error("切换文章访问权限失败:",s),this.$barMessage.error(s.message||"操作失败,请稍后再试")}}},watch:{showExchangeKey(t){t&&this.checkAndFillInviteCode()},showKeyManagement(t){t?this.loadKeyList():this.visibleKeyIndex=-1}}};const he=(0,it.A)(ue,[["render",de],["__scopeId","data-v-68797b30"]]);var ge=he,ke=s(122),pe={name:"UserCenter",components:{Navbar:g.A,UserInfo:at,Coin:_t,SubmissionList:ge},data(){return{isAuthenticated:!1,isLoading:!0}},created(){document.title="个人中心 - NEU小站"},mounted(){this.checkAuthAndFetchUserInfo()},methods:{async checkAuthAndFetchUserInfo(){const t=Z.A.get("token");if(!t)return this.isLoading=!1,"/user-center"===this.$route.path?void this.$router.replace("/login"):void("/login"===this.$route.path&&this.showLoginDialog());try{const e=await fetch("https://newfront.xn--xhq44jb2fzpc.com/user/islogin",{method:"GET",headers:{Authorization:t}});if(!e.ok)throw new Error("Token 验证失败");const s=await e.json();if(!s||!s.isLoggedIn)throw new Error("Token 验证成功但返回状态不正确");{this.isAuthenticated=!0;const e=new URLSearchParams(window.location.search);if("wordhelper"===e.get("lg_callback"))return void(window.location.href=`https://wh.ember.ac.cn/login-required?cb_token=${t}`)}this.isLoading=!1,"/login"===this.$route.path&&this.$router.replace("/user-center")}catch(e){if(console.error("获取用户信息出错:",e),this.isLoading=!1,Z.A.remove("token"),"/user-center"===this.$route.path)return void this.$router.replace("/login");"/login"===this.$route.path&&this.showLoginDialog()}},showLoginDialog(){(0,ke.A)().then((t=>{console.log("登录成功:",t),this.isAuthenticated=!0,this.$router.replace("/user-center")})).catch((t=>{console.log("登录取消:",t)}))},handleManageWorks(){const t=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||window.innerWidth<768;t?tt.A.confirm("建议在电脑端进行投稿以获得最佳体验。仍要继续吗?","提示").then((()=>{this.$router.push("/submit")})).catch((()=>{console.log("用户取消了在移动端投稿")})):this.$router.push("/submit")}}};const ve=(0,it.A)(pe,[["render",h],["__scopeId","data-v-5c494a02"]]);var me=ve}}]);
+//# sourceMappingURL=150.b39c3e77.js.map
\ No newline at end of file
diff --git a/dist/js/app.5df77a6c.js b/dist/js/app.5d973a4f.js
similarity index 98%
rename from dist/js/app.5df77a6c.js
rename to dist/js/app.5d973a4f.js
index 3d0bcdf..160366b 100644
--- a/dist/js/app.5df77a6c.js
+++ b/dist/js/app.5d973a4f.js
@@ -1,2 +1,2 @@
-(function(){"use strict";var e={122:function(e,t,s){s.d(t,{A:function(){return x}});var a=s(1561),n=s(1411),o=s(2515);const i={key:0,class:"login-container"},l={class:"login-box"},r={class:"login-header"},c={class:"form-group"},d={class:"form-group"},u={class:"button-group"},h={class:"modal-content"},g={class:"modal-header"},p={class:"modal-body"},m={class:"captcha-instruction"},f={class:"form-group"},v={class:"modal-footer"},k={key:0,class:"loading-overlay"};function b(e,t,s,b,y,w){return s.visible?((0,n.uX)(),(0,n.CE)("div",i,[t[13]||(t[13]=(0,n.Lk)("div",{class:"login-overlay"},null,-1)),(0,n.Lk)("div",l,[(0,n.Lk)("div",r,[t[8]||(t[8]=(0,n.Lk)("h2",{class:"login-title"},"登录/注册",-1)),s.showClose?((0,n.uX)(),(0,n.CE)("button",{key:0,onClick:t[0]||(t[0]=(...e)=>w.handleClose&&w.handleClose(...e)),class:"close-btn"},"×")):(0,n.Q3)("",!0)]),(0,n.Lk)("form",{onSubmit:t[4]||(t[4]=(0,a.D$)(((...e)=>w.handleSubmit&&w.handleSubmit(...e)),["prevent"])),class:"login-form"},[(0,n.Lk)("div",c,[t[9]||(t[9]=(0,n.Lk)("label",{for:"email"},"邮箱",-1)),(0,n.bo)((0,n.Lk)("input",{type:"email",id:"email","onUpdate:modelValue":t[1]||(t[1]=e=>y.email=e),placeholder:"请输入邮箱地址",required:"",class:"form-input",pattern:"[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}$",title:"请输入有效的邮箱地址"},null,512),[[a.Jo,y.email]])]),(0,n.Lk)("div",d,[t[10]||(t[10]=(0,n.Lk)("label",{for:"password"},"密码",-1)),(0,n.bo)((0,n.Lk)("input",{type:"password",id:"password","onUpdate:modelValue":t[2]||(t[2]=e=>y.password=e),placeholder:"请输入密码",required:"",class:"form-input"},null,512),[[a.Jo,y.password]])]),y.message?((0,n.uX)(),(0,n.CE)("div",{key:0,class:(0,o.C4)(["message",{error:y.messageIsError,success:!y.messageIsError}])},(0,o.v_)(y.message),3)):(0,n.Q3)("",!0),(0,n.Lk)("div",u,[(0,n.Lk)("button",{type:"button",onClick:t[3]||(t[3]=(...e)=>w.login&&w.login(...e)),class:"btn btn-primary"},"登录/注册")])],32)]),(0,n.Lk)("div",{class:(0,o.C4)(["modal",{show:y.showCaptchaModal}])},[(0,n.Lk)("div",h,[(0,n.Lk)("div",g,[t[11]||(t[11]=(0,n.Lk)("h3",null,"邮箱验证",-1)),(0,n.Lk)("button",{onClick:t[5]||(t[5]=(...e)=>w.closeCaptchaModal&&w.closeCaptchaModal(...e)),class:"close-btn"},"×")]),(0,n.Lk)("div",p,[(0,n.Lk)("p",m,(0,o.v_)(y.captchaInstruction),1),(0,n.Lk)("div",f,[(0,n.bo)((0,n.Lk)("input",{type:"text","onUpdate:modelValue":t[6]||(t[6]=e=>y.captchaCode=e),placeholder:"请输入验证码",class:"form-input"},null,512),[[a.Jo,y.captchaCode]])]),y.captchaMessage?((0,n.uX)(),(0,n.CE)("div",{key:0,class:(0,o.C4)(["captcha-message",{error:y.captchaMessageIsError,success:!y.captchaMessageIsError}])},(0,o.v_)(y.captchaMessage),3)):(0,n.Q3)("",!0)]),(0,n.Lk)("div",v,[(0,n.Lk)("button",{onClick:t[7]||(t[7]=(...e)=>w.verifyCaptcha&&w.verifyCaptcha(...e)),class:"btn btn-primary"},"验证")])])],2),y.loading?((0,n.uX)(),(0,n.CE)("div",k,[t[12]||(t[12]=(0,n.Lk)("div",{class:"spinner"},null,-1)),(0,n.Lk)("p",null,(0,o.v_)(y.loadingMessage),1)])):(0,n.Q3)("",!0)])):(0,n.Q3)("",!0)}var y=s(6707),w=s(8194),C=s.n(w),L={name:"Login",props:{visible:{type:Boolean,default:!0},showClose:{type:Boolean,default:!1},onSuccess:{type:Function,default:null},onClose:{type:Function,default:null}},data(){return{email:"",password:"",message:"",messageIsError:!0,loading:!1,loadingMessage:"加载中...",showCaptchaModal:!1,captchaCode:"",captchaMessage:"",captchaMessageIsError:!0,captchaInstruction:"验证码已发送至您的邮箱,请在下方输入"}},methods:{detectDevice(){try{const e=C().getParser(window.navigator.userAgent),t=e.getOS(),s=e.getBrowser();let a=t.name||"Unknown";return t.version&&(a+=` ${t.version}`),s.name&&(a+=` / ${s.name}`,s.version&&(a+=` ${s.version}`)),a}catch(e){return console.error("Device detection failed:",e),"Unknown"}},async handleSubmit(){await this.login()},handleClose(){this.onClose?this.onClose():this.$emit("close")},async login(){if(!this.email||!this.password)return this.message="请输入邮箱和密码",void(this.messageIsError=!0);const e=/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;if(!e.test(this.email))return this.message="请输入有效的邮箱地址",void(this.messageIsError=!0);this.loading=!0,this.loadingMessage="登录中...";try{const e=await this.loginOrRegister(this.email,this.password,"login");"Login successful."===e.message?this.handleLoginSuccess(e):"User not registered."===e.message?(this.loading=!1,(0,y.A)({title:"邮箱未注册",message:'此邮箱没有注册。点击"发送"按钮将向您的邮箱发送注册验证码。',confirmText:"发送",cancelText:"取消",cancel:!0,closeOnClickOverlay:!0}).then((async()=>{await this.sendRegisterCode()})).catch((()=>{}))):"Invalid email or password."===e.message?(this.message="密码错误。",this.messageIsError=!0,this.loading=!1):(this.message=e.message||"登录失败,请重试。",this.messageIsError=!0,this.loading=!1)}catch(t){console.error("Error:",t),this.message="发生错误,请稍后重试。",this.messageIsError=!0,this.loading=!1}},async register(){if(!this.email||!this.password)return this.message="请输入邮箱和密码",void(this.messageIsError=!0);const e=/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;if(!e.test(this.email))return this.message="请输入有效的邮箱地址",void(this.messageIsError=!0);await this.sendRegisterCode()},async sendRegisterCode(){this.loading=!0,this.loadingMessage="发送验证码中...";try{const e=await this.loginOrRegister(this.email,this.password,"register");"Verification email sent."===e.message?(this.captchaInstruction="验证码已发送至您的邮箱,请在下方输入",this.captchaMessage="",this.captchaCode="",this.showCaptchaModal=!0):"A valid code has already been sent. Please try again later."===e.message?(this.captchaInstruction="您还有未验证的验证码,请查看邮箱并在下方输入",this.captchaMessage="",this.captchaCode="",this.showCaptchaModal=!0):"Email is already registered."===e.message?(this.message="此邮箱已注册。",this.messageIsError=!0):(this.message="发送验证码失败,请稍后重试。",this.messageIsError=!0),this.loading=!1}catch(e){console.error("Error:",e),this.message="发生错误,请稍后重试。",this.messageIsError=!0,this.loading=!1}},async verifyCaptcha(){if(!this.captchaCode)return this.captchaMessage="请输入验证码",void(this.captchaMessageIsError=!0);try{const e=await this.verifyRegisterCode(this.email,this.captchaCode);"User registered successfully."===e.message?(this.captchaMessage="验证成功!",this.captchaMessageIsError=!1,setTimeout((()=>{this.closeCaptchaModal(),this.handleSuccessfulRegistration()}),1500)):(this.captchaMessage="您的验证码不正确",this.captchaMessageIsError=!0)}catch(e){console.error("Error:",e),this.captchaMessage="验证过程中发生错误,请重试",this.captchaMessageIsError=!0}},closeCaptchaModal(){this.showCaptchaModal=!1,this.captchaCode="",this.captchaMessage=""},async handleSuccessfulRegistration(){this.message="注册成功!正在登录...",this.messageIsError=!1,this.loading=!0,this.loadingMessage="登录中...",await this.delay(1e3);try{const e=await this.loginOrRegister(this.email,this.password,"login");"Login successful."===e.message?this.handleLoginSuccess(e):(this.message="注册成功,但自动登录失败,请手动登录。",this.messageIsError=!0,this.loading=!1)}catch(e){console.error("Error during login after registration:",e),this.message="注册成功,但自动登录失败,请手动登录。",this.messageIsError=!0,this.loading=!1}},handleLoginSuccess(e){const t=e.token,s=window.location.hostname.includes("localhost")?"localhost":window.location.hostname.split(".").slice(-2).join(".");document.cookie=`token=${t}; max-age=604740; path=/; domain=${s}; secure; SameSite=Strict`,this.loading=!1,this.message="登录成功!正在加载中...",this.messageIsError=!1;const a=new URLSearchParams(window.location.search);if("wordhelper"===a.get("lg_callback"))return void setTimeout((()=>{window.location.href=`https://wh.ember.ac.cn/login-required?cb_token=${t}`}),1e3);const n={email:this.email,userId:e.id,token:e.token};this.onSuccess&&(this.onSuccess(n),window.location.reload()),this.$emit("login-success",n),this.onClose&&setTimeout((()=>{this.handleClose()}),3e3)},async loginOrRegister(e,t,s){const a="login"===s?"https://userlogin.xn--xhq44jb2fzpc.com/login":"https://userlogin.xn--xhq44jb2fzpc.com/register",n={email:e,password:t};"login"===s&&(n.device=this.detectDevice());const o=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});return o.json()},async verifyRegisterCode(e,t){const s="https://userlogin.xn--xhq44jb2fzpc.com/verify-register-code",a=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e,code:t})});return a.json()},delay(e){return new Promise((t=>setTimeout(t,e)))}}},_=s(6968);const E=(0,_.A)(L,[["render",b],["__scopeId","data-v-6a420ba9"]]);var A=E;const I=(e={})=>new Promise(((t,s)=>{const n=document.createElement("div");document.body.appendChild(n);const o=(0,a.Ef)(A,{...e,visible:!0,showClose:!0,onSuccess:e=>{t(e)},onClose:()=>{o.unmount(),document.body.removeChild(n)}});o.mount(n)}));I.withCallback=(e,t={})=>I({...t,onSuccess:t=>{e(t)}});var x=I},1424:function(e,t,s){s.d(t,{A:function(){return f}});s(4945);var a=s(1411),n=s(1561),o=s(2515);const i={class:"bar-message-text"};function l(e,t,s,l,r,c){return(0,a.uX)(),(0,a.Wv)(n.eB,{name:"bar-message-fade"},{default:(0,a.k6)((()=>[r.visible?((0,a.uX)(),(0,a.CE)("div",{key:0,class:"bar-message",style:(0,o.Tr)(c.positionStyle)},[(0,a.Lk)("div",{class:(0,o.C4)(["bar-message-content",r.customColor?"":r.type]),style:(0,o.Tr)({backgroundColor:r.customColor})},[r.showIcon?((0,a.uX)(),(0,a.CE)("i",{key:0,class:(0,o.C4)(["bar-message-icon",c.iconClass])},null,2)):(0,a.Q3)("",!0),(0,a.Lk)("span",i,(0,o.v_)(r.message),1),r.showClose?((0,a.uX)(),(0,a.CE)("i",{key:1,class:"bar-message-close fas fa-times",onClick:t[0]||(t[0]=(...e)=>c.close&&c.close(...e))})):(0,a.Q3)("",!0)],6)],4)):(0,a.Q3)("",!0)])),_:1})}var r={name:"BarMessage",data(){return{visible:!1,message:"",type:"success",customColor:"",timer:null,duration:3e3,position:"top",showIcon:!0,showClose:!1}},computed:{positionStyle(){return"bottom"===this.position?{top:"auto",bottom:"16px"}:"center"===this.position?{top:"50%",transform:"translate(-50%, -50%)"}:{top:"16px",bottom:"auto"}},iconClass(){switch(this.type){case"success":return"fas fa-check-circle";case"error":return"fas fa-times-circle";case"warning":return"fas fa-exclamation-circle";case"info":return"fas fa-info-circle";default:return"fas fa-bell"}}},methods:{show(e){this.timer&&clearTimeout(this.timer),this.message=e.message||"",this.type=e.type||"success",this.customColor=e.color||"",this.duration=void 0!==e.duration?e.duration:3e3,this.position=e.position||"top",this.showIcon=void 0===e.showIcon||e.showIcon,this.showClose=void 0!==e.showClose&&e.showClose,this.visible=!0,this.duration>0&&(this.timer=setTimeout((()=>{this.close()}),this.duration))},close(){this.visible=!1,this.timer&&(clearTimeout(this.timer),this.timer=null),this.onClose&&this.onClose()}}},c=s(6968);const d=(0,c.A)(r,[["render",l],["__scopeId","data-v-145fa924"]]);var u=d;const h=[];let g=1;const p=function(e){"string"===typeof e&&(e={message:e}),e=e||{};const t="bar_message_"+g++,s=document.createElement("div"),o=e.onClose;e.onClose=()=>{m(t,o)};const i=(0,a.bF)(u,e);(0,n.XX)(i,s),document.body.appendChild(s);const l=i.component.proxy;l.show(e);const r={id:t,vnode:i,vm:l,container:s};return h.push(r),{close:()=>{l.close()}}};function m(e,t){const s=h.findIndex((t=>t.id===e));if(-1===s)return;const{vm:a,container:o}=h[s];a&&("function"===typeof t&&t(),(0,n.XX)(null,o),document.body.removeChild(o),h.splice(s,1))}["success","error","warning","info"].forEach((e=>{p[e]=t=>("string"===typeof t?t={message:t,type:e}:(t=t||{},t.type=e),p(t))})),p.permanent=e=>("string"===typeof e&&(e={message:e}),e=e||{},e.duration=0,e.showClose=!1!==e.showClose,p(e)),p.closeAll=function(){for(let e=h.length-1;e>=0;e--)h[e].vm.close()};var f=p},4493:function(e,t,s){s.d(t,{A:function(){return Le}});var a=s(1411),n=s(2515),o=s(1561);const i={class:"container"},l=["src"],r={key:0},c=["src"],d={class:"burger-container"},u={key:0,class:"unread-dot burger-badge"},h={class:"navbar-end"},g={key:0,class:"navbar-item user-dropdown",style:{padding:"0"}},p={class:"avatar-wrapper"},m=["src","alt"],f={key:0,class:"unread-dot avatar-badge"},v={class:"user-nickname"},k={class:"dropdown-menu"},b={key:0,class:"unread-dot"},y={key:1,class:"navbar-item"},w={key:0,class:"activation-dialog"},C={class:"activation-dialog-content"},L={class:"activation-methods"},_={class:"activation-method"},E={class:"activation-method"},A={class:"activation-method"},I=["disabled"],x={key:1,class:"message-modal"},M={class:"message-modal-content"},X={class:"message-modal-header"},P={class:"message-modal-body",ref:"messageContainer"},S={key:0,class:"no-messages"},j={key:1,class:"message-list"},z={class:"message-header"},F={class:"message-time"},q={key:0,class:"unread-tag"},U=["innerHTML"],T={key:1,class:"message-content"},D=["href"],W={key:1},$={key:2,class:"message-content"},Q=["href"],O={key:1},V={key:3,class:"message-content"},B=["href"],N={key:1},R={key:4,class:"message-content"},J={key:5,class:"message-content"},Y=["href"],Z={key:1},G={key:6,class:"message-content"},K=["href"],H={key:1},ee={key:7,class:"message-content"},te=["href"],se={key:1},ae={key:8,class:"message-content"},ne={style:{"margin-top":"8px"}},oe={key:9,class:"message-content"},ie={style:{display:"inline-block","vertical-align":"middle",margin:"0 4px"}},le={style:{"margin-top":"8px"}},re=["href"],ce={key:10,class:"message-content"},de={key:2,class:"pagination"},ue=["disabled"],he={class:"page-info"},ge=["disabled"];function pe(e,t,s,pe,me,fe){const ve=(0,a.g2)("router-link"),ke=(0,a.g2)("UserMeta");return(0,a.uX)(),(0,a.CE)("nav",{class:(0,n.C4)(["navbar",{"navbar-kaoyan":me.kaoyan}])},[(0,a.Lk)("div",i,[(0,a.Lk)("div",{class:(0,n.C4)(["navbar-brand",me.isYuandan?"navbar-brand-yuandan":""])},[(0,a.bF)(ve,{to:"/",class:"navbar-logo"},{default:(0,a.k6)((()=>[(0,a.Lk)("img",{src:me.kaoyan?"https://download.xn--xhq44jb2fzpc.com/images/logo-ky.png":"https://download.xn--xhq44jb2fzpc.com/images/logo-hd.png",alt:"NEU小站",class:"navbar-logo-img"},null,8,l),me.kaoyan?((0,a.uX)(),(0,a.CE)("span",r,"一战成硕")):((0,a.uX)(),(0,a.CE)("img",{key:1,src:me.isYuandan?"https://download.xn--xhq44jb2fzpc.com/images/head_f.png":fe.isChristmas?"https://download.xn--xhq44jb2fzpc.com/images/sdb_ys.png":"https://download.xn--xhq44jb2fzpc.com/images/head.png",alt:"NEU小站",class:"navbar-title-img",style:(0,n.Tr)(me.isYuandan?{height:"45px",marginBottom:"10px"}:{})},null,12,c)),fe.currentTagConfig?((0,a.uX)(),(0,a.CE)("span",{key:2,style:(0,n.Tr)({backgroundColor:fe.currentTagConfig.backgroundColor}),class:"route-tag"},(0,n.v_)(fe.currentTagConfig.text),5)):(0,a.Q3)("",!0)])),_:1}),(0,a.Lk)("div",d,[(0,a.Lk)("div",{class:(0,n.C4)(["navbar-burger",{"is-active":me.isMenuActive}]),onClick:t[0]||(t[0]=(...e)=>fe.toggleMenu&&fe.toggleMenu(...e))},t[14]||(t[14]=[(0,a.Lk)("span",null,null,-1),(0,a.Lk)("span",null,null,-1),(0,a.Lk)("span",null,null,-1)]),2),me.userInfo&&me.userInfo.messageUnread?((0,a.uX)(),(0,a.CE)("span",u)):(0,a.Q3)("",!0)])],2),(0,a.Lk)("div",{class:(0,n.C4)(["navbar-menu",{"is-active":me.isMenuActive}])},[(0,a.Lk)("div",h,[(0,a.bF)(ve,{to:"/qa",class:"navbar-item"},{default:(0,a.k6)((()=>t[15]||(t[15]=[(0,a.eW)(" 年度问卷 "),(0,a.Lk)("span",{class:"new-badge"},"2025",-1)]))),_:1}),(0,a.bF)(ve,{to:"/strategy",class:"navbar-item"},{default:(0,a.k6)((()=>t[16]||(t[16]=[(0,a.eW)("攻略指南")]))),_:1}),(0,a.bF)(ve,{to:"/resources",class:"navbar-item"},{default:(0,a.k6)((()=>t[17]||(t[17]=[(0,a.eW)("资源共享")]))),_:1}),(0,a.bF)(ve,{to:"/app",class:"navbar-item"},{default:(0,a.k6)((()=>t[18]||(t[18]=[(0,a.eW)(" 应用中心 ")]))),_:1}),(0,a.bF)(ve,{to:"/search",class:"navbar-item"},{default:(0,a.k6)((()=>t[19]||(t[19]=[(0,a.eW)("搜索")]))),_:1}),(0,a.bF)(ve,{to:"/advice",class:"navbar-item"},{default:(0,a.k6)((()=>t[20]||(t[20]=[(0,a.eW)(" 反馈 ")]))),_:1}),(0,a.bF)(ve,{to:"/subscribe",class:"navbar-item"},{default:(0,a.k6)((()=>t[21]||(t[21]=[(0,a.eW)("赞助")]))),_:1}),(0,a.bF)(ve,{to:"/about",class:"navbar-item"},{default:(0,a.k6)((()=>t[22]||(t[22]=[(0,a.eW)("关于")]))),_:1}),me.userInfo?((0,a.uX)(),(0,a.CE)("div",g,[(0,a.Lk)("div",{class:"user-info",onClick:t[1]||(t[1]=(...e)=>fe.toggleDropdown&&fe.toggleDropdown(...e))},[(0,a.Lk)("div",p,[(0,a.Lk)("img",{src:me.userInfo.avatar_path,class:"user-avatar",alt:me.userInfo.nickname},null,8,m),me.userInfo.messageUnread?((0,a.uX)(),(0,a.CE)("span",f)):(0,a.Q3)("",!0)]),(0,a.Lk)("span",v,(0,n.v_)(me.userInfo.nickname),1),(0,a.Lk)("span",{class:(0,n.C4)(["dropdown-arrow",{"is-active":me.isDropdownActive}])},"▼",2)]),(0,a.bo)((0,a.Lk)("div",k,[(0,a.Lk)("div",{class:"dropdown-item",onClick:t[2]||(t[2]=(...e)=>fe.handleUserCenter&&fe.handleUserCenter(...e))},"个人中心"),(0,a.Lk)("div",{class:"dropdown-item",onClick:t[3]||(t[3]=(...e)=>fe.handleMessages&&fe.handleMessages(...e))},[t[23]||(t[23]=(0,a.eW)(" 我的消息 ")),me.userInfo.messageUnread?((0,a.uX)(),(0,a.CE)("span",b)):(0,a.Q3)("",!0)]),(0,a.Lk)("div",{class:"dropdown-item",onClick:t[4]||(t[4]=(...e)=>fe.handleLogout&&fe.handleLogout(...e))},"退出登录")],512),[[o.aG,me.isDropdownActive]])])):((0,a.uX)(),(0,a.CE)("div",y,[(0,a.Lk)("a",{class:"login-btn",onClick:t[5]||(t[5]=(...e)=>fe.handleLogin&&fe.handleLogin(...e))},"登录")]))])],2)]),me.showActivationDialog?((0,a.uX)(),(0,a.CE)("div",w,[(0,a.Lk)("div",C,[t[30]||(t[30]=(0,a.Lk)("h3",null,"账户激活",-1)),t[31]||(t[31]=(0,a.Lk)("p",null,"您的账户尚未激活,请选择以下一种方式进行激活。如果无法激活,请退出登录后在“关于”页面联系网站管理员。",-1)),(0,a.Lk)("div",L,[(0,a.Lk)("div",_,[t[24]||(t[24]=(0,a.Lk)("h4",null,"方式 1:NEU 校园网验证",-1)),t[25]||(t[25]=(0,a.Lk)("p",null,"请连接 NEU 校园网后点击下面的验证按钮(暂不支持秦皇岛分校)",-1)),(0,a.Lk)("button",{onClick:t[6]||(t[6]=(...e)=>fe.handleNetworkVerify&&fe.handleNetworkVerify(...e)),class:"verify-btn"},"校园网验证")]),(0,a.Lk)("div",E,[t[26]||(t[26]=(0,a.Lk)("h4",null,"方式 2:校园邮箱验证",-1)),t[27]||(t[27]=(0,a.Lk)("p",null,"使用 @stu.neu.edu.cn、@stu.neuq.edu.cn 或 @mails.neu.edu.cn 后缀的校园邮箱验证",-1)),(0,a.Lk)("button",{onClick:t[7]||(t[7]=(...e)=>fe.handleEmailVerify&&fe.handleEmailVerify(...e)),class:"verify-btn"},"邮箱验证")]),(0,a.Lk)("div",A,[t[28]||(t[28]=(0,a.Lk)("h4",null,"方式 3:学生证照片认证",-1)),t[29]||(t[29]=(0,a.Lk)("p",null,[(0,a.eW)("请上传清晰、无遮挡的学生证(校园卡,"),(0,a.Lk)("strong",null,"非火车票学生证"),(0,a.eW)(")个人信息面照片,并清晰露出公章(支持JPG/PNG/WEBP格式,不超过5M)")],-1)),(0,a.Lk)("input",{type:"file",onChange:t[8]||(t[8]=(...e)=>fe.handleFileSelect&&fe.handleFileSelect(...e)),accept:"image/jpeg,image/png,image/webp",ref:"fileInput",style:{display:"none"}},null,544),(0,a.Lk)("button",{onClick:t[9]||(t[9]=(...e)=>fe.triggerFileInput&&fe.triggerFileInput(...e)),class:"verify-btn",disabled:me.isUploading},(0,n.v_)(me.isUploading?"上传认证中...":"上传学生证"),9,I)])]),(0,a.Lk)("button",{onClick:t[10]||(t[10]=(...e)=>fe.handleLogout&&fe.handleLogout(...e)),class:"close-btn"},"退出登录")])])):(0,a.Q3)("",!0),me.showMessageModal?((0,a.uX)(),(0,a.CE)("div",x,[(0,a.Lk)("div",M,[(0,a.Lk)("div",X,[t[32]||(t[32]=(0,a.Lk)("h3",null,"我的消息",-1)),(0,a.Lk)("span",{class:"close-icon",onClick:t[11]||(t[11]=(...e)=>fe.closeMessageModal&&fe.closeMessageModal(...e))},"×")]),(0,a.Lk)("div",P,[0===me.messages.length?((0,a.uX)(),(0,a.CE)("div",S," 暂无消息 ")):((0,a.uX)(),(0,a.CE)("div",j,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(me.messages,(e=>((0,a.uX)(),(0,a.CE)("div",{key:e.id,class:"message-item"},[(0,a.Lk)("div",z,[(0,a.Lk)("span",F,(0,n.v_)(fe.formatDate(e.created_at)),1),e.status?(0,a.Q3)("",!0):((0,a.uX)(),(0,a.CE)("span",q,"未读"))]),0===e.type?((0,a.uX)(),(0,a.CE)("div",{key:0,class:"message-content",style:{"white-space":"pre-wrap"},innerHTML:e.content},null,8,U)):1===e.type?((0,a.uX)(),(0,a.CE)("div",T,[t[33]||(t[33]=(0,a.eW)(" 您在《")),e.article_id?((0,a.uX)(),(0,a.CE)("a",{key:0,href:"https://www.xn--xhq44jb2fzpc.com/article/"+e.article_id,target:"_blank"},(0,n.v_)(e.article_title),9,D)):((0,a.uX)(),(0,a.CE)("span",W,(0,n.v_)(e.article_title),1)),(0,a.eW)("》内容下的「"+(0,n.v_)(e.original_content)+"」评论被回复:「"+(0,n.v_)(e.reply_content)+"」 ",1)])):2===e.type?((0,a.uX)(),(0,a.CE)("div",$,[t[34]||(t[34]=(0,a.eW)(" 您的投稿《")),e.article_id?((0,a.uX)(),(0,a.CE)("a",{key:0,href:"https://www.xn--xhq44jb2fzpc.com/article/"+e.article_id,target:"_blank"},(0,n.v_)(e.title),9,Q)):((0,a.uX)(),(0,a.CE)("span",O,(0,n.v_)(e.title),1)),(0,a.eW)("》审核"+(0,n.v_)(e.pass?"已通过":"未通过")+(0,n.v_)(e.note?",审核备注:"+e.note:""),1)])):3===e.type?((0,a.uX)(),(0,a.CE)("div",V,[t[35]||(t[35]=(0,a.eW)(' 您添加的课程"')),e.course_id?((0,a.uX)(),(0,a.CE)("a",{key:0,href:"https://course.xn--xhq44jb2fzpc.com/courses?c="+fe.encodeBase64(e.course_id),target:"_blank"},(0,n.v_)(e.course_name),9,B)):((0,a.uX)(),(0,a.CE)("span",N,(0,n.v_)(e.course_name),1)),(0,a.eW)('"审核'+(0,n.v_)(e.course_status),1)])):4===e.type?((0,a.uX)(),(0,a.CE)("div",R," 您的密钥「"+(0,n.v_)(e.key_plaintext)+"」使用次数已用尽,继续投稿可获得新的密钥。 ",1)):5===e.type?((0,a.uX)(),(0,a.CE)("div",J,[t[36]||(t[36]=(0,a.eW)(" 您在《")),e.article_id?((0,a.uX)(),(0,a.CE)("a",{key:0,href:"https://www.xn--xhq44jb2fzpc.com/article/"+e.article_id,target:"_blank"},(0,n.v_)(e.article_title),9,Y)):((0,a.uX)(),(0,a.CE)("span",Z,(0,n.v_)(e.article_title),1)),(0,a.eW)("》内容下的「"+(0,n.v_)(e.content)+"」评论被点赞。 ",1)])):6===e.type?((0,a.uX)(),(0,a.CE)("div",G,[t[37]||(t[37]=(0,a.eW)(" 您的内容《")),e.article_id?((0,a.uX)(),(0,a.CE)("a",{key:0,href:"https://www.xn--xhq44jb2fzpc.com/article/"+e.article_id,target:"_blank"},(0,n.v_)(e.article_title),9,K)):((0,a.uX)(),(0,a.CE)("span",H,(0,n.v_)(e.article_title),1)),(0,a.eW)("》收到新评论:「"+(0,n.v_)(e.comment_content)+"」 ",1)])):7===e.type?((0,a.uX)(),(0,a.CE)("div",ee,[t[38]||(t[38]=(0,a.eW)(" 恭喜您的内容《")),e.article_id?((0,a.uX)(),(0,a.CE)("a",{key:0,href:"https://www.xn--xhq44jb2fzpc.com/article/"+e.article_id,target:"_blank"},(0,n.v_)(e.article_title),9,te)):((0,a.uX)(),(0,a.CE)("span",se,(0,n.v_)(e.article_title),1)),(0,a.eW)("》浏览量达到"+(0,n.v_)(e.view_count)+",感谢您为NEU小站贡献优质内容,小站因为有你而更加精彩~ ",1)])):8===e.type?((0,a.uX)(),(0,a.CE)("div",ae,[t[39]||(t[39]=(0,a.Lk)("div",null,"您有一个新粉丝:",-1)),(0,a.Lk)("div",ne,[(0,a.bF)(ke,{id:e.follower_id},null,8,["id"])])])):9===e.type?((0,a.uX)(),(0,a.CE)("div",oe,[(0,a.Lk)("div",null,[t[40]||(t[40]=(0,a.eW)("您关注的用户")),(0,a.Lk)("span",ie,[(0,a.bF)(ke,{id:e.author_id},null,8,["id"])]),t[41]||(t[41]=(0,a.eW)("有新的投稿内容:"))]),(0,a.Lk)("div",le,[t[42]||(t[42]=(0,a.eW)(" 《")),(0,a.Lk)("a",{href:"https://www.xn--xhq44jb2fzpc.com/article/"+e.article_id,target:"_blank"},(0,n.v_)(e.article_title),9,re),t[43]||(t[43]=(0,a.eW)("》 "))])])):((0,a.uX)(),(0,a.CE)("div",ce,(0,n.v_)(e.error||"未知消息类型"),1))])))),128))])),me.totalPages>1?((0,a.uX)(),(0,a.CE)("div",de,[(0,a.Lk)("button",{disabled:1===me.currentPage,onClick:t[12]||(t[12]=e=>fe.loadMessages(me.currentPage-1)),class:"page-btn"},"上一页",8,ue),(0,a.Lk)("span",he,(0,n.v_)(me.currentPage)+" / "+(0,n.v_)(me.totalPages),1),(0,a.Lk)("button",{disabled:me.currentPage===me.totalPages,onClick:t[13]||(t[13]=e=>fe.loadMessages(me.currentPage+1)),class:"page-btn"},"下一页",8,ge)])):(0,a.Q3)("",!0)],512)])])):(0,a.Q3)("",!0)],2)}s(4945),s(4600),s(4201),s(166),s(5020);var me=s(2453),fe=s(2062),ve=s(6707),ke=s(122),be=s(6042),ye={name:"NavBar",components:{UserMeta:be.A},data(){return{kaoyan:!1,isYuandan:!0,isMenuActive:!1,isDropdownActive:!1,userInfo:null,showActivationDialog:!1,isActivated:!1,isUploading:!1,showMessageModal:!1,messages:[],loading:!1,currentPage:1,totalPages:1,pageSize:10,tagConfigurations:[{text:"应用",backgroundColor:"#ff8c00",routes:["/app","/app/"],wildcard:!1},{text:"工具",backgroundColor:"#3273dc",routes:["/widgets"],wildcard:!0}]}},computed:{isChristmas(){const e=new Date,t=new Date("2025-12-26T00:00:00");return e!!t.routes.includes(e)||!!t.wildcard&&t.routes.some((t=>e===t||e.startsWith(t+"/")))))||null}},mounted(){this.checkLoginStatus()},methods:{handleLogin(){(0,ke.A)().then((e=>{console.log(e),this.checkLoginStatus()})).catch((e=>{console.log(e)}))},toggleMenu(){this.isMenuActive=!this.isMenuActive},toggleDropdown(){this.isDropdownActive=!this.isDropdownActive},handleUserCenter(){this.isDropdownActive=!1,this.$router.push("/user-center")},handleLogout(){const e=window.location.hostname.includes("localhost")?"localhost":window.location.hostname.split(".").slice(-2).join(".");me.A.remove("token",{domain:e,path:"/"}),this.userInfo=null,window.location.reload()},checkLoginStatus(){const e=me.A.get("token");e&&fe.A.get("https://newfront.xn--xhq44jb2fzpc.com/user/info",{headers:{Authorization:e}}).then((e=>{this.userInfo=e.data,e.data.banned?(this.$barMessage({message:"您的账户已被封禁,请联系网站管理员",type:"error"}),ve.A.alert('您的账户已被封禁,如有疑问请在"关于"页面联系网站管理员。',"账户状态异常",{confirmText:"退出登录",cancel:!1}).then((()=>{this.handleLogout()})).catch((()=>{this.handleLogout()}))):(this.isActivated=e.data.activated,this.isActivated||(this.showActivationDialog=!0))})).catch((e=>{console.log(e),this.userInfo=null}))},closeActivationDialog(){this.showActivationDialog=!1},handleNetworkVerify(){const e=me.A.get("token");e?fe.A.get("https://userlogin.xn--xhq44jb2fzpc.com/qv",{headers:{Authorization:e}}).then((e=>{ve.A.alert(e.data.message,"提示"),this.isActivated=!0,this.showActivationDialog=!1})).catch((e=>{e.response&&e.response.data?ve.A.alert(`${e.response.data.message} 当前IP: ${e.response.data.ip||"未知"}`,"提示"):ve.A.alert("验证失败,请稍后重试","提示")})):ve.A.alert("您未登录,请先登录后操作!","提示")},handleEmailVerify(){const e=me.A.get("token");e?fe.A.get("https://userlogin.xn--xhq44jb2fzpc.com/check-email",{headers:{Authorization:e}}).then((e=>{ve.A.alert(e.data.message,"提示"),this.isActivated=!0,this.showActivationDialog=!1})).catch((t=>{t.response&&403===t.response.status?this.promptForCampusEmail(e):t.response&&t.response.data?ve.A.alert(t.response.data.message||"发生未知错误,请稍后重试","提示"):ve.A.alert("验证失败,请稍后重试","提示")})):ve.A.alert("您未登录,请先登录后操作!","提示")},promptForCampusEmail(e){(0,ve.A)({title:"校园邮箱验证",message:"请输入您的校园邮箱:",showInput:!0,inputPlaceholder:"请输入校园邮箱",confirmText:"确认",cancelText:"取消",cancel:!0}).then((({value:t})=>{t?t.endsWith("@stu.neu.edu.cn")||t.endsWith("@stu.neuq.edu.cn")||t.endsWith("@mails.neu.edu.cn")?this.sendCampusVerificationEmail(t,e):ve.A.alert("请输入有效的 @stu.neu.edu.cn、@stu.neuq.edu.cn 或 @mails.neu.edu.cn 校园邮箱!","提示"):ve.A.alert("邮箱不能为空","提示")})).catch((()=>{}))},sendCampusVerificationEmail(e,t){fe.A.post("https://userlogin.xn--xhq44jb2fzpc.com/send-campus-verify",{campus_email:e},{headers:{Authorization:t,"Content-Type":"application/json"}}).then((t=>{ve.A.alert(`验证邮件已发送至 ${e},请检查您的邮箱完成验证。`,"提示")})).catch((e=>{e.response&&e.response.data?ve.A.alert(`发送验证邮件失败:${e.response.data.message}`,"提示"):ve.A.alert("发送验证邮件失败,请稍后重试","提示")}))},handleMessages(){this.isDropdownActive=!1,this.showMessageModal=!0,this.loadMessages(1)},closeMessageModal(){this.showMessageModal=!1,this.checkLoginStatus()},loadMessages(e){this.currentPage=e,fe.A.get("https://newfront.xn--xhq44jb2fzpc.com/message/get",{headers:{Authorization:me.A.get("token")},params:{page:e}}).then((e=>{this.messages=e.data.messages,this.totalPages=e.data.totalPages,this.pageSize=e.data.pageSize})).catch((e=>{console.error("获取消息失败:",e),ve.A.alert("获取消息失败,请稍后再试。","错误")}))},formatDate(e){const t=new Date(e);return t.toLocaleDateString()+" "+t.toLocaleTimeString()},encodeBase64(e){return window.btoa(e)},triggerFileInput(){this.$refs.fileInput.click()},async handleFileSelect(e){const t=e.target.files[0];if(!t)return;const s=["image/jpeg","image/png","image/webp"];if(!s.includes(t.type))return void ve.A.alert("不支持的文件格式,请上传 JPG, PNG, 或 WEBP 图片。","格式错误");const a=5242880;if(t.size>a)ve.A.alert("文件大小不能超过 5MB。","文件过大");else{this.isUploading=!0;try{const e=me.A.get("token");if(!e)return ve.A.alert("您未登录,请先登录后操作!","提示"),void(this.isUploading=!1);const s=await fe.A.post("https://newfront.xn--xhq44jb2fzpc.com/freshman/validate_card/get-upload-url",{filename:t.name},{headers:{Authorization:e}}),{uploadUrl:a,objectPath:n}=s.data;await fe.A.put(a,t,{headers:{"Content-Type":t.type}});await fe.A.post("https://newfront.xn--xhq44jb2fzpc.com/freshman/validate_card/verify",{objectPath:n},{headers:{Authorization:e}});ve.A.alert("学生证认证成功!","激活成功"),this.isActivated=!0,this.showActivationDialog=!1,this.checkLoginStatus()}catch(n){let e="操作失败,请稍后重试。";n.response&&n.response.data&&n.response.data.message&&(e=n.response.data.message),ve.A.alert(e,"错误")}finally{this.isUploading=!1,this.$refs.fileInput.value=""}}}}},we=s(6968);const Ce=(0,we.A)(ye,[["render",pe],["__scopeId","data-v-248d67cd"]]);var Le=Ce},6042:function(e,t,s){s.d(t,{A:function(){return H}});var a=s(1411),n=s(2515),o=s(1561);const i={class:"user-meta"},l={class:"avatar-wrapper"},r=["src"],c={key:0,class:"avatar-loading"},d={key:0,src:"https://download.xn--xhq44jb2fzpc.com/images/vip_g3.svg",class:"vip-badge",alt:"VIP",title:"VIP用户"},u={class:"user-badges"},h=["title"],g=["title"],p={key:2,class:"badge medal"},m={class:"card-container"},f={class:"detail-header"},v=["src"],k={class:"detail-right"},b={key:0,src:"https://download.xn--xhq44jb2fzpc.com/images/vip_g3.svg",class:"vip-badge",alt:"VIP",title:"VIP用户"},y={class:"user-badges"},w=["title"],C=["title"],L={key:2,class:"badge medal"},_={key:0,class:"user-sign"},E={class:"sign-text"},A={class:"user-stats"},I={class:"stat-item"},x={class:"stat-value"},M={class:"stat-item"},X={class:"stat-value"},P={key:1,class:"user-submissions"},S={class:"submission-header"},j={key:0,class:"pagination-controls"},z=["disabled"],F={class:"page-info"},q=["disabled"],U={class:"submission-list"},T=["onClick"],D={class:"submission-title"},W={class:"submission-tags"},$={key:0,class:"tag official"},Q={key:1,class:"tag highlight"},O={key:2,class:"tag top"},V={class:"card-footer"};function B(e,t,s,B,N,R){return(0,a.uX)(),(0,a.CE)("div",i,[(0,a.Lk)("div",{class:"user-basic",ref:"userBasic",onMouseenter:t[0]||(t[0]=(...e)=>R.handleMouseEnter&&R.handleMouseEnter(...e))},[(0,a.Lk)("div",l,[(0,a.Lk)("img",{src:N.userInfo.avatarUrl,alt:"用户头像",class:"avatar"},null,8,r),N.loading?((0,a.uX)(),(0,a.CE)("div",c,t[6]||(t[6]=[(0,a.Lk)("div",{class:"loading-spinner"},null,-1)]))):(0,a.Q3)("",!0)]),(0,a.Lk)("div",{class:(0,n.C4)(["user-name",{"colorful-name":N.userInfo.color_name}])},[(0,a.eW)((0,n.v_)(N.userInfo.nickname)+" ",1),N.userInfo.is_vip?((0,a.uX)(),(0,a.CE)("img",d)):(0,a.Q3)("",!0)],2),(0,a.Lk)("div",u,[N.userInfo.verified?((0,a.uX)(),(0,a.CE)("span",{key:0,class:"badge verified",title:N.userInfo.verified},"认证",8,h)):(0,a.Q3)("",!0),N.userInfo.invited?((0,a.uX)(),(0,a.CE)("span",{key:1,class:"badge invited",title:N.userInfo.invited},"特邀",8,g)):(0,a.Q3)("",!0),1===N.userInfo.medal?((0,a.uX)(),(0,a.CE)("span",p,"小站奖章")):(0,a.Q3)("",!0)])],544),((0,a.uX)(),(0,a.Wv)(a.Im,{to:"body"},[(0,a.bF)(o.eB,{name:"detail-fade"},{default:(0,a.k6)((()=>[N.showDetail?((0,a.uX)(),(0,a.CE)("div",{key:0,class:"user-detail",ref:"userDetail",style:(0,n.Tr)(N.popupStyle),onMouseenter:t[4]||(t[4]=e=>N.showDetail=!0),onMouseleave:t[5]||(t[5]=e=>N.showDetail=!1)},[(0,a.Lk)("div",m,[(0,a.Lk)("div",f,[t[7]||(t[7]=(0,a.Lk)("div",{class:"header-bg"},null,-1)),(0,a.Lk)("img",{src:N.userInfo.avatarUrl,alt:"用户头像",class:"detail-avatar"},null,8,v),(0,a.Lk)("div",k,[(0,a.Lk)("div",{class:(0,n.C4)(["detail-name",{"colorful-name":N.userInfo.color_name}])},[(0,a.eW)((0,n.v_)(N.userInfo.nickname)+" ",1),N.userInfo.is_vip?((0,a.uX)(),(0,a.CE)("img",b)):(0,a.Q3)("",!0)],2),(0,a.Lk)("div",y,[N.userInfo.verified?((0,a.uX)(),(0,a.CE)("span",{key:0,class:"badge verified",title:N.userInfo.verified},"认证",8,w)):(0,a.Q3)("",!0),N.userInfo.invited?((0,a.uX)(),(0,a.CE)("span",{key:1,class:"badge invited",title:N.userInfo.invited},"特邀",8,C)):(0,a.Q3)("",!0),1===N.userInfo.medal?((0,a.uX)(),(0,a.CE)("span",L,"小站奖章")):(0,a.Q3)("",!0)])])]),N.userInfo.sign?((0,a.uX)(),(0,a.CE)("div",_,[t[8]||(t[8]=(0,a.Lk)("div",{class:"sign-icon"},"✍️",-1)),(0,a.Lk)("div",E,(0,n.v_)(N.userInfo.sign),1)])):(0,a.Q3)("",!0),(0,a.Lk)("div",A,[(0,a.Lk)("div",I,[(0,a.Lk)("div",x,(0,n.v_)(N.userInfo.follower),1),t[9]||(t[9]=(0,a.Lk)("div",{class:"stat-label"},"粉丝",-1))]),t[11]||(t[11]=(0,a.Lk)("div",{class:"stat-separator"},null,-1)),(0,a.Lk)("div",M,[(0,a.Lk)("div",X,(0,n.v_)(N.userInfo.following),1),t[10]||(t[10]=(0,a.Lk)("div",{class:"stat-label"},"关注",-1))])]),N.submissions.length>0?((0,a.uX)(),(0,a.CE)("div",P,[(0,a.Lk)("div",S,[t[12]||(t[12]=(0,a.Lk)("span",null,"TA的投稿",-1)),N.totalPages>1?((0,a.uX)(),(0,a.CE)("div",j,[(0,a.Lk)("button",{class:"page-btn",disabled:1===N.currentPage,onClick:t[1]||(t[1]=(0,o.D$)((e=>R.changePage(N.currentPage-1)),["stop"]))}," < ",8,z),(0,a.Lk)("span",F,(0,n.v_)(N.currentPage)+"/"+(0,n.v_)(N.totalPages),1),(0,a.Lk)("button",{class:"page-btn",disabled:N.currentPage===N.totalPages,onClick:t[2]||(t[2]=(0,o.D$)((e=>R.changePage(N.currentPage+1)),["stop"]))}," > ",8,q)])):(0,a.Q3)("",!0)]),(0,a.Lk)("div",U,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(N.submissions,(e=>((0,a.uX)(),(0,a.CE)("div",{key:e.id,class:"submission-item",onClick:t=>R.handleArticleClick(e.id)},[(0,a.Lk)("div",D,(0,n.v_)(e.title),1),(0,a.Lk)("div",W,[e.official?((0,a.uX)(),(0,a.CE)("span",$,"官方")):(0,a.Q3)("",!0),e.highlight?((0,a.uX)(),(0,a.CE)("span",Q,"优质")):(0,a.Q3)("",!0),e.top?((0,a.uX)(),(0,a.CE)("span",O,"置顶")):(0,a.Q3)("",!0)])],8,T)))),128))])])):(0,a.Q3)("",!0),(0,a.Lk)("div",V,[s.showFollow?((0,a.uX)(),(0,a.CE)("button",{key:0,class:(0,n.C4)(["follow-btn",{followed:N.isFollowing,"disabled-look":!N.isLoggedIn}]),onClick:t[3]||(t[3]=(...e)=>R.handleFollow&&R.handleFollow(...e))},(0,n.v_)(N.isFollowing?"取消关注":"+ 关注"),3)):(0,a.Q3)("",!0)])])],36)):(0,a.Q3)("",!0)])),_:1})]))])}var N=s(2062),R=s(6707),J=s(2453);let Y=null;var Z={name:"UserMeta",props:{id:{type:[String,Number],required:!0},showFollow:{type:Boolean,default:!0}},data(){return{userInfo:{nickname:"默认昵称",verified:null,invited:null,medal:0,avatarUrl:"https://download.东北大学.com/avatar/default.png",follower:0,following:0,sign:"这个人很懒,还没有写个性签名~",color_name:!1},submissions:[],currentPage:1,totalPages:1,total:0,showDetail:!1,loading:!1,error:null,isFollowing:!1,isLoggedIn:!1,popupStyle:{}}},created(){this.showFollow&&this.checkLoginStatus(),this.fetchUserInfo(),this.fetchUserSubmissions(),this.showFollow&&this.isLoggedIn&&this.checkFollowStatus()},mounted(){document.addEventListener("click",this.handleClickOutside)},beforeUnmount(){document.removeEventListener("click",this.handleClickOutside),Y===this&&(Y=null)},watch:{id(){this.fetchUserInfo(),this.fetchUserSubmissions(),this.showFollow&&this.isLoggedIn&&this.checkFollowStatus()},showDetail(e){e?(Y&&Y!==this&&(Y.showDetail=!1),Y=this,this.showFollow&&this.isLoggedIn&&this.checkFollowStatus()):Y===this&&(Y=null)}},methods:{handleMouseEnter(){this.updatePopupPosition(),this.showDetail=!0},updatePopupPosition(){const e=this.$refs.userBasic;if(!e)return;const t=e.getBoundingClientRect();this.popupStyle={top:t.bottom+window.scrollY+8+"px",left:t.left+window.scrollX+"px",position:"absolute",zIndex:9999}},checkLoginStatus(){const e=J.A.get("token");this.isLoggedIn=!!e},async checkFollowStatus(){if(!this.isLoggedIn)return;const e=J.A.get("token");try{const t=await N.A.post("https://newfront.xn--xhq44jb2fzpc.com/user/follow/status",{user_id:this.id},{headers:{Authorization:e}});this.isFollowing=t.data.is_following}catch(t){console.error("检查关注状态失败:",t)}},async fetchUserInfo(){this.loading=!0;try{const e=await N.A.get(`https://userlogin.xn--xhq44jb2fzpc.com/submission/get-author-info?id=${this.id}`);this.userInfo={...e.data,follower:e.data.follower||0,following:e.data.following||0,sign:e.data.sign||"这个人很懒,还没有写个性签名~",color_name:e.data.color_name||!1}}catch(e){this.error="获取用户信息失败",console.error("获取用户信息失败:",e)}finally{this.loading=!1}},async fetchUserSubmissions(e=1){try{const t=await N.A.get(`https://userlogin.xn--xhq44jb2fzpc.com/submission/get-author-submissions?id=${this.id}&page=${e}`);t.data?(this.submissions=t.data.list||[],this.total=t.data.total||0,this.currentPage=t.data.page||1,this.totalPages=Math.ceil(this.total/5)):(this.submissions=[],this.total=0,this.totalPages=0)}catch(t){console.error("获取用户投稿失败:",t),this.submissions=[],this.total=0,this.totalPages=0}},changePage(e){e<1||e>this.totalPages||this.fetchUserSubmissions(e)},handleClickOutside(e){const t=this.$el,s=this.$refs.userDetail;if(this.showDetail){const a=t.contains(e.target),n=s&&s.contains(e.target);a||n||(this.showDetail=!1)}},handleFollow(){if(!this.isLoggedIn)return void R.A.alert("请先登录后再关注用户!","提示");const e=J.A.get("token");if(!e)return this.isLoggedIn=!1,void R.A.alert("登录已过期,请重新登录!","提示");const t=this.isFollowing?"取消关注":"关注",s=async()=>{try{const s=await N.A.post("https://newfront.xn--xhq44jb2fzpc.com/user/follow/do",{user_id:this.id},{headers:{Authorization:e}});this.isFollowing=s.data.is_following,this.fetchUserInfo(),this.$barMessage.success(`${t}成功`)}catch(s){console.error(`${t}失败:`,s),s.response&&s.response.data&&s.response.data.message?this.$barMessage.error(s.response.data.message):R.A.alert("操作失败,请稍后重试","错误")}};this.isFollowing?R.A.confirm("确定取消关注该用户吗?","确认操作").then(s).catch((()=>{})):s()},handleArticleClick(e){window.location.href=`/article/${e}`}}},G=s(6968);const K=(0,G.A)(Z,[["render",B],["__scopeId","data-v-69166869"]]);var H=K},6707:function(e,t,s){s.d(t,{A:function(){return k}});var a=s(1561),n=s(1411),o=s(2515);const i={class:"message-box"},l={key:0,class:"message-header"},r={class:"message-content"},c={key:0,class:"input-wrapper"},d=["type","placeholder"],u={class:"message-footer"};function h(e,t,s,h,g,p){return(0,n.uX)(),(0,n.Wv)(a.eB,{name:"message-fade"},{default:(0,n.k6)((()=>[s.visible?((0,n.uX)(),(0,n.CE)("div",{key:0,class:"message-overlay",onClick:t[4]||(t[4]=(0,a.D$)(((...e)=>p.handleOverlayClick&&p.handleOverlayClick(...e)),["self"]))},[(0,n.Lk)("div",i,[s.title?((0,n.uX)(),(0,n.CE)("div",l,[(0,n.Lk)("h3",null,(0,o.v_)(s.title),1)])):(0,n.Q3)("",!0),(0,n.Lk)("div",r,[(0,n.Lk)("p",null,(0,o.v_)(s.message),1),s.showInput?((0,n.uX)(),(0,n.CE)("div",c,[(0,n.bo)((0,n.Lk)("input",{"onUpdate:modelValue":t[0]||(t[0]=e=>g.localInputValue=e),type:s.inputType,placeholder:s.inputPlaceholder,class:"message-input",onKeyup:t[1]||(t[1]=(0,a.jR)(((...e)=>p.handleConfirm&&p.handleConfirm(...e)),["enter"]))},null,40,d),[[a.hp,g.localInputValue]])])):(0,n.Q3)("",!0)]),(0,n.Lk)("div",u,[p.cancelVisible?((0,n.uX)(),(0,n.CE)("button",{key:0,class:"btn btn-cancel",onClick:t[2]||(t[2]=(...e)=>p.handleCancel&&p.handleCancel(...e))},(0,o.v_)(s.cancelText),1)):(0,n.Q3)("",!0),p.confirmVisible?((0,n.uX)(),(0,n.CE)("button",{key:1,class:"btn btn-confirm",onClick:t[3]||(t[3]=(...e)=>p.handleConfirm&&p.handleConfirm(...e))},(0,o.v_)(s.confirmText),1)):(0,n.Q3)("",!0)])])])):(0,n.Q3)("",!0)])),_:1})}var g={name:"MessageBox",props:{visible:{type:Boolean,default:!1},title:{type:String,default:""},message:{type:String,required:!0},confirm:{type:Boolean,default:!0},cancel:{type:Boolean,default:!1},confirmText:{type:String,default:"确定"},cancelText:{type:String,default:"取消"},closeOnClickOverlay:{type:Boolean,default:!1},showInput:{type:Boolean,default:!1},inputType:{type:String,default:"text"},inputValue:{type:String,default:""},inputPlaceholder:{type:String,default:"请输入"}},data(){return{localInputValue:""}},watch:{inputValue:{immediate:!0,handler(e){this.localInputValue=e}}},computed:{confirmVisible(){return this.confirm},cancelVisible(){return this.cancel}},methods:{handleConfirm(){this.$emit("confirm",this.localInputValue)},handleCancel(){this.$emit("cancel")},handleOverlayClick(){this.closeOnClickOverlay&&this.$emit("cancel")}}},p=s(6968);const m=(0,p.A)(g,[["render",h],["__scopeId","data-v-f960493c"]]);var f=m;const v=(e={})=>new Promise(((t,s)=>{const n=document.createElement("div");document.body.appendChild(n);const o=(0,a.Ef)(f,{...e,visible:!0,confirm:!1!==e.confirm,cancel:!0===e.cancel,onConfirm:e=>{o.unmount(),document.body.removeChild(n),t({value:e,action:"confirm"})},onCancel:()=>{o.unmount(),document.body.removeChild(n),s({action:"cancel"})}});o.mount(n)}));v.alert=(e,t="",s={})=>v({title:t,message:e,confirm:!0,cancel:!1,...s}),v.confirm=(e,t="",s={})=>v({title:t,message:e,confirm:!0,cancel:!0,...s}),v.prompt=(e,t="",s={})=>v({title:t,message:e,showInput:!0,confirm:!0,cancel:!0,...s});var k=v},9068:function(e,t,s){var a=s(1561),n=s(1411),o=s(2515),i=s(5131),l=s(9658);const r={id:"app"},c={key:0,class:"survey-float-icon"},d={class:"beian-footer"},u={class:"container"},h={class:"copyright"};var g={__name:"App",setup(e){const t=(new Date).getFullYear(),s=(0,i.KR)(!0),g=(0,l.lq)(),p=()=>{"/qa"===g.path||"/qa/"===g.path?s.value=!1:s.value=!sessionStorage.getItem("surveyIconClosed")};(0,n.wB)((()=>g.path),(()=>{p()}));const m=()=>{s.value=!1,sessionStorage.setItem("surveyIconClosed","true")};return(0,n.sV)((()=>{p()})),(e,l)=>{const g=(0,n.g2)("router-view"),p=(0,n.g2)("router-link");return(0,n.uX)(),(0,n.CE)("div",r,[(0,n.bF)(g),s.value?((0,n.uX)(),(0,n.CE)("div",c,[(0,n.Lk)("div",{class:"close-btn",onClick:(0,a.D$)(m,["stop"])},"×"),l[0]||(l[0]=(0,n.Lk)("a",{href:"/qa",target:"_blank"},[(0,n.Lk)("img",{src:"https://download.xn--xhq44jb2fzpc.com/images/wenjuan_icon.png",alt:"2025问卷调查"}),(0,n.Lk)("div",{class:"survey-label"},[(0,n.Lk)("div",null,"年度问卷"),(0,n.Lk)("div",null,"等你来填")])],-1))])):(0,n.Q3)("",!0),(0,n.Lk)("footer",d,[(0,n.Lk)("div",u,[l[2]||(l[2]=(0,n.Lk)("span",{style:{"white-space":"nowrap"}},[(0,n.Lk)("img",{src:"https://beian.mps.gov.cn/web/assets/logo01.6189a29f.png",alt:"公安标识",style:{"vertical-align":"middle",height:"16px",display:"inline-block"}}),(0,n.Lk)("a",{href:"https://beian.mps.gov.cn/",target:"_blank"}," 赣公网安备36090202000259号"),(0,n.eW)(" | "),(0,n.Lk)("a",{href:"https://beian.miit.gov.cn/",target:"_blank"},"赣ICP备2024039267号-1")],-1)),(0,n.Lk)("div",h,[(0,n.eW)(" © 2024-"+(0,o.v_)((0,i.R1)(t))+" ",1),(0,n.bF)(p,{to:"/about"},{default:(0,n.k6)((()=>l[1]||(l[1]=[(0,n.eW)("NEU小站")]))),_:1})])])])])}}};const p=g;var m=p;const f={class:"home"},v={class:"container"},k={class:"welcome-section"},b=["src"],y={class:"quick-links"},w={style:{"text-align":"right","font-weight":"normal"}};function C(e,t,s,a,i,l){const r=(0,n.g2)("Navbar"),c=(0,n.g2)("router-link");return(0,n.uX)(),(0,n.CE)("div",f,[(0,n.bF)(r),(0,n.Lk)("div",v,[(0,n.Lk)("div",k,[(0,n.Lk)("img",{alt:"Vue logo",src:i.kaoyan?"https://download.东北大学.com/images/logo-ky.png":"https://download.东北大学.com/images/logo-hd.png"},null,8,b),t[3]||(t[3]=(0,n.Lk)("h1",null,"欢迎访问NEU小站",-1)),(0,n.Lk)("div",y,[t[1]||(t[1]=(0,n.Lk)("span",{class:"colorful-text"},"2025年度问卷已上线,填写享VIP权益~",-1)),t[2]||(t[2]=(0,n.Lk)("span",null,"入口:",-1)),(0,n.bF)(c,{to:"/qa"},{default:(0,n.k6)((()=>t[0]||(t[0]=[(0,n.eW)("戳这里")]))),_:1})]),(0,n.Lk)("div",{class:(0,o.C4)(["intro-text",{"intro-kaoyan":i.kaoyan}])},[(0,n.Lk)("p",null,(0,o.v_)(i.kaoyan?"这一程霜雪披肩,终淬出笔锋里的晨曦。愿你合卷时,有剑归鞘的从容~":"“让我在接下来的日子里陪你一起成长吧”"),1),(0,n.Lk)("p",w,(0,o.v_)(i.kaoyan?"——致考研NEUers":"——NEU小站"),1)],2)])])])}var L=s(4493),_=s(6707),E={name:"HomeView",components:{Navbar:L.A},created(){document.title="NEU小站"},data(){return{kaoyan:!1}},methods:{goTo(e,t=!1){const s={course:"https://course.xn--xhq44jb2fzpc.com",oj:"https://oj.xn--xhq44jb2fzpc.com"},a=s[e];if(a)if(t){const e=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||window.innerWidth<768;e?_.A.confirm("推荐在电脑端访问,以获得最佳体验。仍要继续吗?","提示").then((()=>{window.open(a,"_blank")})).catch((()=>{})):window.open(a,"_blank")}else window.open(a,"_blank");else console.error(`No URL found for name: ${e}`)}}},A=s(6968);const I=(0,A.A)(E,[["render",C],["__scopeId","data-v-78f59e5a"]]);var x=I,M=s(57),X=s.n(M);X().configure({showSpinner:!1});const P=[{path:"/",name:"home",component:x},{path:"/login",name:"login",component:()=>s.e(668).then(s.bind(s,1668))},{path:"/article/:id",name:"article-detail",component:()=>s.e(319).then(s.bind(s,9319))},{path:"/about",name:"about",component:()=>s.e(274).then(s.bind(s,3274))},{path:"/strategy",name:"strategy",component:()=>s.e(135).then(s.bind(s,6516))},{path:"/resources",name:"resources",component:()=>s.e(907).then(s.bind(s,6907))},{path:"/ranking",name:"ranking",component:()=>s.e(340).then(s.bind(s,9340))},{path:"/:pathMatch(.*)*",name:"404",component:()=>s.e(391).then(s.bind(s,8391))},{path:"/search",name:"search",component:()=>s.e(1).then(s.bind(s,6001))},{path:"/user-center",name:"user-center",component:()=>s.e(668).then(s.bind(s,1668))},{path:"/app",name:"app",component:()=>s.e(441).then(s.bind(s,9441))},{path:"/submit",name:"submit",component:()=>Promise.all([s.e(341),s.e(300)]).then(s.bind(s,7300))},{path:"/preview",name:"preview",component:()=>s.e(319).then(s.bind(s,9319))},{path:"/edit",name:"edit-article",component:()=>Promise.all([s.e(341),s.e(300)]).then(s.bind(s,7300))},{path:"/widgets",name:"widgets",component:()=>s.e(818).then(s.bind(s,9818))},{path:"/widgets/webvpn",name:"webvpn",component:()=>s.e(906).then(s.bind(s,3906))},{path:"/subscribe",name:"subscribe",component:()=>s.e(513).then(s.bind(s,5513))},{path:"/advice",name:"advice",component:()=>Promise.all([s.e(341),s.e(67)]).then(s.bind(s,9067))},{path:"/qa",name:"qa",component:()=>s.e(994).then(s.bind(s,6613))}],S=(0,l.aE)({history:(0,l.LA)("/"),routes:P});S.beforeEach(((e,t,s)=>{X().start(),s()})),S.afterEach((()=>{X().done()}));var j=S,z=s(1424);const F=(0,a.Ef)(m);F.config.globalProperties.$barMessage=z.A,F.use(j).mount("#app"),window.$barMessage=z.A}},t={};function s(a){var n=t[a];if(void 0!==n)return n.exports;var o=t[a]={exports:{}};return e[a].call(o.exports,o,o.exports,s),o.exports}s.m=e,function(){var e=[];s.O=function(t,a,n,o){if(!a){var i=1/0;for(d=0;d=o)&&Object.keys(s.O).every((function(e){return s.O[e](a[r])}))?a.splice(r--,1):(l=!1,o0&&e[d-1][2]>o;d--)e[d]=e[d-1];e[d]=[a,n,o]}}(),function(){s.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return s.d(t,{a:t}),t}}(),function(){s.d=function(e,t){for(var a in t)s.o(t,a)&&!s.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})}}(),function(){s.f={},s.e=function(e){return Promise.all(Object.keys(s.f).reduce((function(t,a){return s.f[a](e,t),t}),[]))}}(),function(){s.u=function(e){return"js/"+e+"."+{1:"1123bf67",67:"3a61093f",135:"ad177e20",274:"7b070b1e",300:"e19684af",319:"9d2da6ff",340:"f7ae3146",341:"3c56027e",391:"41fac446",441:"bc9341e1",513:"f350df81",653:"32516b7a",668:"980b0479",818:"d2cfe244",906:"37a53d7d",907:"0090da8d",994:"ac3f9400",997:"25e21e4f"}[e]+".js"}}(),function(){s.miniCssF=function(e){return"css/"+e+"."+{1:"98396c9d",67:"bf09391d",135:"1b072388",274:"3461a041",300:"d0260895",319:"30b0397b",340:"a9f146da",341:"b01fd648",391:"9c9d4f37",441:"de38258a",513:"9cc8c9fc",668:"62d677ed",818:"57e139b5",906:"e143c9ec",907:"878ddbf5",994:"722d6800"}[e]+".css"}}(),function(){s.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}}(),function(){var e={},t="newfront:";s.l=function(a,n,o,i){if(e[a])e[a].push(n);else{var l,r;if(void 0!==o)for(var c=document.getElementsByTagName("script"),d=0;dw.handleClose&&w.handleClose(...e)),class:"close-btn"},"×")):(0,n.Q3)("",!0)]),(0,n.Lk)("form",{onSubmit:t[4]||(t[4]=(0,a.D$)(((...e)=>w.handleSubmit&&w.handleSubmit(...e)),["prevent"])),class:"login-form"},[(0,n.Lk)("div",c,[t[9]||(t[9]=(0,n.Lk)("label",{for:"email"},"邮箱",-1)),(0,n.bo)((0,n.Lk)("input",{type:"email",id:"email","onUpdate:modelValue":t[1]||(t[1]=e=>y.email=e),placeholder:"请输入邮箱地址",required:"",class:"form-input",pattern:"[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}$",title:"请输入有效的邮箱地址"},null,512),[[a.Jo,y.email]])]),(0,n.Lk)("div",d,[t[10]||(t[10]=(0,n.Lk)("label",{for:"password"},"密码",-1)),(0,n.bo)((0,n.Lk)("input",{type:"password",id:"password","onUpdate:modelValue":t[2]||(t[2]=e=>y.password=e),placeholder:"请输入密码",required:"",class:"form-input"},null,512),[[a.Jo,y.password]])]),y.message?((0,n.uX)(),(0,n.CE)("div",{key:0,class:(0,o.C4)(["message",{error:y.messageIsError,success:!y.messageIsError}])},(0,o.v_)(y.message),3)):(0,n.Q3)("",!0),(0,n.Lk)("div",u,[(0,n.Lk)("button",{type:"button",onClick:t[3]||(t[3]=(...e)=>w.login&&w.login(...e)),class:"btn btn-primary"},"登录/注册")])],32)]),(0,n.Lk)("div",{class:(0,o.C4)(["modal",{show:y.showCaptchaModal}])},[(0,n.Lk)("div",h,[(0,n.Lk)("div",g,[t[11]||(t[11]=(0,n.Lk)("h3",null,"邮箱验证",-1)),(0,n.Lk)("button",{onClick:t[5]||(t[5]=(...e)=>w.closeCaptchaModal&&w.closeCaptchaModal(...e)),class:"close-btn"},"×")]),(0,n.Lk)("div",p,[(0,n.Lk)("p",m,(0,o.v_)(y.captchaInstruction),1),(0,n.Lk)("div",f,[(0,n.bo)((0,n.Lk)("input",{type:"text","onUpdate:modelValue":t[6]||(t[6]=e=>y.captchaCode=e),placeholder:"请输入验证码",class:"form-input"},null,512),[[a.Jo,y.captchaCode]])]),y.captchaMessage?((0,n.uX)(),(0,n.CE)("div",{key:0,class:(0,o.C4)(["captcha-message",{error:y.captchaMessageIsError,success:!y.captchaMessageIsError}])},(0,o.v_)(y.captchaMessage),3)):(0,n.Q3)("",!0)]),(0,n.Lk)("div",v,[(0,n.Lk)("button",{onClick:t[7]||(t[7]=(...e)=>w.verifyCaptcha&&w.verifyCaptcha(...e)),class:"btn btn-primary"},"验证")])])],2),y.loading?((0,n.uX)(),(0,n.CE)("div",k,[t[12]||(t[12]=(0,n.Lk)("div",{class:"spinner"},null,-1)),(0,n.Lk)("p",null,(0,o.v_)(y.loadingMessage),1)])):(0,n.Q3)("",!0)])):(0,n.Q3)("",!0)}var y=s(6707),w=s(8194),C=s.n(w),L={name:"Login",props:{visible:{type:Boolean,default:!0},showClose:{type:Boolean,default:!1},onSuccess:{type:Function,default:null},onClose:{type:Function,default:null}},data(){return{email:"",password:"",message:"",messageIsError:!0,loading:!1,loadingMessage:"加载中...",showCaptchaModal:!1,captchaCode:"",captchaMessage:"",captchaMessageIsError:!0,captchaInstruction:"验证码已发送至您的邮箱,请在下方输入"}},methods:{detectDevice(){try{const e=C().getParser(window.navigator.userAgent),t=e.getOS(),s=e.getBrowser();let a=t.name||"Unknown";return t.version&&(a+=` ${t.version}`),s.name&&(a+=` / ${s.name}`,s.version&&(a+=` ${s.version}`)),a}catch(e){return console.error("Device detection failed:",e),"Unknown"}},async handleSubmit(){await this.login()},handleClose(){this.onClose?this.onClose():this.$emit("close")},async login(){if(!this.email||!this.password)return this.message="请输入邮箱和密码",void(this.messageIsError=!0);const e=/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;if(!e.test(this.email))return this.message="请输入有效的邮箱地址",void(this.messageIsError=!0);this.loading=!0,this.loadingMessage="登录中...";try{const e=await this.loginOrRegister(this.email,this.password,"login");"Login successful."===e.message?this.handleLoginSuccess(e):"User not registered."===e.message?(this.loading=!1,(0,y.A)({title:"邮箱未注册",message:'此邮箱没有注册。点击"发送"按钮将向您的邮箱发送注册验证码。',confirmText:"发送",cancelText:"取消",cancel:!0,closeOnClickOverlay:!0}).then((async()=>{await this.sendRegisterCode()})).catch((()=>{}))):"Invalid email or password."===e.message?(this.message="密码错误。",this.messageIsError=!0,this.loading=!1):(this.message=e.message||"登录失败,请重试。",this.messageIsError=!0,this.loading=!1)}catch(t){console.error("Error:",t),this.message="发生错误,请稍后重试。",this.messageIsError=!0,this.loading=!1}},async register(){if(!this.email||!this.password)return this.message="请输入邮箱和密码",void(this.messageIsError=!0);const e=/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;if(!e.test(this.email))return this.message="请输入有效的邮箱地址",void(this.messageIsError=!0);await this.sendRegisterCode()},async sendRegisterCode(){this.loading=!0,this.loadingMessage="发送验证码中...";try{const e=await this.loginOrRegister(this.email,this.password,"register");"Verification email sent."===e.message?(this.captchaInstruction="验证码已发送至您的邮箱,请在下方输入",this.captchaMessage="",this.captchaCode="",this.showCaptchaModal=!0):"A valid code has already been sent. Please try again later."===e.message?(this.captchaInstruction="您还有未验证的验证码,请查看邮箱并在下方输入",this.captchaMessage="",this.captchaCode="",this.showCaptchaModal=!0):"Email is already registered."===e.message?(this.message="此邮箱已注册。",this.messageIsError=!0):(this.message="发送验证码失败,请稍后重试。",this.messageIsError=!0),this.loading=!1}catch(e){console.error("Error:",e),this.message="发生错误,请稍后重试。",this.messageIsError=!0,this.loading=!1}},async verifyCaptcha(){if(!this.captchaCode)return this.captchaMessage="请输入验证码",void(this.captchaMessageIsError=!0);try{const e=await this.verifyRegisterCode(this.email,this.captchaCode);"User registered successfully."===e.message?(this.captchaMessage="验证成功!",this.captchaMessageIsError=!1,setTimeout((()=>{this.closeCaptchaModal(),this.handleSuccessfulRegistration()}),1500)):(this.captchaMessage="您的验证码不正确",this.captchaMessageIsError=!0)}catch(e){console.error("Error:",e),this.captchaMessage="验证过程中发生错误,请重试",this.captchaMessageIsError=!0}},closeCaptchaModal(){this.showCaptchaModal=!1,this.captchaCode="",this.captchaMessage=""},async handleSuccessfulRegistration(){this.message="注册成功!正在登录...",this.messageIsError=!1,this.loading=!0,this.loadingMessage="登录中...",await this.delay(1e3);try{const e=await this.loginOrRegister(this.email,this.password,"login");"Login successful."===e.message?this.handleLoginSuccess(e):(this.message="注册成功,但自动登录失败,请手动登录。",this.messageIsError=!0,this.loading=!1)}catch(e){console.error("Error during login after registration:",e),this.message="注册成功,但自动登录失败,请手动登录。",this.messageIsError=!0,this.loading=!1}},handleLoginSuccess(e){const t=e.token,s=window.location.hostname.includes("localhost")?"localhost":window.location.hostname.split(".").slice(-2).join(".");document.cookie=`token=${t}; max-age=604740; path=/; domain=${s}; secure; SameSite=Strict`,this.loading=!1,this.message="登录成功!正在加载中...",this.messageIsError=!1;const a=new URLSearchParams(window.location.search);if("wordhelper"===a.get("lg_callback"))return void setTimeout((()=>{window.location.href=`https://wh.ember.ac.cn/login-required?cb_token=${t}`}),1e3);const n={email:this.email,userId:e.id,token:e.token};this.onSuccess&&(this.onSuccess(n),window.location.reload()),this.$emit("login-success",n),this.onClose&&setTimeout((()=>{this.handleClose()}),3e3)},async loginOrRegister(e,t,s){const a="login"===s?"https://userlogin.xn--xhq44jb2fzpc.com/login":"https://userlogin.xn--xhq44jb2fzpc.com/register",n={email:e,password:t};"login"===s&&(n.device=this.detectDevice());const o=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});return o.json()},async verifyRegisterCode(e,t){const s="https://userlogin.xn--xhq44jb2fzpc.com/verify-register-code",a=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e,code:t})});return a.json()},delay(e){return new Promise((t=>setTimeout(t,e)))}}},_=s(6968);const E=(0,_.A)(L,[["render",b],["__scopeId","data-v-6a420ba9"]]);var A=E;const I=(e={})=>new Promise(((t,s)=>{const n=document.createElement("div");document.body.appendChild(n);const o=(0,a.Ef)(A,{...e,visible:!0,showClose:!0,onSuccess:e=>{t(e)},onClose:()=>{o.unmount(),document.body.removeChild(n)}});o.mount(n)}));I.withCallback=(e,t={})=>I({...t,onSuccess:t=>{e(t)}});var x=I},1424:function(e,t,s){s.d(t,{A:function(){return f}});s(4945);var a=s(1411),n=s(1561),o=s(2515);const i={class:"bar-message-text"};function l(e,t,s,l,r,c){return(0,a.uX)(),(0,a.Wv)(n.eB,{name:"bar-message-fade"},{default:(0,a.k6)((()=>[r.visible?((0,a.uX)(),(0,a.CE)("div",{key:0,class:"bar-message",style:(0,o.Tr)(c.positionStyle)},[(0,a.Lk)("div",{class:(0,o.C4)(["bar-message-content",r.customColor?"":r.type]),style:(0,o.Tr)({backgroundColor:r.customColor})},[r.showIcon?((0,a.uX)(),(0,a.CE)("i",{key:0,class:(0,o.C4)(["bar-message-icon",c.iconClass])},null,2)):(0,a.Q3)("",!0),(0,a.Lk)("span",i,(0,o.v_)(r.message),1),r.showClose?((0,a.uX)(),(0,a.CE)("i",{key:1,class:"bar-message-close fas fa-times",onClick:t[0]||(t[0]=(...e)=>c.close&&c.close(...e))})):(0,a.Q3)("",!0)],6)],4)):(0,a.Q3)("",!0)])),_:1})}var r={name:"BarMessage",data(){return{visible:!1,message:"",type:"success",customColor:"",timer:null,duration:3e3,position:"top",showIcon:!0,showClose:!1}},computed:{positionStyle(){return"bottom"===this.position?{top:"auto",bottom:"16px"}:"center"===this.position?{top:"50%",transform:"translate(-50%, -50%)"}:{top:"16px",bottom:"auto"}},iconClass(){switch(this.type){case"success":return"fas fa-check-circle";case"error":return"fas fa-times-circle";case"warning":return"fas fa-exclamation-circle";case"info":return"fas fa-info-circle";default:return"fas fa-bell"}}},methods:{show(e){this.timer&&clearTimeout(this.timer),this.message=e.message||"",this.type=e.type||"success",this.customColor=e.color||"",this.duration=void 0!==e.duration?e.duration:3e3,this.position=e.position||"top",this.showIcon=void 0===e.showIcon||e.showIcon,this.showClose=void 0!==e.showClose&&e.showClose,this.visible=!0,this.duration>0&&(this.timer=setTimeout((()=>{this.close()}),this.duration))},close(){this.visible=!1,this.timer&&(clearTimeout(this.timer),this.timer=null),this.onClose&&this.onClose()}}},c=s(6968);const d=(0,c.A)(r,[["render",l],["__scopeId","data-v-145fa924"]]);var u=d;const h=[];let g=1;const p=function(e){"string"===typeof e&&(e={message:e}),e=e||{};const t="bar_message_"+g++,s=document.createElement("div"),o=e.onClose;e.onClose=()=>{m(t,o)};const i=(0,a.bF)(u,e);(0,n.XX)(i,s),document.body.appendChild(s);const l=i.component.proxy;l.show(e);const r={id:t,vnode:i,vm:l,container:s};return h.push(r),{close:()=>{l.close()}}};function m(e,t){const s=h.findIndex((t=>t.id===e));if(-1===s)return;const{vm:a,container:o}=h[s];a&&("function"===typeof t&&t(),(0,n.XX)(null,o),document.body.removeChild(o),h.splice(s,1))}["success","error","warning","info"].forEach((e=>{p[e]=t=>("string"===typeof t?t={message:t,type:e}:(t=t||{},t.type=e),p(t))})),p.permanent=e=>("string"===typeof e&&(e={message:e}),e=e||{},e.duration=0,e.showClose=!1!==e.showClose,p(e)),p.closeAll=function(){for(let e=h.length-1;e>=0;e--)h[e].vm.close()};var f=p},4493:function(e,t,s){s.d(t,{A:function(){return Le}});var a=s(1411),n=s(2515),o=s(1561);const i={class:"container"},l=["src"],r={key:0},c=["src"],d={class:"burger-container"},u={key:0,class:"unread-dot burger-badge"},h={class:"navbar-end"},g={key:0,class:"navbar-item user-dropdown",style:{padding:"0"}},p={class:"avatar-wrapper"},m=["src","alt"],f={key:0,class:"unread-dot avatar-badge"},v={class:"user-nickname"},k={class:"dropdown-menu"},b={key:0,class:"unread-dot"},y={key:1,class:"navbar-item"},w={key:0,class:"activation-dialog"},C={class:"activation-dialog-content"},L={class:"activation-methods"},_={class:"activation-method"},E={class:"activation-method"},A={class:"activation-method"},I=["disabled"],x={key:1,class:"message-modal"},M={class:"message-modal-content"},X={class:"message-modal-header"},P={class:"message-modal-body",ref:"messageContainer"},S={key:0,class:"no-messages"},j={key:1,class:"message-list"},z={class:"message-header"},F={class:"message-time"},q={key:0,class:"unread-tag"},U=["innerHTML"],T={key:1,class:"message-content"},D=["href"],W={key:1},$={key:2,class:"message-content"},Q=["href"],O={key:1},V={key:3,class:"message-content"},B=["href"],N={key:1},R={key:4,class:"message-content"},J={key:5,class:"message-content"},Y=["href"],Z={key:1},G={key:6,class:"message-content"},K=["href"],H={key:1},ee={key:7,class:"message-content"},te=["href"],se={key:1},ae={key:8,class:"message-content"},ne={style:{"margin-top":"8px"}},oe={key:9,class:"message-content"},ie={style:{display:"inline-block","vertical-align":"middle",margin:"0 4px"}},le={style:{"margin-top":"8px"}},re=["href"],ce={key:10,class:"message-content"},de={key:2,class:"pagination"},ue=["disabled"],he={class:"page-info"},ge=["disabled"];function pe(e,t,s,pe,me,fe){const ve=(0,a.g2)("router-link"),ke=(0,a.g2)("UserMeta");return(0,a.uX)(),(0,a.CE)("nav",{class:(0,n.C4)(["navbar",{"navbar-kaoyan":me.kaoyan}])},[(0,a.Lk)("div",i,[(0,a.Lk)("div",{class:(0,n.C4)(["navbar-brand",me.isYuandan?"navbar-brand-yuandan":""])},[(0,a.bF)(ve,{to:"/",class:"navbar-logo"},{default:(0,a.k6)((()=>[(0,a.Lk)("img",{src:me.kaoyan?"https://download.xn--xhq44jb2fzpc.com/images/logo-ky.png":"https://download.xn--xhq44jb2fzpc.com/images/logo-hd.png",alt:"NEU小站",class:"navbar-logo-img"},null,8,l),me.kaoyan?((0,a.uX)(),(0,a.CE)("span",r,"一战成硕")):((0,a.uX)(),(0,a.CE)("img",{key:1,src:me.isYuandan?"https://download.xn--xhq44jb2fzpc.com/images/head_f.png":fe.isChristmas?"https://download.xn--xhq44jb2fzpc.com/images/sdb_ys.png":"https://download.xn--xhq44jb2fzpc.com/images/head.png",alt:"NEU小站",class:"navbar-title-img",style:(0,n.Tr)(me.isYuandan?{height:"45px",marginBottom:"10px"}:{})},null,12,c)),fe.currentTagConfig?((0,a.uX)(),(0,a.CE)("span",{key:2,style:(0,n.Tr)({backgroundColor:fe.currentTagConfig.backgroundColor}),class:"route-tag"},(0,n.v_)(fe.currentTagConfig.text),5)):(0,a.Q3)("",!0)])),_:1}),(0,a.Lk)("div",d,[(0,a.Lk)("div",{class:(0,n.C4)(["navbar-burger",{"is-active":me.isMenuActive}]),onClick:t[0]||(t[0]=(...e)=>fe.toggleMenu&&fe.toggleMenu(...e))},t[14]||(t[14]=[(0,a.Lk)("span",null,null,-1),(0,a.Lk)("span",null,null,-1),(0,a.Lk)("span",null,null,-1)]),2),me.userInfo&&me.userInfo.messageUnread?((0,a.uX)(),(0,a.CE)("span",u)):(0,a.Q3)("",!0)])],2),(0,a.Lk)("div",{class:(0,n.C4)(["navbar-menu",{"is-active":me.isMenuActive}])},[(0,a.Lk)("div",h,[(0,a.bF)(ve,{to:"/qa",class:"navbar-item"},{default:(0,a.k6)((()=>t[15]||(t[15]=[(0,a.eW)(" 年度问卷 "),(0,a.Lk)("span",{class:"new-badge"},"2025",-1)]))),_:1}),(0,a.bF)(ve,{to:"/strategy",class:"navbar-item"},{default:(0,a.k6)((()=>t[16]||(t[16]=[(0,a.eW)("攻略指南")]))),_:1}),(0,a.bF)(ve,{to:"/resources",class:"navbar-item"},{default:(0,a.k6)((()=>t[17]||(t[17]=[(0,a.eW)("资源共享")]))),_:1}),(0,a.bF)(ve,{to:"/app",class:"navbar-item"},{default:(0,a.k6)((()=>t[18]||(t[18]=[(0,a.eW)(" 应用中心 ")]))),_:1}),(0,a.bF)(ve,{to:"/search",class:"navbar-item"},{default:(0,a.k6)((()=>t[19]||(t[19]=[(0,a.eW)("搜索")]))),_:1}),(0,a.bF)(ve,{to:"/advice",class:"navbar-item"},{default:(0,a.k6)((()=>t[20]||(t[20]=[(0,a.eW)(" 反馈 ")]))),_:1}),(0,a.bF)(ve,{to:"/subscribe",class:"navbar-item"},{default:(0,a.k6)((()=>t[21]||(t[21]=[(0,a.eW)("赞助")]))),_:1}),(0,a.bF)(ve,{to:"/about",class:"navbar-item"},{default:(0,a.k6)((()=>t[22]||(t[22]=[(0,a.eW)("关于")]))),_:1}),me.userInfo?((0,a.uX)(),(0,a.CE)("div",g,[(0,a.Lk)("div",{class:"user-info",onClick:t[1]||(t[1]=(...e)=>fe.toggleDropdown&&fe.toggleDropdown(...e))},[(0,a.Lk)("div",p,[(0,a.Lk)("img",{src:me.userInfo.avatar_path,class:"user-avatar",alt:me.userInfo.nickname},null,8,m),me.userInfo.messageUnread?((0,a.uX)(),(0,a.CE)("span",f)):(0,a.Q3)("",!0)]),(0,a.Lk)("span",v,(0,n.v_)(me.userInfo.nickname),1),(0,a.Lk)("span",{class:(0,n.C4)(["dropdown-arrow",{"is-active":me.isDropdownActive}])},"▼",2)]),(0,a.bo)((0,a.Lk)("div",k,[(0,a.Lk)("div",{class:"dropdown-item",onClick:t[2]||(t[2]=(...e)=>fe.handleUserCenter&&fe.handleUserCenter(...e))},"个人中心"),(0,a.Lk)("div",{class:"dropdown-item",onClick:t[3]||(t[3]=(...e)=>fe.handleMessages&&fe.handleMessages(...e))},[t[23]||(t[23]=(0,a.eW)(" 我的消息 ")),me.userInfo.messageUnread?((0,a.uX)(),(0,a.CE)("span",b)):(0,a.Q3)("",!0)]),(0,a.Lk)("div",{class:"dropdown-item",onClick:t[4]||(t[4]=(...e)=>fe.handleLogout&&fe.handleLogout(...e))},"退出登录")],512),[[o.aG,me.isDropdownActive]])])):((0,a.uX)(),(0,a.CE)("div",y,[(0,a.Lk)("a",{class:"login-btn",onClick:t[5]||(t[5]=(...e)=>fe.handleLogin&&fe.handleLogin(...e))},"登录")]))])],2)]),me.showActivationDialog?((0,a.uX)(),(0,a.CE)("div",w,[(0,a.Lk)("div",C,[t[30]||(t[30]=(0,a.Lk)("h3",null,"账户激活",-1)),t[31]||(t[31]=(0,a.Lk)("p",null,"您的账户尚未激活,请选择以下一种方式进行激活。如果无法激活,请退出登录后在“关于”页面联系网站管理员。",-1)),(0,a.Lk)("div",L,[(0,a.Lk)("div",_,[t[24]||(t[24]=(0,a.Lk)("h4",null,"方式 1:NEU 校园网验证",-1)),t[25]||(t[25]=(0,a.Lk)("p",null,"请连接 NEU 校园网后点击下面的验证按钮(暂不支持秦皇岛分校)",-1)),(0,a.Lk)("button",{onClick:t[6]||(t[6]=(...e)=>fe.handleNetworkVerify&&fe.handleNetworkVerify(...e)),class:"verify-btn"},"校园网验证")]),(0,a.Lk)("div",E,[t[26]||(t[26]=(0,a.Lk)("h4",null,"方式 2:校园邮箱验证",-1)),t[27]||(t[27]=(0,a.Lk)("p",null,"使用 @stu.neu.edu.cn、@stu.neuq.edu.cn 或 @mails.neu.edu.cn 后缀的校园邮箱验证",-1)),(0,a.Lk)("button",{onClick:t[7]||(t[7]=(...e)=>fe.handleEmailVerify&&fe.handleEmailVerify(...e)),class:"verify-btn"},"邮箱验证")]),(0,a.Lk)("div",A,[t[28]||(t[28]=(0,a.Lk)("h4",null,"方式 3:学生证照片认证",-1)),t[29]||(t[29]=(0,a.Lk)("p",null,[(0,a.eW)("请上传清晰、无遮挡的学生证(校园卡,"),(0,a.Lk)("strong",null,"非火车票学生证"),(0,a.eW)(")个人信息面照片,并清晰露出公章(支持JPG/PNG/WEBP格式,不超过5M)")],-1)),(0,a.Lk)("input",{type:"file",onChange:t[8]||(t[8]=(...e)=>fe.handleFileSelect&&fe.handleFileSelect(...e)),accept:"image/jpeg,image/png,image/webp",ref:"fileInput",style:{display:"none"}},null,544),(0,a.Lk)("button",{onClick:t[9]||(t[9]=(...e)=>fe.triggerFileInput&&fe.triggerFileInput(...e)),class:"verify-btn",disabled:me.isUploading},(0,n.v_)(me.isUploading?"上传认证中...":"上传学生证"),9,I)])]),(0,a.Lk)("button",{onClick:t[10]||(t[10]=(...e)=>fe.handleLogout&&fe.handleLogout(...e)),class:"close-btn"},"退出登录")])])):(0,a.Q3)("",!0),me.showMessageModal?((0,a.uX)(),(0,a.CE)("div",x,[(0,a.Lk)("div",M,[(0,a.Lk)("div",X,[t[32]||(t[32]=(0,a.Lk)("h3",null,"我的消息",-1)),(0,a.Lk)("span",{class:"close-icon",onClick:t[11]||(t[11]=(...e)=>fe.closeMessageModal&&fe.closeMessageModal(...e))},"×")]),(0,a.Lk)("div",P,[0===me.messages.length?((0,a.uX)(),(0,a.CE)("div",S," 暂无消息 ")):((0,a.uX)(),(0,a.CE)("div",j,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(me.messages,(e=>((0,a.uX)(),(0,a.CE)("div",{key:e.id,class:"message-item"},[(0,a.Lk)("div",z,[(0,a.Lk)("span",F,(0,n.v_)(fe.formatDate(e.created_at)),1),e.status?(0,a.Q3)("",!0):((0,a.uX)(),(0,a.CE)("span",q,"未读"))]),0===e.type?((0,a.uX)(),(0,a.CE)("div",{key:0,class:"message-content",style:{"white-space":"pre-wrap"},innerHTML:e.content},null,8,U)):1===e.type?((0,a.uX)(),(0,a.CE)("div",T,[t[33]||(t[33]=(0,a.eW)(" 您在《")),e.article_id?((0,a.uX)(),(0,a.CE)("a",{key:0,href:"https://www.xn--xhq44jb2fzpc.com/article/"+e.article_id,target:"_blank"},(0,n.v_)(e.article_title),9,D)):((0,a.uX)(),(0,a.CE)("span",W,(0,n.v_)(e.article_title),1)),(0,a.eW)("》内容下的「"+(0,n.v_)(e.original_content)+"」评论被回复:「"+(0,n.v_)(e.reply_content)+"」 ",1)])):2===e.type?((0,a.uX)(),(0,a.CE)("div",$,[t[34]||(t[34]=(0,a.eW)(" 您的投稿《")),e.article_id?((0,a.uX)(),(0,a.CE)("a",{key:0,href:"https://www.xn--xhq44jb2fzpc.com/article/"+e.article_id,target:"_blank"},(0,n.v_)(e.title),9,Q)):((0,a.uX)(),(0,a.CE)("span",O,(0,n.v_)(e.title),1)),(0,a.eW)("》审核"+(0,n.v_)(e.pass?"已通过":"未通过")+(0,n.v_)(e.note?",审核备注:"+e.note:""),1)])):3===e.type?((0,a.uX)(),(0,a.CE)("div",V,[t[35]||(t[35]=(0,a.eW)(' 您添加的课程"')),e.course_id?((0,a.uX)(),(0,a.CE)("a",{key:0,href:"https://course.xn--xhq44jb2fzpc.com/courses?c="+fe.encodeBase64(e.course_id),target:"_blank"},(0,n.v_)(e.course_name),9,B)):((0,a.uX)(),(0,a.CE)("span",N,(0,n.v_)(e.course_name),1)),(0,a.eW)('"审核'+(0,n.v_)(e.course_status),1)])):4===e.type?((0,a.uX)(),(0,a.CE)("div",R," 您的密钥「"+(0,n.v_)(e.key_plaintext)+"」使用次数已用尽,继续投稿可获得新的密钥。 ",1)):5===e.type?((0,a.uX)(),(0,a.CE)("div",J,[t[36]||(t[36]=(0,a.eW)(" 您在《")),e.article_id?((0,a.uX)(),(0,a.CE)("a",{key:0,href:"https://www.xn--xhq44jb2fzpc.com/article/"+e.article_id,target:"_blank"},(0,n.v_)(e.article_title),9,Y)):((0,a.uX)(),(0,a.CE)("span",Z,(0,n.v_)(e.article_title),1)),(0,a.eW)("》内容下的「"+(0,n.v_)(e.content)+"」评论被点赞。 ",1)])):6===e.type?((0,a.uX)(),(0,a.CE)("div",G,[t[37]||(t[37]=(0,a.eW)(" 您的内容《")),e.article_id?((0,a.uX)(),(0,a.CE)("a",{key:0,href:"https://www.xn--xhq44jb2fzpc.com/article/"+e.article_id,target:"_blank"},(0,n.v_)(e.article_title),9,K)):((0,a.uX)(),(0,a.CE)("span",H,(0,n.v_)(e.article_title),1)),(0,a.eW)("》收到新评论:「"+(0,n.v_)(e.comment_content)+"」 ",1)])):7===e.type?((0,a.uX)(),(0,a.CE)("div",ee,[t[38]||(t[38]=(0,a.eW)(" 恭喜您的内容《")),e.article_id?((0,a.uX)(),(0,a.CE)("a",{key:0,href:"https://www.xn--xhq44jb2fzpc.com/article/"+e.article_id,target:"_blank"},(0,n.v_)(e.article_title),9,te)):((0,a.uX)(),(0,a.CE)("span",se,(0,n.v_)(e.article_title),1)),(0,a.eW)("》浏览量达到"+(0,n.v_)(e.view_count)+",感谢您为NEU小站贡献优质内容,小站因为有你而更加精彩~ ",1)])):8===e.type?((0,a.uX)(),(0,a.CE)("div",ae,[t[39]||(t[39]=(0,a.Lk)("div",null,"您有一个新粉丝:",-1)),(0,a.Lk)("div",ne,[(0,a.bF)(ke,{id:e.follower_id},null,8,["id"])])])):9===e.type?((0,a.uX)(),(0,a.CE)("div",oe,[(0,a.Lk)("div",null,[t[40]||(t[40]=(0,a.eW)("您关注的用户")),(0,a.Lk)("span",ie,[(0,a.bF)(ke,{id:e.author_id},null,8,["id"])]),t[41]||(t[41]=(0,a.eW)("有新的投稿内容:"))]),(0,a.Lk)("div",le,[t[42]||(t[42]=(0,a.eW)(" 《")),(0,a.Lk)("a",{href:"https://www.xn--xhq44jb2fzpc.com/article/"+e.article_id,target:"_blank"},(0,n.v_)(e.article_title),9,re),t[43]||(t[43]=(0,a.eW)("》 "))])])):((0,a.uX)(),(0,a.CE)("div",ce,(0,n.v_)(e.error||"未知消息类型"),1))])))),128))])),me.totalPages>1?((0,a.uX)(),(0,a.CE)("div",de,[(0,a.Lk)("button",{disabled:1===me.currentPage,onClick:t[12]||(t[12]=e=>fe.loadMessages(me.currentPage-1)),class:"page-btn"},"上一页",8,ue),(0,a.Lk)("span",he,(0,n.v_)(me.currentPage)+" / "+(0,n.v_)(me.totalPages),1),(0,a.Lk)("button",{disabled:me.currentPage===me.totalPages,onClick:t[13]||(t[13]=e=>fe.loadMessages(me.currentPage+1)),class:"page-btn"},"下一页",8,ge)])):(0,a.Q3)("",!0)],512)])])):(0,a.Q3)("",!0)],2)}s(4945),s(4600),s(4201),s(166),s(5020);var me=s(2453),fe=s(2062),ve=s(6707),ke=s(122),be=s(6042),ye={name:"NavBar",components:{UserMeta:be.A},data(){return{kaoyan:!1,isYuandan:!0,isMenuActive:!1,isDropdownActive:!1,userInfo:null,showActivationDialog:!1,isActivated:!1,isUploading:!1,showMessageModal:!1,messages:[],loading:!1,currentPage:1,totalPages:1,pageSize:10,tagConfigurations:[{text:"应用",backgroundColor:"#ff8c00",routes:["/app","/app/"],wildcard:!1},{text:"工具",backgroundColor:"#3273dc",routes:["/widgets"],wildcard:!0}]}},computed:{isChristmas(){const e=new Date,t=new Date("2025-12-26T00:00:00");return e!!t.routes.includes(e)||!!t.wildcard&&t.routes.some((t=>e===t||e.startsWith(t+"/")))))||null}},mounted(){this.checkLoginStatus()},methods:{handleLogin(){(0,ke.A)().then((e=>{console.log(e),this.checkLoginStatus()})).catch((e=>{console.log(e)}))},toggleMenu(){this.isMenuActive=!this.isMenuActive},toggleDropdown(){this.isDropdownActive=!this.isDropdownActive},handleUserCenter(){this.isDropdownActive=!1,this.$router.push("/user-center")},handleLogout(){const e=window.location.hostname.includes("localhost")?"localhost":window.location.hostname.split(".").slice(-2).join(".");me.A.remove("token",{domain:e,path:"/"}),this.userInfo=null,window.location.reload()},checkLoginStatus(){const e=me.A.get("token");e&&fe.A.get("https://newfront.xn--xhq44jb2fzpc.com/user/info",{headers:{Authorization:e}}).then((e=>{this.userInfo=e.data,e.data.banned?(this.$barMessage({message:"您的账户已被封禁,请联系网站管理员",type:"error"}),ve.A.alert('您的账户已被封禁,如有疑问请在"关于"页面联系网站管理员。',"账户状态异常",{confirmText:"退出登录",cancel:!1}).then((()=>{this.handleLogout()})).catch((()=>{this.handleLogout()}))):(this.isActivated=e.data.activated,this.isActivated||(this.showActivationDialog=!0))})).catch((e=>{console.log(e),this.userInfo=null}))},closeActivationDialog(){this.showActivationDialog=!1},handleNetworkVerify(){const e=me.A.get("token");e?fe.A.get("https://userlogin.xn--xhq44jb2fzpc.com/qv",{headers:{Authorization:e}}).then((e=>{ve.A.alert(e.data.message,"提示"),this.isActivated=!0,this.showActivationDialog=!1})).catch((e=>{e.response&&e.response.data?ve.A.alert(`${e.response.data.message} 当前IP: ${e.response.data.ip||"未知"}`,"提示"):ve.A.alert("验证失败,请稍后重试","提示")})):ve.A.alert("您未登录,请先登录后操作!","提示")},handleEmailVerify(){const e=me.A.get("token");e?fe.A.get("https://userlogin.xn--xhq44jb2fzpc.com/check-email",{headers:{Authorization:e}}).then((e=>{ve.A.alert(e.data.message,"提示"),this.isActivated=!0,this.showActivationDialog=!1})).catch((t=>{t.response&&403===t.response.status?this.promptForCampusEmail(e):t.response&&t.response.data?ve.A.alert(t.response.data.message||"发生未知错误,请稍后重试","提示"):ve.A.alert("验证失败,请稍后重试","提示")})):ve.A.alert("您未登录,请先登录后操作!","提示")},promptForCampusEmail(e){(0,ve.A)({title:"校园邮箱验证",message:"请输入您的校园邮箱:",showInput:!0,inputPlaceholder:"请输入校园邮箱",confirmText:"确认",cancelText:"取消",cancel:!0}).then((({value:t})=>{t?t.endsWith("@stu.neu.edu.cn")||t.endsWith("@stu.neuq.edu.cn")||t.endsWith("@mails.neu.edu.cn")?this.sendCampusVerificationEmail(t,e):ve.A.alert("请输入有效的 @stu.neu.edu.cn、@stu.neuq.edu.cn 或 @mails.neu.edu.cn 校园邮箱!","提示"):ve.A.alert("邮箱不能为空","提示")})).catch((()=>{}))},sendCampusVerificationEmail(e,t){fe.A.post("https://userlogin.xn--xhq44jb2fzpc.com/send-campus-verify",{campus_email:e},{headers:{Authorization:t,"Content-Type":"application/json"}}).then((t=>{ve.A.alert(`验证邮件已发送至 ${e},请检查您的邮箱完成验证。`,"提示")})).catch((e=>{e.response&&e.response.data?ve.A.alert(`发送验证邮件失败:${e.response.data.message}`,"提示"):ve.A.alert("发送验证邮件失败,请稍后重试","提示")}))},handleMessages(){this.isDropdownActive=!1,this.showMessageModal=!0,this.loadMessages(1)},closeMessageModal(){this.showMessageModal=!1,this.checkLoginStatus()},loadMessages(e){this.currentPage=e,fe.A.get("https://newfront.xn--xhq44jb2fzpc.com/message/get",{headers:{Authorization:me.A.get("token")},params:{page:e}}).then((e=>{this.messages=e.data.messages,this.totalPages=e.data.totalPages,this.pageSize=e.data.pageSize})).catch((e=>{console.error("获取消息失败:",e),ve.A.alert("获取消息失败,请稍后再试。","错误")}))},formatDate(e){const t=new Date(e);return t.toLocaleDateString()+" "+t.toLocaleTimeString()},encodeBase64(e){return window.btoa(e)},triggerFileInput(){this.$refs.fileInput.click()},async handleFileSelect(e){const t=e.target.files[0];if(!t)return;const s=["image/jpeg","image/png","image/webp"];if(!s.includes(t.type))return void ve.A.alert("不支持的文件格式,请上传 JPG, PNG, 或 WEBP 图片。","格式错误");const a=5242880;if(t.size>a)ve.A.alert("文件大小不能超过 5MB。","文件过大");else{this.isUploading=!0;try{const e=me.A.get("token");if(!e)return ve.A.alert("您未登录,请先登录后操作!","提示"),void(this.isUploading=!1);const s=await fe.A.post("https://newfront.xn--xhq44jb2fzpc.com/freshman/validate_card/get-upload-url",{filename:t.name},{headers:{Authorization:e}}),{uploadUrl:a,objectPath:n}=s.data;await fe.A.put(a,t,{headers:{"Content-Type":t.type}});await fe.A.post("https://newfront.xn--xhq44jb2fzpc.com/freshman/validate_card/verify",{objectPath:n},{headers:{Authorization:e}});ve.A.alert("学生证认证成功!","激活成功"),this.isActivated=!0,this.showActivationDialog=!1,this.checkLoginStatus()}catch(n){let e="操作失败,请稍后重试。";n.response&&n.response.data&&n.response.data.message&&(e=n.response.data.message),ve.A.alert(e,"错误")}finally{this.isUploading=!1,this.$refs.fileInput.value=""}}}}},we=s(6968);const Ce=(0,we.A)(ye,[["render",pe],["__scopeId","data-v-248d67cd"]]);var Le=Ce},6042:function(e,t,s){s.d(t,{A:function(){return H}});var a=s(1411),n=s(2515),o=s(1561);const i={class:"user-meta"},l={class:"avatar-wrapper"},r=["src"],c={key:0,class:"avatar-loading"},d={key:0,src:"https://download.xn--xhq44jb2fzpc.com/images/vip_g3.svg",class:"vip-badge",alt:"VIP",title:"VIP用户"},u={class:"user-badges"},h=["title"],g=["title"],p={key:2,class:"badge medal"},m={class:"card-container"},f={class:"detail-header"},v=["src"],k={class:"detail-right"},b={key:0,src:"https://download.xn--xhq44jb2fzpc.com/images/vip_g3.svg",class:"vip-badge",alt:"VIP",title:"VIP用户"},y={class:"user-badges"},w=["title"],C=["title"],L={key:2,class:"badge medal"},_={key:0,class:"user-sign"},E={class:"sign-text"},A={class:"user-stats"},I={class:"stat-item"},x={class:"stat-value"},M={class:"stat-item"},X={class:"stat-value"},P={key:1,class:"user-submissions"},S={class:"submission-header"},j={key:0,class:"pagination-controls"},z=["disabled"],F={class:"page-info"},q=["disabled"],U={class:"submission-list"},T=["onClick"],D={class:"submission-title"},W={class:"submission-tags"},$={key:0,class:"tag official"},Q={key:1,class:"tag highlight"},O={key:2,class:"tag top"},V={class:"card-footer"};function B(e,t,s,B,N,R){return(0,a.uX)(),(0,a.CE)("div",i,[(0,a.Lk)("div",{class:"user-basic",ref:"userBasic",onMouseenter:t[0]||(t[0]=(...e)=>R.handleMouseEnter&&R.handleMouseEnter(...e))},[(0,a.Lk)("div",l,[(0,a.Lk)("img",{src:N.userInfo.avatarUrl,alt:"用户头像",class:"avatar"},null,8,r),N.loading?((0,a.uX)(),(0,a.CE)("div",c,t[6]||(t[6]=[(0,a.Lk)("div",{class:"loading-spinner"},null,-1)]))):(0,a.Q3)("",!0)]),(0,a.Lk)("div",{class:(0,n.C4)(["user-name",{"colorful-name":N.userInfo.color_name}])},[(0,a.eW)((0,n.v_)(N.userInfo.nickname)+" ",1),N.userInfo.is_vip?((0,a.uX)(),(0,a.CE)("img",d)):(0,a.Q3)("",!0)],2),(0,a.Lk)("div",u,[N.userInfo.verified?((0,a.uX)(),(0,a.CE)("span",{key:0,class:"badge verified",title:N.userInfo.verified},"认证",8,h)):(0,a.Q3)("",!0),N.userInfo.invited?((0,a.uX)(),(0,a.CE)("span",{key:1,class:"badge invited",title:N.userInfo.invited},"特邀",8,g)):(0,a.Q3)("",!0),1===N.userInfo.medal?((0,a.uX)(),(0,a.CE)("span",p,"小站奖章")):(0,a.Q3)("",!0)])],544),((0,a.uX)(),(0,a.Wv)(a.Im,{to:"body"},[(0,a.bF)(o.eB,{name:"detail-fade"},{default:(0,a.k6)((()=>[N.showDetail?((0,a.uX)(),(0,a.CE)("div",{key:0,class:"user-detail",ref:"userDetail",style:(0,n.Tr)(N.popupStyle),onMouseenter:t[4]||(t[4]=e=>N.showDetail=!0),onMouseleave:t[5]||(t[5]=e=>N.showDetail=!1)},[(0,a.Lk)("div",m,[(0,a.Lk)("div",f,[t[7]||(t[7]=(0,a.Lk)("div",{class:"header-bg"},null,-1)),(0,a.Lk)("img",{src:N.userInfo.avatarUrl,alt:"用户头像",class:"detail-avatar"},null,8,v),(0,a.Lk)("div",k,[(0,a.Lk)("div",{class:(0,n.C4)(["detail-name",{"colorful-name":N.userInfo.color_name}])},[(0,a.eW)((0,n.v_)(N.userInfo.nickname)+" ",1),N.userInfo.is_vip?((0,a.uX)(),(0,a.CE)("img",b)):(0,a.Q3)("",!0)],2),(0,a.Lk)("div",y,[N.userInfo.verified?((0,a.uX)(),(0,a.CE)("span",{key:0,class:"badge verified",title:N.userInfo.verified},"认证",8,w)):(0,a.Q3)("",!0),N.userInfo.invited?((0,a.uX)(),(0,a.CE)("span",{key:1,class:"badge invited",title:N.userInfo.invited},"特邀",8,C)):(0,a.Q3)("",!0),1===N.userInfo.medal?((0,a.uX)(),(0,a.CE)("span",L,"小站奖章")):(0,a.Q3)("",!0)])])]),N.userInfo.sign?((0,a.uX)(),(0,a.CE)("div",_,[t[8]||(t[8]=(0,a.Lk)("div",{class:"sign-icon"},"✍️",-1)),(0,a.Lk)("div",E,(0,n.v_)(N.userInfo.sign),1)])):(0,a.Q3)("",!0),(0,a.Lk)("div",A,[(0,a.Lk)("div",I,[(0,a.Lk)("div",x,(0,n.v_)(N.userInfo.follower),1),t[9]||(t[9]=(0,a.Lk)("div",{class:"stat-label"},"粉丝",-1))]),t[11]||(t[11]=(0,a.Lk)("div",{class:"stat-separator"},null,-1)),(0,a.Lk)("div",M,[(0,a.Lk)("div",X,(0,n.v_)(N.userInfo.following),1),t[10]||(t[10]=(0,a.Lk)("div",{class:"stat-label"},"关注",-1))])]),N.submissions.length>0?((0,a.uX)(),(0,a.CE)("div",P,[(0,a.Lk)("div",S,[t[12]||(t[12]=(0,a.Lk)("span",null,"TA的投稿",-1)),N.totalPages>1?((0,a.uX)(),(0,a.CE)("div",j,[(0,a.Lk)("button",{class:"page-btn",disabled:1===N.currentPage,onClick:t[1]||(t[1]=(0,o.D$)((e=>R.changePage(N.currentPage-1)),["stop"]))}," < ",8,z),(0,a.Lk)("span",F,(0,n.v_)(N.currentPage)+"/"+(0,n.v_)(N.totalPages),1),(0,a.Lk)("button",{class:"page-btn",disabled:N.currentPage===N.totalPages,onClick:t[2]||(t[2]=(0,o.D$)((e=>R.changePage(N.currentPage+1)),["stop"]))}," > ",8,q)])):(0,a.Q3)("",!0)]),(0,a.Lk)("div",U,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(N.submissions,(e=>((0,a.uX)(),(0,a.CE)("div",{key:e.id,class:"submission-item",onClick:t=>R.handleArticleClick(e.id)},[(0,a.Lk)("div",D,(0,n.v_)(e.title),1),(0,a.Lk)("div",W,[e.official?((0,a.uX)(),(0,a.CE)("span",$,"官方")):(0,a.Q3)("",!0),e.highlight?((0,a.uX)(),(0,a.CE)("span",Q,"优质")):(0,a.Q3)("",!0),e.top?((0,a.uX)(),(0,a.CE)("span",O,"置顶")):(0,a.Q3)("",!0)])],8,T)))),128))])])):(0,a.Q3)("",!0),(0,a.Lk)("div",V,[s.showFollow?((0,a.uX)(),(0,a.CE)("button",{key:0,class:(0,n.C4)(["follow-btn",{followed:N.isFollowing,"disabled-look":!N.isLoggedIn}]),onClick:t[3]||(t[3]=(...e)=>R.handleFollow&&R.handleFollow(...e))},(0,n.v_)(N.isFollowing?"取消关注":"+ 关注"),3)):(0,a.Q3)("",!0)])])],36)):(0,a.Q3)("",!0)])),_:1})]))])}var N=s(2062),R=s(6707),J=s(2453);let Y=null;var Z={name:"UserMeta",props:{id:{type:[String,Number],required:!0},showFollow:{type:Boolean,default:!0}},data(){return{userInfo:{nickname:"默认昵称",verified:null,invited:null,medal:0,avatarUrl:"https://download.东北大学.com/avatar/default.png",follower:0,following:0,sign:"这个人很懒,还没有写个性签名~",color_name:!1},submissions:[],currentPage:1,totalPages:1,total:0,showDetail:!1,loading:!1,error:null,isFollowing:!1,isLoggedIn:!1,popupStyle:{}}},created(){this.showFollow&&this.checkLoginStatus(),this.fetchUserInfo(),this.fetchUserSubmissions(),this.showFollow&&this.isLoggedIn&&this.checkFollowStatus()},mounted(){document.addEventListener("click",this.handleClickOutside)},beforeUnmount(){document.removeEventListener("click",this.handleClickOutside),Y===this&&(Y=null)},watch:{id(){this.fetchUserInfo(),this.fetchUserSubmissions(),this.showFollow&&this.isLoggedIn&&this.checkFollowStatus()},showDetail(e){e?(Y&&Y!==this&&(Y.showDetail=!1),Y=this,this.showFollow&&this.isLoggedIn&&this.checkFollowStatus()):Y===this&&(Y=null)}},methods:{handleMouseEnter(){this.updatePopupPosition(),this.showDetail=!0},updatePopupPosition(){const e=this.$refs.userBasic;if(!e)return;const t=e.getBoundingClientRect();this.popupStyle={top:t.bottom+window.scrollY+8+"px",left:t.left+window.scrollX+"px",position:"absolute",zIndex:9999}},checkLoginStatus(){const e=J.A.get("token");this.isLoggedIn=!!e},async checkFollowStatus(){if(!this.isLoggedIn)return;const e=J.A.get("token");try{const t=await N.A.post("https://newfront.xn--xhq44jb2fzpc.com/user/follow/status",{user_id:this.id},{headers:{Authorization:e}});this.isFollowing=t.data.is_following}catch(t){console.error("检查关注状态失败:",t)}},async fetchUserInfo(){this.loading=!0;try{const e=await N.A.get(`https://userlogin.xn--xhq44jb2fzpc.com/submission/get-author-info?id=${this.id}`);this.userInfo={...e.data,follower:e.data.follower||0,following:e.data.following||0,sign:e.data.sign||"这个人很懒,还没有写个性签名~",color_name:e.data.color_name||!1}}catch(e){this.error="获取用户信息失败",console.error("获取用户信息失败:",e)}finally{this.loading=!1}},async fetchUserSubmissions(e=1){try{const t=await N.A.get(`https://userlogin.xn--xhq44jb2fzpc.com/submission/get-author-submissions?id=${this.id}&page=${e}`);t.data?(this.submissions=t.data.list||[],this.total=t.data.total||0,this.currentPage=t.data.page||1,this.totalPages=Math.ceil(this.total/5)):(this.submissions=[],this.total=0,this.totalPages=0)}catch(t){console.error("获取用户投稿失败:",t),this.submissions=[],this.total=0,this.totalPages=0}},changePage(e){e<1||e>this.totalPages||this.fetchUserSubmissions(e)},handleClickOutside(e){const t=this.$el,s=this.$refs.userDetail;if(this.showDetail){const a=t.contains(e.target),n=s&&s.contains(e.target);a||n||(this.showDetail=!1)}},handleFollow(){if(!this.isLoggedIn)return void R.A.alert("请先登录后再关注用户!","提示");const e=J.A.get("token");if(!e)return this.isLoggedIn=!1,void R.A.alert("登录已过期,请重新登录!","提示");const t=this.isFollowing?"取消关注":"关注",s=async()=>{try{const s=await N.A.post("https://newfront.xn--xhq44jb2fzpc.com/user/follow/do",{user_id:this.id},{headers:{Authorization:e}});this.isFollowing=s.data.is_following,this.fetchUserInfo(),this.$barMessage.success(`${t}成功`)}catch(s){console.error(`${t}失败:`,s),s.response&&s.response.data&&s.response.data.message?this.$barMessage.error(s.response.data.message):R.A.alert("操作失败,请稍后重试","错误")}};this.isFollowing?R.A.confirm("确定取消关注该用户吗?","确认操作").then(s).catch((()=>{})):s()},handleArticleClick(e){window.location.href=`/article/${e}`}}},G=s(6968);const K=(0,G.A)(Z,[["render",B],["__scopeId","data-v-69166869"]]);var H=K},6707:function(e,t,s){s.d(t,{A:function(){return k}});var a=s(1561),n=s(1411),o=s(2515);const i={class:"message-box"},l={key:0,class:"message-header"},r={class:"message-content"},c={key:0,class:"input-wrapper"},d=["type","placeholder"],u={class:"message-footer"};function h(e,t,s,h,g,p){return(0,n.uX)(),(0,n.Wv)(a.eB,{name:"message-fade"},{default:(0,n.k6)((()=>[s.visible?((0,n.uX)(),(0,n.CE)("div",{key:0,class:"message-overlay",onClick:t[4]||(t[4]=(0,a.D$)(((...e)=>p.handleOverlayClick&&p.handleOverlayClick(...e)),["self"]))},[(0,n.Lk)("div",i,[s.title?((0,n.uX)(),(0,n.CE)("div",l,[(0,n.Lk)("h3",null,(0,o.v_)(s.title),1)])):(0,n.Q3)("",!0),(0,n.Lk)("div",r,[(0,n.Lk)("p",null,(0,o.v_)(s.message),1),s.showInput?((0,n.uX)(),(0,n.CE)("div",c,[(0,n.bo)((0,n.Lk)("input",{"onUpdate:modelValue":t[0]||(t[0]=e=>g.localInputValue=e),type:s.inputType,placeholder:s.inputPlaceholder,class:"message-input",onKeyup:t[1]||(t[1]=(0,a.jR)(((...e)=>p.handleConfirm&&p.handleConfirm(...e)),["enter"]))},null,40,d),[[a.hp,g.localInputValue]])])):(0,n.Q3)("",!0)]),(0,n.Lk)("div",u,[p.cancelVisible?((0,n.uX)(),(0,n.CE)("button",{key:0,class:"btn btn-cancel",onClick:t[2]||(t[2]=(...e)=>p.handleCancel&&p.handleCancel(...e))},(0,o.v_)(s.cancelText),1)):(0,n.Q3)("",!0),p.confirmVisible?((0,n.uX)(),(0,n.CE)("button",{key:1,class:"btn btn-confirm",onClick:t[3]||(t[3]=(...e)=>p.handleConfirm&&p.handleConfirm(...e))},(0,o.v_)(s.confirmText),1)):(0,n.Q3)("",!0)])])])):(0,n.Q3)("",!0)])),_:1})}var g={name:"MessageBox",props:{visible:{type:Boolean,default:!1},title:{type:String,default:""},message:{type:String,required:!0},confirm:{type:Boolean,default:!0},cancel:{type:Boolean,default:!1},confirmText:{type:String,default:"确定"},cancelText:{type:String,default:"取消"},closeOnClickOverlay:{type:Boolean,default:!1},showInput:{type:Boolean,default:!1},inputType:{type:String,default:"text"},inputValue:{type:String,default:""},inputPlaceholder:{type:String,default:"请输入"}},data(){return{localInputValue:""}},watch:{inputValue:{immediate:!0,handler(e){this.localInputValue=e}}},computed:{confirmVisible(){return this.confirm},cancelVisible(){return this.cancel}},methods:{handleConfirm(){this.$emit("confirm",this.localInputValue)},handleCancel(){this.$emit("cancel")},handleOverlayClick(){this.closeOnClickOverlay&&this.$emit("cancel")}}},p=s(6968);const m=(0,p.A)(g,[["render",h],["__scopeId","data-v-f960493c"]]);var f=m;const v=(e={})=>new Promise(((t,s)=>{const n=document.createElement("div");document.body.appendChild(n);const o=(0,a.Ef)(f,{...e,visible:!0,confirm:!1!==e.confirm,cancel:!0===e.cancel,onConfirm:e=>{o.unmount(),document.body.removeChild(n),t({value:e,action:"confirm"})},onCancel:()=>{o.unmount(),document.body.removeChild(n),s({action:"cancel"})}});o.mount(n)}));v.alert=(e,t="",s={})=>v({title:t,message:e,confirm:!0,cancel:!1,...s}),v.confirm=(e,t="",s={})=>v({title:t,message:e,confirm:!0,cancel:!0,...s}),v.prompt=(e,t="",s={})=>v({title:t,message:e,showInput:!0,confirm:!0,cancel:!0,...s});var k=v},9068:function(e,t,s){var a=s(1561),n=s(1411),o=s(2515),i=s(5131),l=s(9658);const r={id:"app"},c={key:0,class:"survey-float-icon"},d={class:"beian-footer"},u={class:"container"},h={class:"copyright"};var g={__name:"App",setup(e){const t=(new Date).getFullYear(),s=(0,i.KR)(!0),g=(0,l.lq)(),p=()=>{"/qa"===g.path||"/qa/"===g.path?s.value=!1:s.value=!sessionStorage.getItem("surveyIconClosed")};(0,n.wB)((()=>g.path),(()=>{p()}));const m=()=>{s.value=!1,sessionStorage.setItem("surveyIconClosed","true")};return(0,n.sV)((()=>{p()})),(e,l)=>{const g=(0,n.g2)("router-view"),p=(0,n.g2)("router-link");return(0,n.uX)(),(0,n.CE)("div",r,[(0,n.bF)(g),s.value?((0,n.uX)(),(0,n.CE)("div",c,[(0,n.Lk)("div",{class:"close-btn",onClick:(0,a.D$)(m,["stop"])},"×"),l[0]||(l[0]=(0,n.Lk)("a",{href:"/qa",target:"_blank"},[(0,n.Lk)("img",{src:"https://download.xn--xhq44jb2fzpc.com/images/wenjuan_icon.png",alt:"2025问卷调查"}),(0,n.Lk)("div",{class:"survey-label"},[(0,n.Lk)("div",null,"年度问卷"),(0,n.Lk)("div",null,"等你来填")])],-1))])):(0,n.Q3)("",!0),(0,n.Lk)("footer",d,[(0,n.Lk)("div",u,[l[2]||(l[2]=(0,n.Lk)("span",{style:{"white-space":"nowrap"}},[(0,n.Lk)("img",{src:"https://beian.mps.gov.cn/web/assets/logo01.6189a29f.png",alt:"公安标识",style:{"vertical-align":"middle",height:"16px",display:"inline-block"}}),(0,n.Lk)("a",{href:"https://beian.mps.gov.cn/",target:"_blank"}," 赣公网安备36090202000259号"),(0,n.eW)(" | "),(0,n.Lk)("a",{href:"https://beian.miit.gov.cn/",target:"_blank"},"赣ICP备2024039267号-1")],-1)),(0,n.Lk)("div",h,[(0,n.eW)(" © 2024-"+(0,o.v_)((0,i.R1)(t))+" ",1),(0,n.bF)(p,{to:"/about"},{default:(0,n.k6)((()=>l[1]||(l[1]=[(0,n.eW)("NEU小站")]))),_:1})])])])])}}};const p=g;var m=p;const f={class:"home"},v={class:"container"},k={class:"welcome-section"},b=["src"],y={class:"quick-links"},w={style:{"text-align":"right","font-weight":"normal"}};function C(e,t,s,a,i,l){const r=(0,n.g2)("Navbar"),c=(0,n.g2)("router-link");return(0,n.uX)(),(0,n.CE)("div",f,[(0,n.bF)(r),(0,n.Lk)("div",v,[(0,n.Lk)("div",k,[(0,n.Lk)("img",{alt:"Vue logo",src:i.kaoyan?"https://download.东北大学.com/images/logo-ky.png":"https://download.东北大学.com/images/logo-hd.png"},null,8,b),t[3]||(t[3]=(0,n.Lk)("h1",null,"欢迎访问NEU小站",-1)),(0,n.Lk)("div",y,[t[1]||(t[1]=(0,n.Lk)("span",{class:"colorful-text"},"2025年度问卷已上线,填写享VIP权益~",-1)),t[2]||(t[2]=(0,n.Lk)("span",null,"入口:",-1)),(0,n.bF)(c,{to:"/qa"},{default:(0,n.k6)((()=>t[0]||(t[0]=[(0,n.eW)("戳这里")]))),_:1})]),(0,n.Lk)("div",{class:(0,o.C4)(["intro-text",{"intro-kaoyan":i.kaoyan}])},[(0,n.Lk)("p",null,(0,o.v_)(i.kaoyan?"这一程霜雪披肩,终淬出笔锋里的晨曦。愿你合卷时,有剑归鞘的从容~":"“让我在接下来的日子里陪你一起成长吧”"),1),(0,n.Lk)("p",w,(0,o.v_)(i.kaoyan?"——致考研NEUers":"——NEU小站"),1)],2)])])])}var L=s(4493),_=s(6707),E={name:"HomeView",components:{Navbar:L.A},created(){document.title="NEU小站"},data(){return{kaoyan:!1}},methods:{goTo(e,t=!1){const s={course:"https://course.xn--xhq44jb2fzpc.com",oj:"https://oj.xn--xhq44jb2fzpc.com"},a=s[e];if(a)if(t){const e=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||window.innerWidth<768;e?_.A.confirm("推荐在电脑端访问,以获得最佳体验。仍要继续吗?","提示").then((()=>{window.open(a,"_blank")})).catch((()=>{})):window.open(a,"_blank")}else window.open(a,"_blank");else console.error(`No URL found for name: ${e}`)}}},A=s(6968);const I=(0,A.A)(E,[["render",C],["__scopeId","data-v-78f59e5a"]]);var x=I,M=s(57),X=s.n(M);X().configure({showSpinner:!1});const P=[{path:"/",name:"home",component:x},{path:"/login",name:"login",component:()=>s.e(150).then(s.bind(s,6150))},{path:"/article/:id",name:"article-detail",component:()=>s.e(319).then(s.bind(s,9319))},{path:"/about",name:"about",component:()=>s.e(274).then(s.bind(s,3274))},{path:"/strategy",name:"strategy",component:()=>s.e(135).then(s.bind(s,6516))},{path:"/resources",name:"resources",component:()=>s.e(907).then(s.bind(s,6907))},{path:"/ranking",name:"ranking",component:()=>s.e(340).then(s.bind(s,9340))},{path:"/:pathMatch(.*)*",name:"404",component:()=>s.e(391).then(s.bind(s,8391))},{path:"/search",name:"search",component:()=>s.e(1).then(s.bind(s,6001))},{path:"/user-center",name:"user-center",component:()=>s.e(150).then(s.bind(s,6150))},{path:"/app",name:"app",component:()=>s.e(441).then(s.bind(s,9441))},{path:"/submit",name:"submit",component:()=>Promise.all([s.e(341),s.e(300)]).then(s.bind(s,7300))},{path:"/preview",name:"preview",component:()=>s.e(319).then(s.bind(s,9319))},{path:"/edit",name:"edit-article",component:()=>Promise.all([s.e(341),s.e(300)]).then(s.bind(s,7300))},{path:"/widgets",name:"widgets",component:()=>s.e(818).then(s.bind(s,9818))},{path:"/widgets/webvpn",name:"webvpn",component:()=>s.e(906).then(s.bind(s,3906))},{path:"/subscribe",name:"subscribe",component:()=>s.e(513).then(s.bind(s,5513))},{path:"/advice",name:"advice",component:()=>Promise.all([s.e(341),s.e(67)]).then(s.bind(s,9067))},{path:"/qa",name:"qa",component:()=>s.e(994).then(s.bind(s,6613))}],S=(0,l.aE)({history:(0,l.LA)("/"),routes:P});S.beforeEach(((e,t,s)=>{X().start(),s()})),S.afterEach((()=>{X().done()}));var j=S,z=s(1424);const F=(0,a.Ef)(m);F.config.globalProperties.$barMessage=z.A,F.use(j).mount("#app"),window.$barMessage=z.A}},t={};function s(a){var n=t[a];if(void 0!==n)return n.exports;var o=t[a]={exports:{}};return e[a].call(o.exports,o,o.exports,s),o.exports}s.m=e,function(){var e=[];s.O=function(t,a,n,o){if(!a){var i=1/0;for(d=0;d=o)&&Object.keys(s.O).every((function(e){return s.O[e](a[r])}))?a.splice(r--,1):(l=!1,o0&&e[d-1][2]>o;d--)e[d]=e[d-1];e[d]=[a,n,o]}}(),function(){s.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return s.d(t,{a:t}),t}}(),function(){s.d=function(e,t){for(var a in t)s.o(t,a)&&!s.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})}}(),function(){s.f={},s.e=function(e){return Promise.all(Object.keys(s.f).reduce((function(t,a){return s.f[a](e,t),t}),[]))}}(),function(){s.u=function(e){return"js/"+e+"."+{1:"1123bf67",67:"3a61093f",135:"ad177e20",150:"b39c3e77",274:"7b070b1e",300:"e19684af",319:"9d2da6ff",340:"f7ae3146",341:"3c56027e",391:"41fac446",441:"bc9341e1",513:"f350df81",653:"32516b7a",818:"d2cfe244",906:"37a53d7d",907:"0090da8d",994:"ac3f9400",997:"25e21e4f"}[e]+".js"}}(),function(){s.miniCssF=function(e){return"css/"+e+"."+{1:"98396c9d",67:"bf09391d",135:"1b072388",150:"6bb33b0a",274:"3461a041",300:"d0260895",319:"30b0397b",340:"a9f146da",341:"b01fd648",391:"9c9d4f37",441:"de38258a",513:"9cc8c9fc",818:"57e139b5",906:"e143c9ec",907:"878ddbf5",994:"722d6800"}[e]+".css"}}(),function(){s.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}}(),function(){var e={},t="newfront:";s.l=function(a,n,o,i){if(e[a])e[a].push(n);else{var l,r;if(void 0!==o)for(var c=document.getElementsByTagName("script"),d=0;d