diff --git a/dist/css/561.f10627b5.css b/dist/css/152.a20def69.css
similarity index 61%
rename from dist/css/561.f10627b5.css
rename to dist/css/152.a20def69.css
index 26dedc7..68fb369 100644
--- a/dist/css/561.f10627b5.css
+++ b/dist/css/152.a20def69.css
@@ -1 +1 @@
-.user-meta[data-v-66b9c2e8]{position:relative;display:inline-block}.user-basic[data-v-66b9c2e8]{display:flex;align-items:center;gap:8px;cursor:pointer}.avatar-wrapper[data-v-66b9c2e8]{position:relative;width:36px;height:36px}.avatar[data-v-66b9c2e8]{width:36px;height:36px;border-radius:50%;-o-object-fit:cover;object-fit:cover;border:2px solid #eee}.avatar-loading[data-v-66b9c2e8]{position:absolute;top:0;left:0;width:100%;height:100%;background-color:hsla(0,0%,100%,.7);border-radius:50%;display:flex;justify-content:center;align-items:center}.loading-spinner[data-v-66b9c2e8]{width:20px;height:20px;border:2px solid #f3f3f3;border-top:2px solid #3273dc;border-radius:50%;animation:spin-66b9c2e8 1s linear infinite}@keyframes spin-66b9c2e8{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.user-name[data-v-66b9c2e8]{font-weight:500;font-size:14px;color:#333}.user-badges[data-v-66b9c2e8]{display:flex;gap:4px}.badge[data-v-66b9c2e8]{display:inline-block;padding:1px 6px;border-radius:4px;font-size:12px;color:#fff}.verified[data-v-66b9c2e8]{background-color:#3273dc}.invited[data-v-66b9c2e8]{background-color:coral}.medal[data-v-66b9c2e8]{background-color:gold;color:#333}.user-detail[data-v-66b9c2e8]{position:absolute;top:calc(100% + 8px);left:0;width:280px;z-index:9999}.detail-fade-enter-active[data-v-66b9c2e8],.detail-fade-leave-active[data-v-66b9c2e8]{transition:all .3s cubic-bezier(.4,0,.2,1);transform-origin:top}.detail-fade-enter-from[data-v-66b9c2e8],.detail-fade-leave-to[data-v-66b9c2e8]{opacity:0;transform:scale(.95) translateY(-10px)}.detail-fade-enter-to[data-v-66b9c2e8],.detail-fade-leave-from[data-v-66b9c2e8]{opacity:1;transform:scale(1) translateY(0)}.card-container[data-v-66b9c2e8]{background-color:#fff;border-radius:12px;box-shadow:0 8px 24px rgba(0,0,0,.15),0 2px 8px rgba(0,0,0,.1);overflow:hidden}.detail-header[data-v-66b9c2e8]{position:relative;padding:16px 16px 4px}.header-bg[data-v-66b9c2e8]{position:absolute;top:0;left:0;right:0;height:60px;background:linear-gradient(135deg,#3273dc,#6cb6ff);opacity:.3}.detail-avatar[data-v-66b9c2e8]{width:64px;height:64px;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}.detail-right[data-v-66b9c2e8]{margin-top:8px;position:relative}.detail-name[data-v-66b9c2e8]{font-weight:600;font-size:18px;margin-bottom:4px;color:#333}.user-sign[data-v-66b9c2e8]{margin:8px 16px;display:flex;align-items:flex-start;gap:8px;padding:10px 12px;background-color:#f8f9fa;border-radius:8px}.sign-icon[data-v-66b9c2e8]{font-size:16px;color:#666}.sign-text[data-v-66b9c2e8]{font-size:13px;color:#555;line-height:1.9;flex:1}.user-stats[data-v-66b9c2e8]{display:flex;justify-content:center;align-items:center;padding:12px 16px;background-color:#f8f9fa;margin:0 16px;border-radius:8px}.stat-item[data-v-66b9c2e8]{text-align:center;flex:1}.stat-separator[data-v-66b9c2e8]{width:1px;height:24px;background-color:#ddd;margin:0 16px}.stat-value[data-v-66b9c2e8]{font-weight:600;font-size:16px;color:#333}.stat-label[data-v-66b9c2e8]{font-size:12px;color:#666;margin-top:2px}.card-footer[data-v-66b9c2e8]{padding:12px 16px 16px;text-align:center}.follow-btn[data-v-66b9c2e8]{background:linear-gradient(135deg,#3273dc,#4a89ff);color:#fff;border:none;border-radius:20px;padding:6px 18px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease;box-shadow:0 2px 5px rgba(50,115,220,.3)}.follow-btn[data-v-66b9c2e8]:hover{background:linear-gradient(135deg,#2366d1,#3273dc);transform:translateY(-1px);box-shadow:0 4px 8px rgba(50,115,220,.4)}.user-submissions[data-v-66b9c2e8]{padding:0 16px 16px}.submission-header[data-v-66b9c2e8]{font-size:13px;font-weight:600;color:#333;margin-bottom:8px;padding-left:4px;border-left:3px solid #3273dc;line-height:1;display:flex;justify-content:space-between;align-items:center}.pagination-controls[data-v-66b9c2e8]{display:flex;align-items:center;gap:4px}.page-btn[data-v-66b9c2e8]{border:none;background:#f0f0f0;color:#666;width:20px;height:20px;border-radius:4px;display:flex;align-items:center;justify-content:center;font-size:12px;cursor:pointer;transition:all .2s;padding:0}.page-btn[data-v-66b9c2e8]:hover:not(:disabled){background:#e0e0e0;color:#3273dc}.page-btn[data-v-66b9c2e8]:disabled{opacity:.5;cursor:not-allowed}.page-info[data-v-66b9c2e8]{font-weight:400;font-size:11px;color:#888;min-width:30px;text-align:center}.submission-list[data-v-66b9c2e8]{display:flex;flex-direction:column;gap:8px;max-height:240px;overflow-y:auto;padding-right:2px}.submission-list[data-v-66b9c2e8]::-webkit-scrollbar{width:4px}.submission-list[data-v-66b9c2e8]::-webkit-scrollbar-track{background:#f1f1f1;border-radius:2px}.submission-list[data-v-66b9c2e8]::-webkit-scrollbar-thumb{background:#ddd;border-radius:2px}.submission-list[data-v-66b9c2e8]::-webkit-scrollbar-thumb:hover{background:#ccc}.submission-item[data-v-66b9c2e8]{padding:8px 10px;background-color:#f8f9fa;border-radius:6px;cursor:pointer;transition:all .2s ease;border:1px solid transparent}.submission-item[data-v-66b9c2e8]:hover{background-color:#fff;border-color:#e0e0e0;box-shadow:0 2px 8px rgba(0,0,0,.05);transform:translateX(2px)}.submission-title[data-v-66b9c2e8]{font-size:13px;color:#444;margin-bottom:6px;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.submission-tags[data-v-66b9c2e8]{display:flex;gap:4px;flex-wrap:wrap}.tag[data-v-66b9c2e8]{padding:2px 6px;border-radius:3px;font-size:11px;font-weight:500}.tag.official[data-v-66b9c2e8]{background-color:#e6f7ff;color:#1890ff}.tag.highlight[data-v-66b9c2e8]{background-color:#f6ffed;color:#52c41a}.tag.top[data-v-66b9c2e8]{background-color:#fff7e6;color:#fa8c16}.ranking-page[data-v-fc98432e]{min-height:100vh;background-color:#f5f7fa;padding-top:60px;padding-bottom:40px}.container[data-v-fc98432e]{max-width:800px;margin:0 auto;padding:20px}.ranking-header[data-v-fc98432e]{text-align:center;margin-bottom:30px;padding-top:20px}.ranking-header .page-title[data-v-fc98432e]{font-size:28px;color:#333;margin-bottom:10px;font-weight:700}.ranking-header .page-subtitle[data-v-fc98432e]{color:#666;font-size:16px}.ranking-header .ranking-notice[data-v-fc98432e]{margin-top:16px;display:inline-flex;align-items:center;gap:6px;background-color:#eef3fc;color:#3273dc;padding:8px 16px;border-radius:20px;font-size:13px;line-height:1.4;text-align:left}.ranking-header .ranking-notice .info-icon[data-v-fc98432e]{font-style:normal}.error-container[data-v-fc98432e],.loading-container[data-v-fc98432e]{text-align:center;padding:40px;color:#666}.spinner[data-v-fc98432e]{width:40px;height:40px;border:4px solid rgba(50,115,220,.1);border-left-color:#3273dc;border-radius:50%;animation:spin-fc98432e 1s linear infinite;margin:0 auto 15px}@keyframes spin-fc98432e{to{transform:rotate(1turn)}}.retry-btn[data-v-fc98432e]{margin-top:10px;padding:8px 20px;background-color:#3273dc;color:#fff;border:none;border-radius:4px;cursor:pointer}.retry-btn[data-v-fc98432e]:hover{background-color:#2366d1}.ranking-list[data-v-fc98432e]{background:#fff;border-radius:12px;box-shadow:0 2px 12px rgba(0,0,0,.05)}.ranking-item[data-v-fc98432e]{display:flex;align-items:center;padding:20px;border-bottom:1px solid #f0f0f0;position:relative;z-index:1;transition:background-color .2s,z-index 0s linear .4s}.ranking-item[data-v-fc98432e]:first-child{border-top-left-radius:12px;border-top-right-radius:12px}.ranking-item[data-v-fc98432e]:last-child{border-bottom:none;border-bottom-left-radius:12px;border-bottom-right-radius:12px}.ranking-item[data-v-fc98432e]:hover{background-color:#fcfcfc;z-index:100;transition:background-color .2s,z-index 0s}.rank-badge[data-v-fc98432e]{width:50px;display:flex;justify-content:center;align-items:center;margin-right:15px;flex-shrink:0}.rank-badge .medal-icon[data-v-fc98432e]{font-size:28px}.rank-badge .rank-number[data-v-fc98432e]{font-size:18px;font-weight:600;color:#888;width:28px;height:28px;background:#eee;border-radius:50%;display:flex;align-items:center;justify-content:center}.user-info-wrapper[data-v-fc98432e]{flex:1;min-width:0}.contribution-stats[data-v-fc98432e]{margin-left:15px;flex-shrink:0}.stat-box[data-v-fc98432e]{display:flex;flex-direction:column;align-items:center;background:#f8f9fa;padding:6px 12px;border-radius:8px}.stat-box .stat-label[data-v-fc98432e]{font-size:12px;color:#888;margin-bottom:2px}.stat-box .stat-value[data-v-fc98432e]{font-size:16px;font-weight:600;color:#3273dc}.my-ranking-block[data-v-fc98432e]{background:linear-gradient(135deg,#3273dc,#209cee);color:#fff;border-radius:12px;padding:20px 30px;margin-bottom:24px;box-shadow:0 4px 15px rgba(50,115,220,.3)}.my-ranking-block .my-rank-content[data-v-fc98432e]{display:flex;justify-content:space-between;align-items:center}.my-ranking-block .my-rank-text[data-v-fc98432e]{display:flex;align-items:baseline;gap:15px}.my-ranking-block .my-rank-text .label[data-v-fc98432e]{font-size:16px;opacity:.9}.my-ranking-block .my-rank-text .value[data-v-fc98432e]{font-size:28px;font-weight:700;text-shadow:0 2px 4px rgba(0,0,0,.1)}.my-ranking-block .my-rank-text .value.unranked[data-v-fc98432e]{font-size:22px}.my-ranking-block .my-rank-tip[data-v-fc98432e]{font-size:14px;background:hsla(0,0%,100%,.2);padding:6px 16px;border-radius:20px;backdrop-filter:blur(5px)}.rank-gold[data-v-fc98432e]{background:linear-gradient(90deg,#fffbf0,#fff)}.rank-gold .stat-value[data-v-fc98432e]{color:#d4af37}.rank-silver[data-v-fc98432e]{background:linear-gradient(90deg,#f8f9fa,#fff)}.rank-silver .stat-value[data-v-fc98432e]{color:#a9a9a9}.rank-bronze[data-v-fc98432e]{background:linear-gradient(90deg,#fff8f5,#fff)}.rank-bronze .stat-value[data-v-fc98432e]{color:#cd7f32}.pagination[data-v-fc98432e]{display:flex;justify-content:center;align-items:center;margin-top:30px;gap:20px}.pagination .page-btn[data-v-fc98432e]{padding:8px 16px;background:#fff;border:1px solid #ddd;border-radius:6px;cursor:pointer;color:#333;transition:all .2s}.pagination .page-btn[data-v-fc98432e]:disabled{background:#f5f5f5;color:#999;cursor:not-allowed}.pagination .page-btn[data-v-fc98432e]:not(:disabled):hover{border-color:#3273dc;color:#3273dc}.pagination .page-info[data-v-fc98432e]{color:#666}@media(max-width:600px){.container[data-v-fc98432e]{padding:15px}.ranking-header[data-v-fc98432e]{margin-bottom:20px}.ranking-header .page-title[data-v-fc98432e]{font-size:22px}.ranking-header .page-subtitle[data-v-fc98432e]{font-size:14px}.ranking-item[data-v-fc98432e]{padding:15px}.rank-badge[data-v-fc98432e]{width:36px;margin-right:10px}.rank-badge .medal-icon[data-v-fc98432e]{font-size:24px}.rank-badge .rank-number[data-v-fc98432e]{width:24px;height:24px;font-size:14px}.stat-box[data-v-fc98432e]{padding:4px 8px}.stat-box .stat-label[data-v-fc98432e]{font-size:10px}.stat-box .stat-value[data-v-fc98432e]{font-size:14px}.my-ranking-block[data-v-fc98432e]{padding:15px 20px}.my-ranking-block .my-rank-content[data-v-fc98432e]{flex-direction:column;align-items:flex-start;gap:10px}.my-ranking-block .my-rank-text[data-v-fc98432e]{width:100%;justify-content:space-between}.my-ranking-block .my-rank-tip[data-v-fc98432e]{font-size:12px;align-self:flex-end}}
\ No newline at end of file
+.user-meta[data-v-66b9c2e8]{position:relative;display:inline-block}.user-basic[data-v-66b9c2e8]{display:flex;align-items:center;gap:8px;cursor:pointer}.avatar-wrapper[data-v-66b9c2e8]{position:relative;width:36px;height:36px}.avatar[data-v-66b9c2e8]{width:36px;height:36px;border-radius:50%;-o-object-fit:cover;object-fit:cover;border:2px solid #eee}.avatar-loading[data-v-66b9c2e8]{position:absolute;top:0;left:0;width:100%;height:100%;background-color:hsla(0,0%,100%,.7);border-radius:50%;display:flex;justify-content:center;align-items:center}.loading-spinner[data-v-66b9c2e8]{width:20px;height:20px;border:2px solid #f3f3f3;border-top:2px solid #3273dc;border-radius:50%;animation:spin-66b9c2e8 1s linear infinite}@keyframes spin-66b9c2e8{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.user-name[data-v-66b9c2e8]{font-weight:500;font-size:14px;color:#333}.user-badges[data-v-66b9c2e8]{display:flex;gap:4px}.badge[data-v-66b9c2e8]{display:inline-block;padding:1px 6px;border-radius:4px;font-size:12px;color:#fff}.verified[data-v-66b9c2e8]{background-color:#3273dc}.invited[data-v-66b9c2e8]{background-color:coral}.medal[data-v-66b9c2e8]{background-color:gold;color:#333}.user-detail[data-v-66b9c2e8]{position:absolute;top:calc(100% + 8px);left:0;width:280px;z-index:9999}.detail-fade-enter-active[data-v-66b9c2e8],.detail-fade-leave-active[data-v-66b9c2e8]{transition:all .3s cubic-bezier(.4,0,.2,1);transform-origin:top}.detail-fade-enter-from[data-v-66b9c2e8],.detail-fade-leave-to[data-v-66b9c2e8]{opacity:0;transform:scale(.95) translateY(-10px)}.detail-fade-enter-to[data-v-66b9c2e8],.detail-fade-leave-from[data-v-66b9c2e8]{opacity:1;transform:scale(1) translateY(0)}.card-container[data-v-66b9c2e8]{background-color:#fff;border-radius:12px;box-shadow:0 8px 24px rgba(0,0,0,.15),0 2px 8px rgba(0,0,0,.1);overflow:hidden}.detail-header[data-v-66b9c2e8]{position:relative;padding:16px 16px 4px}.header-bg[data-v-66b9c2e8]{position:absolute;top:0;left:0;right:0;height:60px;background:linear-gradient(135deg,#3273dc,#6cb6ff);opacity:.3}.detail-avatar[data-v-66b9c2e8]{width:64px;height:64px;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}.detail-right[data-v-66b9c2e8]{margin-top:8px;position:relative}.detail-name[data-v-66b9c2e8]{font-weight:600;font-size:18px;margin-bottom:4px;color:#333}.user-sign[data-v-66b9c2e8]{margin:8px 16px;display:flex;align-items:flex-start;gap:8px;padding:10px 12px;background-color:#f8f9fa;border-radius:8px}.sign-icon[data-v-66b9c2e8]{font-size:16px;color:#666}.sign-text[data-v-66b9c2e8]{font-size:13px;color:#555;line-height:1.9;flex:1}.user-stats[data-v-66b9c2e8]{display:flex;justify-content:center;align-items:center;padding:12px 16px;background-color:#f8f9fa;margin:0 16px;border-radius:8px}.stat-item[data-v-66b9c2e8]{text-align:center;flex:1}.stat-separator[data-v-66b9c2e8]{width:1px;height:24px;background-color:#ddd;margin:0 16px}.stat-value[data-v-66b9c2e8]{font-weight:600;font-size:16px;color:#333}.stat-label[data-v-66b9c2e8]{font-size:12px;color:#666;margin-top:2px}.card-footer[data-v-66b9c2e8]{padding:12px 16px 16px;text-align:center}.follow-btn[data-v-66b9c2e8]{background:linear-gradient(135deg,#3273dc,#4a89ff);color:#fff;border:none;border-radius:20px;padding:6px 18px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease;box-shadow:0 2px 5px rgba(50,115,220,.3)}.follow-btn[data-v-66b9c2e8]:hover{background:linear-gradient(135deg,#2366d1,#3273dc);transform:translateY(-1px);box-shadow:0 4px 8px rgba(50,115,220,.4)}.user-submissions[data-v-66b9c2e8]{padding:0 16px 16px}.submission-header[data-v-66b9c2e8]{font-size:13px;font-weight:600;color:#333;margin-bottom:8px;padding-left:4px;border-left:3px solid #3273dc;line-height:1;display:flex;justify-content:space-between;align-items:center}.pagination-controls[data-v-66b9c2e8]{display:flex;align-items:center;gap:4px}.page-btn[data-v-66b9c2e8]{border:none;background:#f0f0f0;color:#666;width:20px;height:20px;border-radius:4px;display:flex;align-items:center;justify-content:center;font-size:12px;cursor:pointer;transition:all .2s;padding:0}.page-btn[data-v-66b9c2e8]:hover:not(:disabled){background:#e0e0e0;color:#3273dc}.page-btn[data-v-66b9c2e8]:disabled{opacity:.5;cursor:not-allowed}.page-info[data-v-66b9c2e8]{font-weight:400;font-size:11px;color:#888;min-width:30px;text-align:center}.submission-list[data-v-66b9c2e8]{display:flex;flex-direction:column;gap:8px;max-height:240px;overflow-y:auto;padding-right:2px}.submission-list[data-v-66b9c2e8]::-webkit-scrollbar{width:4px}.submission-list[data-v-66b9c2e8]::-webkit-scrollbar-track{background:#f1f1f1;border-radius:2px}.submission-list[data-v-66b9c2e8]::-webkit-scrollbar-thumb{background:#ddd;border-radius:2px}.submission-list[data-v-66b9c2e8]::-webkit-scrollbar-thumb:hover{background:#ccc}.submission-item[data-v-66b9c2e8]{padding:8px 10px;background-color:#f8f9fa;border-radius:6px;cursor:pointer;transition:all .2s ease;border:1px solid transparent}.submission-item[data-v-66b9c2e8]:hover{background-color:#fff;border-color:#e0e0e0;box-shadow:0 2px 8px rgba(0,0,0,.05);transform:translateX(2px)}.submission-title[data-v-66b9c2e8]{font-size:13px;color:#444;margin-bottom:6px;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.submission-tags[data-v-66b9c2e8]{display:flex;gap:4px;flex-wrap:wrap}.tag[data-v-66b9c2e8]{padding:2px 6px;border-radius:3px;font-size:11px;font-weight:500}.tag.official[data-v-66b9c2e8]{background-color:#e6f7ff;color:#1890ff}.tag.highlight[data-v-66b9c2e8]{background-color:#f6ffed;color:#52c41a}.tag.top[data-v-66b9c2e8]{background-color:#fff7e6;color:#fa8c16}.ranking-page[data-v-381c5470]{min-height:100vh;background-color:#f5f7fa;padding-top:60px;padding-bottom:40px}.container[data-v-381c5470]{max-width:800px;margin:0 auto;padding:20px}.ranking-header[data-v-381c5470]{text-align:center;margin-bottom:30px;padding-top:20px}.ranking-header .page-title[data-v-381c5470]{font-size:28px;color:#333;margin-bottom:10px;font-weight:700}.ranking-header .page-subtitle[data-v-381c5470]{color:#666;font-size:16px}.ranking-header .ranking-notice[data-v-381c5470]{margin-top:16px;display:inline-flex;align-items:center;gap:6px;background-color:#eef3fc;color:#3273dc;padding:8px 16px;border-radius:20px;font-size:13px;line-height:1.4;text-align:left}.ranking-header .ranking-notice .info-icon[data-v-381c5470]{font-style:normal}.error-container[data-v-381c5470],.loading-container[data-v-381c5470]{text-align:center;padding:40px;color:#666}.spinner[data-v-381c5470]{width:40px;height:40px;border:4px solid rgba(50,115,220,.1);border-left-color:#3273dc;border-radius:50%;animation:spin-381c5470 1s linear infinite;margin:0 auto 15px}@keyframes spin-381c5470{to{transform:rotate(1turn)}}.retry-btn[data-v-381c5470]{margin-top:10px;padding:8px 20px;background-color:#3273dc;color:#fff;border:none;border-radius:4px;cursor:pointer}.retry-btn[data-v-381c5470]:hover{background-color:#2366d1}.ranking-list[data-v-381c5470]{background:#fff;border-radius:12px;box-shadow:0 2px 12px rgba(0,0,0,.05)}.ranking-item[data-v-381c5470]{display:flex;align-items:center;padding:20px;border-bottom:1px solid #f0f0f0;position:relative;z-index:1;transition:background-color .2s,z-index 0s linear .4s}.ranking-item[data-v-381c5470]:first-child{border-top-left-radius:12px;border-top-right-radius:12px}.ranking-item[data-v-381c5470]:last-child{border-bottom:none;border-bottom-left-radius:12px;border-bottom-right-radius:12px}.ranking-item[data-v-381c5470]:hover{background-color:#fcfcfc;z-index:100;transition:background-color .2s,z-index 0s}.rank-badge[data-v-381c5470]{width:50px;display:flex;justify-content:center;align-items:center;margin-right:15px;flex-shrink:0}.rank-badge .medal-icon[data-v-381c5470]{font-size:28px}.rank-badge .rank-number[data-v-381c5470]{font-size:18px;font-weight:600;color:#888;width:28px;height:28px;background:#eee;border-radius:50%;display:flex;align-items:center;justify-content:center}.user-info-wrapper[data-v-381c5470]{flex:1;min-width:0}.contribution-stats[data-v-381c5470]{margin-left:15px;flex-shrink:0}.stat-box[data-v-381c5470]{display:flex;flex-direction:column;align-items:center;background:#f8f9fa;padding:6px 12px;border-radius:8px}.stat-box .stat-label[data-v-381c5470]{font-size:12px;color:#888;margin-bottom:2px}.stat-box .stat-value[data-v-381c5470]{font-size:16px;font-weight:600;color:#3273dc}.my-ranking-block[data-v-381c5470]{background:linear-gradient(135deg,#3273dc,#209cee);color:#fff;border-radius:12px;padding:20px 30px;margin-bottom:24px;box-shadow:0 4px 15px rgba(50,115,220,.3)}.my-ranking-block .my-rank-content[data-v-381c5470]{display:flex;justify-content:space-between;align-items:center}.my-ranking-block .my-rank-text[data-v-381c5470]{display:flex;align-items:baseline;gap:15px}.my-ranking-block .my-rank-text .label[data-v-381c5470]{font-size:16px;opacity:.9}.my-ranking-block .my-rank-text .value[data-v-381c5470]{font-size:28px;font-weight:700;text-shadow:0 2px 4px rgba(0,0,0,.1)}.my-ranking-block .my-rank-text .value.unranked[data-v-381c5470]{font-size:22px}.my-ranking-block .my-rank-tip[data-v-381c5470]{font-size:14px;background:hsla(0,0%,100%,.2);padding:6px 16px;border-radius:20px;backdrop-filter:blur(5px)}.my-ranking-block .my-rank-opt-out-tip[data-v-381c5470]{margin-top:16px;font-size:13px;color:hsla(0,0%,100%,.9);padding-top:12px;border-top:1px solid hsla(0,0%,100%,.2)}.my-ranking-block .my-rank-opt-out-tip .link-text[data-v-381c5470]{cursor:pointer;font-weight:600}.my-ranking-block .my-rank-opt-out-tip .link-text[data-v-381c5470]:hover{color:#fff}.rank-gold[data-v-381c5470]{background:linear-gradient(90deg,#fffbf0,#fff)}.rank-gold .stat-value[data-v-381c5470]{color:#d4af37}.rank-silver[data-v-381c5470]{background:linear-gradient(90deg,#f8f9fa,#fff)}.rank-silver .stat-value[data-v-381c5470]{color:#a9a9a9}.rank-bronze[data-v-381c5470]{background:linear-gradient(90deg,#fff8f5,#fff)}.rank-bronze .stat-value[data-v-381c5470]{color:#cd7f32}.pagination[data-v-381c5470]{display:flex;justify-content:center;align-items:center;margin-top:30px;gap:20px}.pagination .page-btn[data-v-381c5470]{padding:8px 16px;background:#fff;border:1px solid #ddd;border-radius:6px;cursor:pointer;color:#333;transition:all .2s}.pagination .page-btn[data-v-381c5470]:disabled{background:#f5f5f5;color:#999;cursor:not-allowed}.pagination .page-btn[data-v-381c5470]:not(:disabled):hover{border-color:#3273dc;color:#3273dc}.pagination .page-info[data-v-381c5470]{color:#666}@media(max-width:600px){.container[data-v-381c5470]{padding:15px}.ranking-header[data-v-381c5470]{margin-bottom:20px}.ranking-header .page-title[data-v-381c5470]{font-size:22px}.ranking-header .page-subtitle[data-v-381c5470]{font-size:14px}.ranking-item[data-v-381c5470]{padding:15px}.rank-badge[data-v-381c5470]{width:36px;margin-right:10px}.rank-badge .medal-icon[data-v-381c5470]{font-size:24px}.rank-badge .rank-number[data-v-381c5470]{width:24px;height:24px;font-size:14px}.stat-box[data-v-381c5470]{padding:4px 8px}.stat-box .stat-label[data-v-381c5470]{font-size:10px}.stat-box .stat-value[data-v-381c5470]{font-size:14px}.my-ranking-block[data-v-381c5470]{padding:15px 20px}.my-ranking-block .my-rank-content[data-v-381c5470]{flex-direction:column;align-items:flex-start;gap:10px}.my-ranking-block .my-rank-text[data-v-381c5470]{width:100%;justify-content:space-between}.my-ranking-block .my-rank-tip[data-v-381c5470]{font-size:12px;align-self:flex-end}}
\ No newline at end of file
diff --git a/dist/index.html b/dist/index.html
index 5c138c5..5c89dd2 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/152.504c4922.js b/dist/js/152.504c4922.js
new file mode 100644
index 0000000..4fa47af
--- /dev/null
+++ b/dist/js/152.504c4922.js
@@ -0,0 +1,2 @@
+"use strict";(self["webpackChunknewfront"]=self["webpackChunknewfront"]||[]).push([[152],{4715:function(s,a,e){e.d(a,{A:function(){return K}});var t=e(6768),i=e(4232),n=e(5130);const l={class:"user-meta"},r={class:"avatar-wrapper"},o=["src"],c={key:0,class:"avatar-loading"},d={class:"user-name"},u={class:"user-badges"},g=["title"],k=["title"],h={key:2,class:"badge medal"},v={class:"card-container"},p={class:"detail-header"},f=["src"],m={class:"detail-right"},b={class:"detail-name"},y={class:"user-badges"},C=["title"],L=["title"],P={key:2,class:"badge medal"},E={key:0,class:"user-sign"},w={class:"sign-text"},I={key:1,class:"user-submissions"},X={class:"submission-header"},_={key:0,class:"pagination-controls"},Q=["disabled"],U={class:"page-info"},A=["disabled"],D={class:"submission-list"},$=["onClick"],x={class:"submission-title"},M={class:"submission-tags"},q={key:0,class:"tag official"},F={key:1,class:"tag highlight"},R={key:2,class:"tag top"};function N(s,a,e,N,z,S){return(0,t.uX)(),(0,t.CE)("div",l,[(0,t.Lk)("div",{class:"user-basic",onMouseenter:a[0]||(a[0]=s=>z.showDetail=!0)},[(0,t.Lk)("div",r,[(0,t.Lk)("img",{src:z.userInfo.avatarUrl,alt:"用户头像",class:"avatar"},null,8,o),z.loading?((0,t.uX)(),(0,t.CE)("div",c,a[5]||(a[5]=[(0,t.Lk)("div",{class:"loading-spinner"},null,-1)]))):(0,t.Q3)("",!0)]),(0,t.Lk)("div",d,(0,i.v_)(z.userInfo.nickname),1),(0,t.Lk)("div",u,[z.userInfo.verified?((0,t.uX)(),(0,t.CE)("span",{key:0,class:"badge verified",title:z.userInfo.verified},"认证",8,g)):(0,t.Q3)("",!0),z.userInfo.invited?((0,t.uX)(),(0,t.CE)("span",{key:1,class:"badge invited",title:z.userInfo.invited},"特邀",8,k)):(0,t.Q3)("",!0),1===z.userInfo.medal?((0,t.uX)(),(0,t.CE)("span",h,"小站奖章")):(0,t.Q3)("",!0)])],32),(0,t.bF)(n.eB,{name:"detail-fade"},{default:(0,t.k6)((()=>[z.showDetail?((0,t.uX)(),(0,t.CE)("div",{key:0,class:"user-detail",onMouseenter:a[3]||(a[3]=s=>z.showDetail=!0),onMouseleave:a[4]||(a[4]=s=>z.showDetail=!1)},[(0,t.Lk)("div",v,[(0,t.Lk)("div",p,[a[6]||(a[6]=(0,t.Lk)("div",{class:"header-bg"},null,-1)),(0,t.Lk)("img",{src:z.userInfo.avatarUrl,alt:"用户头像",class:"detail-avatar"},null,8,f),(0,t.Lk)("div",m,[(0,t.Lk)("div",b,(0,i.v_)(z.userInfo.nickname),1),(0,t.Lk)("div",y,[z.userInfo.verified?((0,t.uX)(),(0,t.CE)("span",{key:0,class:"badge verified",title:z.userInfo.verified},"认证",8,C)):(0,t.Q3)("",!0),z.userInfo.invited?((0,t.uX)(),(0,t.CE)("span",{key:1,class:"badge invited",title:z.userInfo.invited},"特邀",8,L)):(0,t.Q3)("",!0),1===z.userInfo.medal?((0,t.uX)(),(0,t.CE)("span",P,"小站奖章")):(0,t.Q3)("",!0)])])]),z.userInfo.sign?((0,t.uX)(),(0,t.CE)("div",E,[a[7]||(a[7]=(0,t.Lk)("div",{class:"sign-icon"},"✍️",-1)),(0,t.Lk)("div",w,(0,i.v_)(z.userInfo.sign),1)])):(0,t.Q3)("",!0),z.submissions.length>0?((0,t.uX)(),(0,t.CE)("div",I,[(0,t.Lk)("div",X,[a[8]||(a[8]=(0,t.Lk)("span",null,"TA的投稿",-1)),z.totalPages>1?((0,t.uX)(),(0,t.CE)("div",_,[(0,t.Lk)("button",{class:"page-btn",disabled:1===z.currentPage,onClick:a[1]||(a[1]=(0,n.D$)((s=>S.changePage(z.currentPage-1)),["stop"]))}," < ",8,Q),(0,t.Lk)("span",U,(0,i.v_)(z.currentPage)+"/"+(0,i.v_)(z.totalPages),1),(0,t.Lk)("button",{class:"page-btn",disabled:z.currentPage===z.totalPages,onClick:a[2]||(a[2]=(0,n.D$)((s=>S.changePage(z.currentPage+1)),["stop"]))}," > ",8,A)])):(0,t.Q3)("",!0)]),(0,t.Lk)("div",D,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(z.submissions,(s=>((0,t.uX)(),(0,t.CE)("div",{key:s.id,class:"submission-item",onClick:a=>S.handleArticleClick(s.id)},[(0,t.Lk)("div",x,(0,i.v_)(s.title),1),(0,t.Lk)("div",M,[s.official?((0,t.uX)(),(0,t.CE)("span",q,"官方")):(0,t.Q3)("",!0),s.highlight?((0,t.uX)(),(0,t.CE)("span",F,"优质")):(0,t.Q3)("",!0),s.top?((0,t.uX)(),(0,t.CE)("span",R,"置顶")):(0,t.Q3)("",!0)])],8,$)))),128))])])):(0,t.Q3)("",!0)])],32)):(0,t.Q3)("",!0)])),_:1})])}var z=e(4373),S=e(4993),O={name:"UserMeta",props:{id:{type:[String,Number],required:!0}},data(){return{userInfo:{nickname:"默认昵称",verified:null,invited:null,medal:0,avatarUrl:"https://download.东北大学.com/avatar/default.png",follower:0,following:0,sign:"这个人很懒,还没有写个性签名~"},submissions:[],currentPage:1,totalPages:1,total:0,showDetail:!1,loading:!1,error:null}},created(){this.fetchUserInfo(),this.fetchUserSubmissions()},mounted(){document.addEventListener("click",this.handleClickOutside)},beforeUnmount(){document.removeEventListener("click",this.handleClickOutside)},watch:{id(){this.fetchUserInfo(),this.fetchUserSubmissions()}},methods:{async fetchUserInfo(){this.loading=!0;try{const s=await z.A.get(`https://userlogin.xn--xhq44jb2fzpc.com/submission/get-author-info?id=${this.id}`);this.userInfo={...s.data,follower:s.data.follower||0,following:s.data.following||0,sign:s.data.sign||"这个人很懒,还没有写个性签名~"}}catch(s){this.error="获取用户信息失败",console.error("获取用户信息失败:",s)}finally{this.loading=!1}},async fetchUserSubmissions(s=1){try{const a=await z.A.get(`https://userlogin.xn--xhq44jb2fzpc.com/submission/get-author-submissions?id=${this.id}&page=${s}`);a.data?(this.submissions=a.data.list||[],this.total=a.data.total||0,this.currentPage=a.data.page||1,this.totalPages=Math.ceil(this.total/5)):(this.submissions=[],this.total=0,this.totalPages=0)}catch(a){console.error("获取用户投稿失败:",a),this.submissions=[],this.total=0,this.totalPages=0}},changePage(s){s<1||s>this.totalPages||this.fetchUserSubmissions(s)},handleClickOutside(s){const a=this.$el;this.showDetail&&!a.contains(s.target)&&(this.showDetail=!1)},handleFollow(){S.A.alert("关注功能暂未开放,敬请期待","提示").then((()=>{})).catch((()=>{}))},handleArticleClick(s){window.location.href=`/article/${s}`}}},j=e(1241);const B=(0,j.A)(O,[["render",N],["__scopeId","data-v-66b9c2e8"]]);var K=B},7152:function(s,a,e){e.r(a),e.d(a,{default:function(){return R}});e(4114);var t=e(6768),i=e(4232);const n={class:"ranking-page"},l={class:"container"},r={key:0,class:"loading-container"},o={key:1,class:"error-container"},c={key:2,class:"ranking-content"},d={key:0,class:"my-ranking-block"},u={class:"my-rank-content"},g={class:"my-rank-text"},k={class:"value-wrapper"},h={key:0,class:"value unranked"},v={key:1,class:"value ranked"},p={class:"my-rank-tip"},f={key:0,class:"my-rank-opt-out-tip"},m={class:"ranking-list"},b={class:"rank-badge"},y={key:0,class:"medal-icon"},C={key:1,class:"rank-number"},L={class:"user-info-wrapper"},P={class:"contribution-stats"},E={class:"stat-box"},w={class:"stat-value"},I={key:1,class:"pagination"},X=["disabled"],_={class:"page-info"},Q=["disabled"];function U(s,a,e,U,A,D){const $=(0,t.g2)("NavBar"),x=(0,t.g2)("UserMeta");return(0,t.uX)(),(0,t.CE)("div",n,[(0,t.bF)($),(0,t.Lk)("div",l,[a[9]||(a[9]=(0,t.Fv)('',1)),A.loading?((0,t.uX)(),(0,t.CE)("div",r,a[4]||(a[4]=[(0,t.Lk)("div",{class:"spinner"},null,-1),(0,t.Lk)("p",null,"正在加载排行榜...",-1)]))):A.error?((0,t.uX)(),(0,t.CE)("div",o,[(0,t.Lk)("p",null,(0,i.v_)(A.error),1),(0,t.Lk)("button",{onClick:a[0]||(a[0]=s=>D.fetchRanking(A.currentPage)),class:"retry-btn"},"重试")])):((0,t.uX)(),(0,t.CE)("div",c,[null!==A.myPosition&&void 0!==A.myPosition?((0,t.uX)(),(0,t.CE)("div",d,[(0,t.Lk)("div",u,[(0,t.Lk)("div",g,[a[5]||(a[5]=(0,t.Lk)("span",{class:"label"},"我的当前排名",-1)),(0,t.Lk)("div",k,[-1===A.myPosition?((0,t.uX)(),(0,t.CE)("span",h,"未上榜")):((0,t.uX)(),(0,t.CE)("span",v,"NO."+(0,i.v_)(A.myPosition),1))])]),(0,t.Lk)("div",p,(0,i.v_)(-1===A.myPosition?"您暂未上榜哦~":"太厉害了,感谢您的贡献~"),1)]),-1!==A.myPosition?((0,t.uX)(),(0,t.CE)("div",f,[a[6]||(a[6]=(0,t.eW)(" 您可以在")),(0,t.Lk)("span",{class:"link-text",onClick:a[1]||(a[1]=a=>s.$router.push("/user-center"))},"【个人中心】"),a[7]||(a[7]=(0,t.eW)("—【我的投稿记录】处自愿选择是否加入排行榜。 "))])):(0,t.Q3)("",!0)])):(0,t.Q3)("",!0),(0,t.Lk)("div",m,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(A.rankingData,((s,e)=>((0,t.uX)(),(0,t.CE)("div",{key:s.userId,class:(0,i.C4)(["ranking-item",D.getRankClass(s.rank)])},[(0,t.Lk)("div",b,[s.rank<=3?((0,t.uX)(),(0,t.CE)("span",y,(0,i.v_)(D.getMedalIcon(s.rank)),1)):((0,t.uX)(),(0,t.CE)("span",C,(0,i.v_)(s.rank),1))]),(0,t.Lk)("div",L,[(0,t.bF)(x,{id:s.userId},null,8,["id"])]),(0,t.Lk)("div",P,[(0,t.Lk)("div",E,[a[8]||(a[8]=(0,t.Lk)("span",{class:"stat-label"},"投稿数量",-1)),(0,t.Lk)("span",w,(0,i.v_)(s.contributionCount),1)])])],2)))),128))]),A.totalPages>1?((0,t.uX)(),(0,t.CE)("div",I,[(0,t.Lk)("button",{class:"page-btn",disabled:1===A.currentPage,onClick:a[2]||(a[2]=s=>D.changePage(A.currentPage-1))}," 上一页 ",8,X),(0,t.Lk)("span",_,(0,i.v_)(A.currentPage)+" / "+(0,i.v_)(A.totalPages),1),(0,t.Lk)("button",{class:"page-btn",disabled:A.currentPage===A.totalPages,onClick:a[3]||(a[3]=s=>D.changePage(A.currentPage+1))}," 下一页 ",8,Q)])):(0,t.Q3)("",!0)]))])])}var A=e(562),D=e(4715),$=e(4373),x=e(8704),M={name:"RankingView",components:{NavBar:A.A,UserMeta:D.A},data(){return{rankingData:[],loading:!0,error:null,currentPage:1,totalPages:0,limit:20,myPosition:null}},mounted(){const s=parseInt(this.$route.query.page)||1;this.fetchRanking(s),document.title="投稿排行榜 - NEU 小站"},watch:{"$route.query.page"(s){const a=parseInt(s)||1;a!==this.currentPage&&this.fetchRanking(a)}},methods:{async fetchRanking(s){this.loading=!0,this.error=null;try{const a=x.A.get("token"),e={};a&&(e["Authorization"]=a);const t=await $.A.get("https://newfront.xn--xhq44jb2fzpc.com/ranking",{params:{page:s,limit:this.limit},headers:e}),{data:i,totalPages:n,page:l,my_position:r}=t.data;this.rankingData=i,this.totalPages=n,this.currentPage=l,this.myPosition=r,window.scrollTo({top:0,behavior:"smooth"})}catch(a){console.error("Failed to fetch ranking:",a),this.error="获取排行榜数据失败,请稍后重试"}finally{this.loading=!1}},changePage(s){s>=1&&s<=this.totalPages&&this.$router.push({query:{...this.$route.query,page:s}})},getRankClass(s){return 1===s?"rank-gold":2===s?"rank-silver":3===s?"rank-bronze":""},getMedalIcon(s){const a=["🥇","🥈","🥉"];return a[s-1]||""}}},q=e(1241);const F=(0,q.A)(M,[["render",U],["__scopeId","data-v-381c5470"]]);var R=F}}]);
+//# sourceMappingURL=152.504c4922.js.map
\ No newline at end of file
diff --git a/dist/js/561.73a6314e.js b/dist/js/561.73a6314e.js
deleted file mode 100644
index 41b521b..0000000
--- a/dist/js/561.73a6314e.js
+++ /dev/null
@@ -1,2 +0,0 @@
-"use strict";(self["webpackChunknewfront"]=self["webpackChunknewfront"]||[]).push([[561],{4715:function(s,a,e){e.d(a,{A:function(){return K}});var t=e(6768),i=e(4232),n=e(5130);const l={class:"user-meta"},r={class:"avatar-wrapper"},o=["src"],c={key:0,class:"avatar-loading"},d={class:"user-name"},u={class:"user-badges"},g=["title"],k=["title"],h={key:2,class:"badge medal"},v={class:"card-container"},f={class:"detail-header"},p=["src"],m={class:"detail-right"},b={class:"detail-name"},y={class:"user-badges"},C=["title"],L=["title"],P={key:2,class:"badge medal"},w={key:0,class:"user-sign"},E={class:"sign-text"},I={key:1,class:"user-submissions"},X={class:"submission-header"},_={key:0,class:"pagination-controls"},Q=["disabled"],U={class:"page-info"},A=["disabled"],D={class:"submission-list"},$=["onClick"],x={class:"submission-title"},M={class:"submission-tags"},q={key:0,class:"tag official"},F={key:1,class:"tag highlight"},R={key:2,class:"tag top"};function N(s,a,e,N,z,S){return(0,t.uX)(),(0,t.CE)("div",l,[(0,t.Lk)("div",{class:"user-basic",onMouseenter:a[0]||(a[0]=s=>z.showDetail=!0)},[(0,t.Lk)("div",r,[(0,t.Lk)("img",{src:z.userInfo.avatarUrl,alt:"用户头像",class:"avatar"},null,8,o),z.loading?((0,t.uX)(),(0,t.CE)("div",c,a[5]||(a[5]=[(0,t.Lk)("div",{class:"loading-spinner"},null,-1)]))):(0,t.Q3)("",!0)]),(0,t.Lk)("div",d,(0,i.v_)(z.userInfo.nickname),1),(0,t.Lk)("div",u,[z.userInfo.verified?((0,t.uX)(),(0,t.CE)("span",{key:0,class:"badge verified",title:z.userInfo.verified},"认证",8,g)):(0,t.Q3)("",!0),z.userInfo.invited?((0,t.uX)(),(0,t.CE)("span",{key:1,class:"badge invited",title:z.userInfo.invited},"特邀",8,k)):(0,t.Q3)("",!0),1===z.userInfo.medal?((0,t.uX)(),(0,t.CE)("span",h,"小站奖章")):(0,t.Q3)("",!0)])],32),(0,t.bF)(n.eB,{name:"detail-fade"},{default:(0,t.k6)((()=>[z.showDetail?((0,t.uX)(),(0,t.CE)("div",{key:0,class:"user-detail",onMouseenter:a[3]||(a[3]=s=>z.showDetail=!0),onMouseleave:a[4]||(a[4]=s=>z.showDetail=!1)},[(0,t.Lk)("div",v,[(0,t.Lk)("div",f,[a[6]||(a[6]=(0,t.Lk)("div",{class:"header-bg"},null,-1)),(0,t.Lk)("img",{src:z.userInfo.avatarUrl,alt:"用户头像",class:"detail-avatar"},null,8,p),(0,t.Lk)("div",m,[(0,t.Lk)("div",b,(0,i.v_)(z.userInfo.nickname),1),(0,t.Lk)("div",y,[z.userInfo.verified?((0,t.uX)(),(0,t.CE)("span",{key:0,class:"badge verified",title:z.userInfo.verified},"认证",8,C)):(0,t.Q3)("",!0),z.userInfo.invited?((0,t.uX)(),(0,t.CE)("span",{key:1,class:"badge invited",title:z.userInfo.invited},"特邀",8,L)):(0,t.Q3)("",!0),1===z.userInfo.medal?((0,t.uX)(),(0,t.CE)("span",P,"小站奖章")):(0,t.Q3)("",!0)])])]),z.userInfo.sign?((0,t.uX)(),(0,t.CE)("div",w,[a[7]||(a[7]=(0,t.Lk)("div",{class:"sign-icon"},"✍️",-1)),(0,t.Lk)("div",E,(0,i.v_)(z.userInfo.sign),1)])):(0,t.Q3)("",!0),z.submissions.length>0?((0,t.uX)(),(0,t.CE)("div",I,[(0,t.Lk)("div",X,[a[8]||(a[8]=(0,t.Lk)("span",null,"TA的投稿",-1)),z.totalPages>1?((0,t.uX)(),(0,t.CE)("div",_,[(0,t.Lk)("button",{class:"page-btn",disabled:1===z.currentPage,onClick:a[1]||(a[1]=(0,n.D$)((s=>S.changePage(z.currentPage-1)),["stop"]))}," < ",8,Q),(0,t.Lk)("span",U,(0,i.v_)(z.currentPage)+"/"+(0,i.v_)(z.totalPages),1),(0,t.Lk)("button",{class:"page-btn",disabled:z.currentPage===z.totalPages,onClick:a[2]||(a[2]=(0,n.D$)((s=>S.changePage(z.currentPage+1)),["stop"]))}," > ",8,A)])):(0,t.Q3)("",!0)]),(0,t.Lk)("div",D,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(z.submissions,(s=>((0,t.uX)(),(0,t.CE)("div",{key:s.id,class:"submission-item",onClick:a=>S.handleArticleClick(s.id)},[(0,t.Lk)("div",x,(0,i.v_)(s.title),1),(0,t.Lk)("div",M,[s.official?((0,t.uX)(),(0,t.CE)("span",q,"官方")):(0,t.Q3)("",!0),s.highlight?((0,t.uX)(),(0,t.CE)("span",F,"优质")):(0,t.Q3)("",!0),s.top?((0,t.uX)(),(0,t.CE)("span",R,"置顶")):(0,t.Q3)("",!0)])],8,$)))),128))])])):(0,t.Q3)("",!0)])],32)):(0,t.Q3)("",!0)])),_:1})])}var z=e(4373),S=e(4993),O={name:"UserMeta",props:{id:{type:[String,Number],required:!0}},data(){return{userInfo:{nickname:"默认昵称",verified:null,invited:null,medal:0,avatarUrl:"https://download.东北大学.com/avatar/default.png",follower:0,following:0,sign:"这个人很懒,还没有写个性签名~"},submissions:[],currentPage:1,totalPages:1,total:0,showDetail:!1,loading:!1,error:null}},created(){this.fetchUserInfo(),this.fetchUserSubmissions()},mounted(){document.addEventListener("click",this.handleClickOutside)},beforeUnmount(){document.removeEventListener("click",this.handleClickOutside)},watch:{id(){this.fetchUserInfo(),this.fetchUserSubmissions()}},methods:{async fetchUserInfo(){this.loading=!0;try{const s=await z.A.get(`https://userlogin.xn--xhq44jb2fzpc.com/submission/get-author-info?id=${this.id}`);this.userInfo={...s.data,follower:s.data.follower||0,following:s.data.following||0,sign:s.data.sign||"这个人很懒,还没有写个性签名~"}}catch(s){this.error="获取用户信息失败",console.error("获取用户信息失败:",s)}finally{this.loading=!1}},async fetchUserSubmissions(s=1){try{const a=await z.A.get(`https://userlogin.xn--xhq44jb2fzpc.com/submission/get-author-submissions?id=${this.id}&page=${s}`);a.data?(this.submissions=a.data.list||[],this.total=a.data.total||0,this.currentPage=a.data.page||1,this.totalPages=Math.ceil(this.total/5)):(this.submissions=[],this.total=0,this.totalPages=0)}catch(a){console.error("获取用户投稿失败:",a),this.submissions=[],this.total=0,this.totalPages=0}},changePage(s){s<1||s>this.totalPages||this.fetchUserSubmissions(s)},handleClickOutside(s){const a=this.$el;this.showDetail&&!a.contains(s.target)&&(this.showDetail=!1)},handleFollow(){S.A.alert("关注功能暂未开放,敬请期待","提示").then((()=>{})).catch((()=>{}))},handleArticleClick(s){window.location.href=`/article/${s}`}}},j=e(1241);const B=(0,j.A)(O,[["render",N],["__scopeId","data-v-66b9c2e8"]]);var K=B},7561:function(s,a,e){e.r(a),e.d(a,{default:function(){return F}});var t=e(6768),i=e(4232);const n={class:"ranking-page"},l={class:"container"},r={key:0,class:"loading-container"},o={key:1,class:"error-container"},c={key:2,class:"ranking-content"},d={key:0,class:"my-ranking-block"},u={class:"my-rank-content"},g={class:"my-rank-text"},k={class:"value-wrapper"},h={key:0,class:"value unranked"},v={key:1,class:"value ranked"},f={class:"my-rank-tip"},p={class:"ranking-list"},m={class:"rank-badge"},b={key:0,class:"medal-icon"},y={key:1,class:"rank-number"},C={class:"user-info-wrapper"},L={class:"contribution-stats"},P={class:"stat-box"},w={class:"stat-value"},E={key:1,class:"pagination"},I=["disabled"],X={class:"page-info"},_=["disabled"];function Q(s,a,e,Q,U,A){const D=(0,t.g2)("NavBar"),$=(0,t.g2)("UserMeta");return(0,t.uX)(),(0,t.CE)("div",n,[(0,t.bF)(D),(0,t.Lk)("div",l,[a[6]||(a[6]=(0,t.Fv)('',1)),U.loading?((0,t.uX)(),(0,t.CE)("div",r,a[3]||(a[3]=[(0,t.Lk)("div",{class:"spinner"},null,-1),(0,t.Lk)("p",null,"正在加载排行榜...",-1)]))):U.error?((0,t.uX)(),(0,t.CE)("div",o,[(0,t.Lk)("p",null,(0,i.v_)(U.error),1),(0,t.Lk)("button",{onClick:a[0]||(a[0]=s=>A.fetchRanking(U.currentPage)),class:"retry-btn"},"重试")])):((0,t.uX)(),(0,t.CE)("div",c,[null!==U.myPosition&&void 0!==U.myPosition?((0,t.uX)(),(0,t.CE)("div",d,[(0,t.Lk)("div",u,[(0,t.Lk)("div",g,[a[4]||(a[4]=(0,t.Lk)("span",{class:"label"},"我的当前排名",-1)),(0,t.Lk)("div",k,[-1===U.myPosition?((0,t.uX)(),(0,t.CE)("span",h,"未上榜")):((0,t.uX)(),(0,t.CE)("span",v,"NO."+(0,i.v_)(U.myPosition),1))])]),(0,t.Lk)("div",f,(0,i.v_)(-1===U.myPosition?"您暂未上榜哦~":"太厉害了,感谢您的贡献~"),1)])])):(0,t.Q3)("",!0),(0,t.Lk)("div",p,[((0,t.uX)(!0),(0,t.CE)(t.FK,null,(0,t.pI)(U.rankingData,((s,e)=>((0,t.uX)(),(0,t.CE)("div",{key:s.userId,class:(0,i.C4)(["ranking-item",A.getRankClass(s.rank)])},[(0,t.Lk)("div",m,[s.rank<=3?((0,t.uX)(),(0,t.CE)("span",b,(0,i.v_)(A.getMedalIcon(s.rank)),1)):((0,t.uX)(),(0,t.CE)("span",y,(0,i.v_)(s.rank),1))]),(0,t.Lk)("div",C,[(0,t.bF)($,{id:s.userId},null,8,["id"])]),(0,t.Lk)("div",L,[(0,t.Lk)("div",P,[a[5]||(a[5]=(0,t.Lk)("span",{class:"stat-label"},"投稿数量",-1)),(0,t.Lk)("span",w,(0,i.v_)(s.contributionCount),1)])])],2)))),128))]),U.totalPages>1?((0,t.uX)(),(0,t.CE)("div",E,[(0,t.Lk)("button",{class:"page-btn",disabled:1===U.currentPage,onClick:a[1]||(a[1]=s=>A.changePage(U.currentPage-1))}," 上一页 ",8,I),(0,t.Lk)("span",X,(0,i.v_)(U.currentPage)+" / "+(0,i.v_)(U.totalPages),1),(0,t.Lk)("button",{class:"page-btn",disabled:U.currentPage===U.totalPages,onClick:a[2]||(a[2]=s=>A.changePage(U.currentPage+1))}," 下一页 ",8,_)])):(0,t.Q3)("",!0)]))])])}e(4114);var U=e(562),A=e(4715),D=e(4373),$=e(8704),x={name:"RankingView",components:{NavBar:U.A,UserMeta:A.A},data(){return{rankingData:[],loading:!0,error:null,currentPage:1,totalPages:0,limit:20,myPosition:null}},mounted(){const s=parseInt(this.$route.query.page)||1;this.fetchRanking(s),document.title="投稿排行榜 - NEU 小站"},watch:{"$route.query.page"(s){const a=parseInt(s)||1;a!==this.currentPage&&this.fetchRanking(a)}},methods:{async fetchRanking(s){this.loading=!0,this.error=null;try{const a=$.A.get("token"),e={};a&&(e["Authorization"]=a);const t=await D.A.get("https://newfront.xn--xhq44jb2fzpc.com/ranking",{params:{page:s,limit:this.limit},headers:e}),{data:i,totalPages:n,page:l,my_position:r}=t.data;this.rankingData=i,this.totalPages=n,this.currentPage=l,this.myPosition=r,window.scrollTo({top:0,behavior:"smooth"})}catch(a){console.error("Failed to fetch ranking:",a),this.error="获取排行榜数据失败,请稍后重试"}finally{this.loading=!1}},changePage(s){s>=1&&s<=this.totalPages&&this.$router.push({query:{...this.$route.query,page:s}})},getRankClass(s){return 1===s?"rank-gold":2===s?"rank-silver":3===s?"rank-bronze":""},getMedalIcon(s){const a=["🥇","🥈","🥉"];return a[s-1]||""}}},M=e(1241);const q=(0,M.A)(x,[["render",Q],["__scopeId","data-v-fc98432e"]]);var F=q}}]);
-//# sourceMappingURL=561.73a6314e.js.map
\ No newline at end of file
diff --git a/dist/js/app.aeab123f.js b/dist/js/app.22246017.js
similarity index 98%
rename from dist/js/app.aeab123f.js
rename to dist/js/app.22246017.js
index f6c42ca..3e9fd9e 100644
--- a/dist/js/app.aeab123f.js
+++ b/dist/js/app.22246017.js
@@ -1,2 +1,2 @@
-(function(){"use strict";var e={562:function(e,t,s){s.d(t,{A:function(){return me}});var a=s(6768),n=s(4232),o=s(5130);const i={class:"navbar"},r={class:"container"},c={class:"navbar-brand"},l={class:"burger-container"},d={key:0,class:"unread-dot burger-badge"},u={class:"navbar-end"},h={key:0,class:"navbar-item user-dropdown",style:{padding:"0"}},p={class:"avatar-wrapper"},g=["src","alt"],m={key:0,class:"unread-dot avatar-badge"},f={class:"user-nickname"},v={class:"dropdown-menu"},b={key:0,class:"unread-dot"},k={key:1,class:"navbar-item"},y={key:0,class:"activation-dialog"},C={class:"activation-dialog-content"},w={class:"activation-methods"},L={class:"activation-method"},E={class:"activation-method"},_={class:"activation-method"},A=["disabled"],M={key:1,class:"message-modal"},x={class:"message-modal-content"},I={class:"message-modal-header"},S={class:"message-modal-body",ref:"messageContainer"},X={key:0,class:"no-messages"},P={key:1,class:"message-list"},j={class:"message-header"},T={class:"message-time"},z={key:0,class:"unread-tag"},W=["innerHTML"],O={key:1,class:"message-content"},U=["href"],q={key:1},N={key:2,class:"message-content"},D=["href"],F={key:1},V={key:3,class:"message-content"},$=["href"],B={key:1},Q={key:4,class:"message-content"},R={key:5,class:"message-content"},J=["href"],Z={key:1},G={key:6,class:"message-content"},H=["href"],K={key:1},Y={key:7,class:"message-content"},ee=["href"],te={key:1},se={key:8,class:"message-content"},ae={key:2,class:"pagination"},ne=["disabled"],oe={class:"page-info"},ie=["disabled"];function re(e,t,s,re,ce,le){const de=(0,a.g2)("router-link");return(0,a.uX)(),(0,a.CE)("nav",i,[(0,a.Lk)("div",r,[(0,a.Lk)("div",c,[(0,a.bF)(de,{to:"/",class:"navbar-logo"},{default:(0,a.k6)((()=>[t[14]||(t[14]=(0,a.Lk)("img",{src:"https://download.xn--xhq44jb2fzpc.com/images/logo-hd.png",alt:"NEU小站",class:"navbar-logo-img"},null,-1)),t[15]||(t[15]=(0,a.Lk)("span",null,"NEU小站",-1)),le.currentTagConfig?((0,a.uX)(),(0,a.CE)("span",{key:0,style:(0,n.Tr)({backgroundColor:le.currentTagConfig.backgroundColor}),class:"route-tag"},(0,n.v_)(le.currentTagConfig.text),5)):(0,a.Q3)("",!0)])),_:1}),(0,a.Lk)("div",l,[(0,a.Lk)("div",{class:(0,n.C4)(["navbar-burger",{"is-active":ce.isMenuActive}]),onClick:t[0]||(t[0]=(...e)=>le.toggleMenu&&le.toggleMenu(...e))},t[16]||(t[16]=[(0,a.Lk)("span",null,null,-1),(0,a.Lk)("span",null,null,-1),(0,a.Lk)("span",null,null,-1)]),2),ce.userInfo&&ce.userInfo.messageUnread?((0,a.uX)(),(0,a.CE)("span",d)):(0,a.Q3)("",!0)])]),(0,a.Lk)("div",{class:(0,n.C4)(["navbar-menu",{"is-active":ce.isMenuActive}])},[(0,a.Lk)("div",u,[(0,a.bF)(de,{to:"/",class:"navbar-item"},{default:(0,a.k6)((()=>t[17]||(t[17]=[(0,a.eW)("首页")]))),_:1}),(0,a.bF)(de,{to:"/strategy",class:"navbar-item"},{default:(0,a.k6)((()=>t[18]||(t[18]=[(0,a.eW)("攻略指南")]))),_:1}),(0,a.bF)(de,{to:"/resources",class:"navbar-item"},{default:(0,a.k6)((()=>t[19]||(t[19]=[(0,a.eW)("资源共享")]))),_:1}),(0,a.bF)(de,{to:"/ranking",class:"navbar-item"},{default:(0,a.k6)((()=>t[20]||(t[20]=[(0,a.eW)("投稿排行榜")]))),_:1}),(0,a.bF)(de,{to:"/app",class:"navbar-item"},{default:(0,a.k6)((()=>t[21]||(t[21]=[(0,a.eW)("应用中心")]))),_:1}),(0,a.bF)(de,{to:"/widgets",class:"navbar-item"},{default:(0,a.k6)((()=>t[22]||(t[22]=[(0,a.eW)("小工具")]))),_:1}),(0,a.bF)(de,{to:"/about",class:"navbar-item"},{default:(0,a.k6)((()=>t[23]||(t[23]=[(0,a.eW)("关于")]))),_:1}),(0,a.bF)(de,{to:"/search",class:"navbar-item"},{default:(0,a.k6)((()=>t[24]||(t[24]=[(0,a.eW)("搜索")]))),_:1}),ce.userInfo?((0,a.uX)(),(0,a.CE)("div",h,[(0,a.Lk)("div",{class:"user-info",onClick:t[1]||(t[1]=(...e)=>le.toggleDropdown&&le.toggleDropdown(...e))},[(0,a.Lk)("div",p,[(0,a.Lk)("img",{src:ce.userInfo.avatar_path,class:"user-avatar",alt:ce.userInfo.nickname},null,8,g),ce.userInfo.messageUnread?((0,a.uX)(),(0,a.CE)("span",m)):(0,a.Q3)("",!0)]),(0,a.Lk)("span",f,(0,n.v_)(ce.userInfo.nickname),1),(0,a.Lk)("span",{class:(0,n.C4)(["dropdown-arrow",{"is-active":ce.isDropdownActive}])},"▼",2)]),(0,a.bo)((0,a.Lk)("div",v,[(0,a.Lk)("div",{class:"dropdown-item",onClick:t[2]||(t[2]=(...e)=>le.handleUserCenter&&le.handleUserCenter(...e))},"个人中心"),(0,a.Lk)("div",{class:"dropdown-item",onClick:t[3]||(t[3]=(...e)=>le.handleMessages&&le.handleMessages(...e))},[t[25]||(t[25]=(0,a.eW)(" 我的消息 ")),ce.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)=>le.handleLogout&&le.handleLogout(...e))},"退出登录")],512),[[o.aG,ce.isDropdownActive]])])):((0,a.uX)(),(0,a.CE)("div",k,[(0,a.Lk)("a",{class:"login-btn",onClick:t[5]||(t[5]=(...e)=>le.handleLogin&&le.handleLogin(...e))},"登录")]))])],2)]),ce.showActivationDialog?((0,a.uX)(),(0,a.CE)("div",y,[(0,a.Lk)("div",C,[t[32]||(t[32]=(0,a.Lk)("h3",null,"账户激活",-1)),t[33]||(t[33]=(0,a.Lk)("p",null,"您的账户尚未激活,请选择以下一种方式进行激活。如果无法激活,请退出登录后在“关于”页面联系网站管理员。",-1)),(0,a.Lk)("div",w,[(0,a.Lk)("div",L,[t[26]||(t[26]=(0,a.Lk)("h4",null,"方式 1:NEU 校园网验证",-1)),t[27]||(t[27]=(0,a.Lk)("p",null,"请连接 NEU 校园网后点击下面的验证按钮(暂不支持秦皇岛分校)",-1)),(0,a.Lk)("button",{onClick:t[6]||(t[6]=(...e)=>le.handleNetworkVerify&&le.handleNetworkVerify(...e)),class:"verify-btn"},"校园网验证")]),(0,a.Lk)("div",E,[t[28]||(t[28]=(0,a.Lk)("h4",null,"方式 2:校园邮箱验证",-1)),t[29]||(t[29]=(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)=>le.handleEmailVerify&&le.handleEmailVerify(...e)),class:"verify-btn"},"邮箱验证")]),(0,a.Lk)("div",_,[t[30]||(t[30]=(0,a.Lk)("h4",null,"方式 3:学生证照片认证",-1)),t[31]||(t[31]=(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)=>le.handleFileSelect&&le.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)=>le.triggerFileInput&&le.triggerFileInput(...e)),class:"verify-btn",disabled:ce.isUploading},(0,n.v_)(ce.isUploading?"上传认证中...":"上传学生证"),9,A)])]),(0,a.Lk)("button",{onClick:t[10]||(t[10]=(...e)=>le.handleLogout&&le.handleLogout(...e)),class:"close-btn"},"退出登录")])])):(0,a.Q3)("",!0),ce.showMessageModal?((0,a.uX)(),(0,a.CE)("div",M,[(0,a.Lk)("div",x,[(0,a.Lk)("div",I,[t[34]||(t[34]=(0,a.Lk)("h3",null,"我的消息",-1)),(0,a.Lk)("span",{class:"close-icon",onClick:t[11]||(t[11]=(...e)=>le.closeMessageModal&&le.closeMessageModal(...e))},"×")]),(0,a.Lk)("div",S,[0===ce.messages.length?((0,a.uX)(),(0,a.CE)("div",X," 暂无消息 ")):((0,a.uX)(),(0,a.CE)("div",P,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(ce.messages,(e=>((0,a.uX)(),(0,a.CE)("div",{key:e.id,class:"message-item"},[(0,a.Lk)("div",j,[(0,a.Lk)("span",T,(0,n.v_)(le.formatDate(e.created_at)),1),e.status?(0,a.Q3)("",!0):((0,a.uX)(),(0,a.CE)("span",z,"未读"))]),0===e.type?((0,a.uX)(),(0,a.CE)("div",{key:0,class:"message-content",innerHTML:e.content},null,8,W)):1===e.type?((0,a.uX)(),(0,a.CE)("div",O,[t[35]||(t[35]=(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,U)):((0,a.uX)(),(0,a.CE)("span",q,(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",N,[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.title),9,D)):((0,a.uX)(),(0,a.CE)("span",F,(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[37]||(t[37]=(0,a.eW)(' 您添加的课程"')),e.course_id?((0,a.uX)(),(0,a.CE)("a",{key:0,href:"https://course.xn--xhq44jb2fzpc.com/courses?c="+le.encodeBase64(e.course_id),target:"_blank"},(0,n.v_)(e.course_name),9,$)):((0,a.uX)(),(0,a.CE)("span",B,(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",Q," 您的密钥「"+(0,n.v_)(e.key_plaintext)+"」使用次数已用尽,继续投稿可获得新的密钥。 ",1)):5===e.type?((0,a.uX)(),(0,a.CE)("div",R,[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,J)):((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[39]||(t[39]=(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,H)):((0,a.uX)(),(0,a.CE)("span",K,(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",Y,[t[40]||(t[40]=(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,ee)):((0,a.uX)(),(0,a.CE)("span",te,(0,n.v_)(e.article_title),1)),(0,a.eW)("》浏览量达到"+(0,n.v_)(e.view_count)+",感谢您为NEU小站贡献优质内容,小站因为有你而更加精彩~ ",1)])):((0,a.uX)(),(0,a.CE)("div",se,(0,n.v_)(e.error||"未知消息类型"),1))])))),128))])),ce.totalPages>1?((0,a.uX)(),(0,a.CE)("div",ae,[(0,a.Lk)("button",{disabled:1===ce.currentPage,onClick:t[12]||(t[12]=e=>le.loadMessages(ce.currentPage-1)),class:"page-btn"},"上一页",8,ne),(0,a.Lk)("span",oe,(0,n.v_)(ce.currentPage)+" / "+(0,n.v_)(ce.totalPages),1),(0,a.Lk)("button",{disabled:ce.currentPage===ce.totalPages,onClick:t[13]||(t[13]=e=>le.loadMessages(ce.currentPage+1)),class:"page-btn"},"下一页",8,ie)])):(0,a.Q3)("",!0)],512)])])):(0,a.Q3)("",!0)])}s(4114),s(8111),s(116),s(3579),s(4979);var ce=s(8704),le=s(4373),de=s(4993),ue=s(9090),he={name:"NavBar",data(){return{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:{currentTagConfig(){const e=this.$route.path;return this.tagConfigurations.find((t=>!!t.routes.includes(e)||!!t.wildcard&&t.routes.some((t=>e===t||e.startsWith(t+"/")))))||null}},mounted(){this.checkLoginStatus()},methods:{handleLogin(){(0,ue.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(".");ce.A.remove("token",{domain:e,path:"/"}),this.userInfo=null,window.location.reload()},checkLoginStatus(){const e=ce.A.get("token");e&&le.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"}),de.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=ce.A.get("token");e?le.A.get("https://userlogin.xn--xhq44jb2fzpc.com/qv",{headers:{Authorization:e}}).then((e=>{de.A.alert(e.data.message,"提示"),this.isActivated=!0,this.showActivationDialog=!1})).catch((e=>{e.response&&e.response.data?de.A.alert(`${e.response.data.message} 当前IP: ${e.response.data.ip||"未知"}`,"提示"):de.A.alert("验证失败,请稍后重试","提示")})):de.A.alert("您未登录,请先登录后操作!","提示")},handleEmailVerify(){const e=ce.A.get("token");e?le.A.get("https://userlogin.xn--xhq44jb2fzpc.com/check-email",{headers:{Authorization:e}}).then((e=>{de.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?de.A.alert(t.response.data.message||"发生未知错误,请稍后重试","提示"):de.A.alert("验证失败,请稍后重试","提示")})):de.A.alert("您未登录,请先登录后操作!","提示")},promptForCampusEmail(e){(0,de.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):de.A.alert("请输入有效的 @stu.neu.edu.cn、@stu.neuq.edu.cn 或 @mails.neu.edu.cn 校园邮箱!","提示"):de.A.alert("邮箱不能为空","提示")})).catch((()=>{}))},sendCampusVerificationEmail(e,t){le.A.post("https://userlogin.xn--xhq44jb2fzpc.com/send-campus-verify",{campus_email:e},{headers:{Authorization:t,"Content-Type":"application/json"}}).then((t=>{de.A.alert(`验证邮件已发送至 ${e},请检查您的邮箱完成验证。`,"提示")})).catch((e=>{e.response&&e.response.data?de.A.alert(`发送验证邮件失败:${e.response.data.message}`,"提示"):de.A.alert("发送验证邮件失败,请稍后重试","提示")}))},handleMessages(){this.isDropdownActive=!1,this.showMessageModal=!0,this.loadMessages(1)},closeMessageModal(){this.showMessageModal=!1,this.checkLoginStatus()},loadMessages(e){this.currentPage=e,le.A.get("https://newfront.xn--xhq44jb2fzpc.com/message/get",{headers:{Authorization:ce.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),de.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 de.A.alert("不支持的文件格式,请上传 JPG, PNG, 或 WEBP 图片。","格式错误");const a=5242880;if(t.size>a)de.A.alert("文件大小不能超过 5MB。","文件过大");else{this.isUploading=!0;try{const e=ce.A.get("token");if(!e)return de.A.alert("您未登录,请先登录后操作!","提示"),void(this.isUploading=!1);const s=await le.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 le.A.put(a,t,{headers:{"Content-Type":t.type}});await le.A.post("https://newfront.xn--xhq44jb2fzpc.com/freshman/validate_card/verify",{objectPath:n},{headers:{Authorization:e}});de.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),de.A.alert(e,"错误")}finally{this.isUploading=!1,this.$refs.fileInput.value=""}}}}},pe=s(1241);const ge=(0,pe.A)(he,[["render",re],["__scopeId","data-v-106b3415"]]);var me=ge},2090:function(e,t,s){s.d(t,{A:function(){return f}});s(4114);var a=s(6768),n=s(5130),o=s(4232);const i={class:"bar-message-text"};function r(e,t,s,r,c,l){return(0,a.uX)(),(0,a.Wv)(n.eB,{name:"bar-message-fade"},{default:(0,a.k6)((()=>[c.visible?((0,a.uX)(),(0,a.CE)("div",{key:0,class:"bar-message",style:(0,o.Tr)(l.positionStyle)},[(0,a.Lk)("div",{class:(0,o.C4)(["bar-message-content",c.customColor?"":c.type]),style:(0,o.Tr)({backgroundColor:c.customColor})},[c.showIcon?((0,a.uX)(),(0,a.CE)("i",{key:0,class:(0,o.C4)(["bar-message-icon",l.iconClass])},null,2)):(0,a.Q3)("",!0),(0,a.Lk)("span",i,(0,o.v_)(c.message),1),c.showClose?((0,a.uX)(),(0,a.CE)("i",{key:1,class:"bar-message-close fas fa-times",onClick:t[0]||(t[0]=(...e)=>l.close&&l.close(...e))})):(0,a.Q3)("",!0)],6)],4)):(0,a.Q3)("",!0)])),_:1})}var c={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()}}},l=s(1241);const d=(0,l.A)(c,[["render",r],["__scopeId","data-v-18bdfd8a"]]);var u=d;const h=[];let p=1;const g=function(e){"string"===typeof e&&(e={message:e}),e=e||{};const t="bar_message_"+p++,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 r=i.component.proxy;r.show(e);const c={id:t,vnode:i,vm:r,container:s};return h.push(c),{close:()=>{r.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=>{g[e]=t=>("string"===typeof t?t={message:t,type:e}:(t=t||{},t.type=e),g(t))})),g.permanent=e=>("string"===typeof e&&(e={message:e}),e=e||{},e.duration=0,e.showClose=!1!==e.showClose,g(e)),g.closeAll=function(){for(let e=h.length-1;e>=0;e--)h[e].vm.close()};var f=g},4529:function(e,t,s){var a=s(5130),n=s(6768);const o={id:"app"},i={class:"beian-footer"},r={class:"container"},c={class:"copyright"};function l(e,t){const s=(0,n.g2)("router-view"),a=(0,n.g2)("router-link");return(0,n.uX)(),(0,n.CE)("div",o,[(0,n.bF)(s),(0,n.Lk)("footer",i,[(0,n.Lk)("div",r,[t[2]||(t[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",c,[t[1]||(t[1]=(0,n.eW)(" © 2025 ")),(0,n.bF)(a,{to:"/about"},{default:(0,n.k6)((()=>t[0]||(t[0]=[(0,n.eW)("NEU小站")]))),_:1})])])])])}var d=s(1241);const u={},h=(0,d.A)(u,[["render",l]]);var p=h,g=s(1387);const m={class:"home"},f={class:"container"},v={class:"welcome-section"},b={class:"quick-links"};function k(e,t,s,a,o,i){const r=(0,n.g2)("Navbar");return(0,n.uX)(),(0,n.CE)("div",m,[(0,n.bF)(r),(0,n.Lk)("div",f,[(0,n.Lk)("div",v,[t[2]||(t[2]=(0,n.Lk)("img",{alt:"Vue logo",src:"https://download.东北大学.com/images/logo-hd.png"},null,-1)),t[3]||(t[3]=(0,n.Lk)("h1",null,"欢迎访问NEU小站",-1)),(0,n.Lk)("div",b,[t[1]||(t[1]=(0,n.Lk)("span",null,"快速入口:",-1)),(0,n.Lk)("a",{onClick:t[0]||(t[0]=e=>i.goTo("course",!0)),target:"_blank"},"课程评分系统")]),t[4]||(t[4]=(0,n.Lk)("div",{class:"intro-text"},[(0,n.Lk)("p",null,"“哈哈,恭喜你发现了宝藏,让我在接下来的日子里陪你一起成长吧”"),(0,n.Lk)("p",{style:{"text-align":"right"}},"——NEU小站")],-1))])])])}var y=s(562),C=s(4993),w={name:"HomeView",components:{Navbar:y.A},created(){document.title="NEU小站"},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?C.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}`)}}};const L=(0,d.A)(w,[["render",k],["__scopeId","data-v-5a2476b6"]]);var E=L,_=s(4130),A=s.n(_);A().configure({showSpinner:!1});const M=[{path:"/",name:"home",component:E},{path:"/login",name:"login",component:()=>s.e(20).then(s.bind(s,4020))},{path:"/article/:id",name:"article-detail",component:()=>s.e(597).then(s.bind(s,7597))},{path:"/about",name:"about",component:()=>s.e(645).then(s.bind(s,9645))},{path:"/strategy",name:"strategy",component:()=>s.e(181).then(s.bind(s,8181))},{path:"/resources",name:"resources",component:()=>s.e(690).then(s.bind(s,9690))},{path:"/ranking",name:"ranking",component:()=>s.e(561).then(s.bind(s,7561))},{path:"/:pathMatch(.*)*",name:"404",component:()=>s.e(899).then(s.bind(s,3899))},{path:"/search",name:"search",component:()=>s.e(368).then(s.bind(s,7368))},{path:"/user-center",name:"user-center",component:()=>s.e(20).then(s.bind(s,4020))},{path:"/app",name:"app",component:()=>s.e(270).then(s.bind(s,9270))},{path:"/submit",name:"submit",component:()=>s.e(312).then(s.bind(s,312))},{path:"/preview",name:"preview",component:()=>s.e(597).then(s.bind(s,7597))},{path:"/edit",name:"edit-article",component:()=>s.e(312).then(s.bind(s,312))},{path:"/widgets",name:"widgets",component:()=>s.e(155).then(s.bind(s,5155))},{path:"/widgets/webvpn",name:"webvpn",component:()=>s.e(898).then(s.bind(s,898))}],x=(0,g.aE)({history:(0,g.LA)("/"),routes:M});x.beforeEach(((e,t,s)=>{A().start(),s()})),x.afterEach((()=>{A().done()}));var I=x,S=s(2090);const X=(0,a.Ef)(p);X.config.globalProperties.$barMessage=S.A,X.use(I).mount("#app"),window.$barMessage=S.A},4993:function(e,t,s){s.d(t,{A:function(){return b}});var a=s(5130),n=s(6768),o=s(4232);const i={class:"message-box"},r={key:0,class:"message-header"},c={class:"message-content"},l={key:0,class:"input-wrapper"},d=["type","placeholder"],u={class:"message-footer"};function h(e,t,s,h,p,g){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)=>g.handleOverlayClick&&g.handleOverlayClick(...e)),["self"]))},[(0,n.Lk)("div",i,[s.title?((0,n.uX)(),(0,n.CE)("div",r,[(0,n.Lk)("h3",null,(0,o.v_)(s.title),1)])):(0,n.Q3)("",!0),(0,n.Lk)("div",c,[(0,n.Lk)("p",null,(0,o.v_)(s.message),1),s.showInput?((0,n.uX)(),(0,n.CE)("div",l,[(0,n.bo)((0,n.Lk)("input",{"onUpdate:modelValue":t[0]||(t[0]=e=>p.localInputValue=e),type:s.inputType,placeholder:s.inputPlaceholder,class:"message-input",onKeyup:t[1]||(t[1]=(0,a.jR)(((...e)=>g.handleConfirm&&g.handleConfirm(...e)),["enter"]))},null,40,d),[[a.hp,p.localInputValue]])])):(0,n.Q3)("",!0)]),(0,n.Lk)("div",u,[g.cancelVisible?((0,n.uX)(),(0,n.CE)("button",{key:0,class:"btn btn-cancel",onClick:t[2]||(t[2]=(...e)=>g.handleCancel&&g.handleCancel(...e))},(0,o.v_)(s.cancelText),1)):(0,n.Q3)("",!0),g.confirmVisible?((0,n.uX)(),(0,n.CE)("button",{key:1,class:"btn btn-confirm",onClick:t[3]||(t[3]=(...e)=>g.handleConfirm&&g.handleConfirm(...e))},(0,o.v_)(s.confirmText),1)):(0,n.Q3)("",!0)])])])):(0,n.Q3)("",!0)])),_:1})}var p={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")}}},g=s(1241);const m=(0,g.A)(p,[["render",h],["__scopeId","data-v-076938bc"]]);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 b=v},9090:function(e,t,s){s.d(t,{A:function(){return A}});var a=s(5130),n=s(6768),o=s(4232);const i={key:0,class:"login-container"},r={class:"login-box"},c={class:"login-header"},l={class:"form-group"},d={class:"form-group"},u={class:"button-group"},h={class:"modal-content"},p={class:"modal-header"},g={class:"modal-body"},m={class:"captcha-instruction"},f={class:"form-group"},v={class:"modal-footer"},b={key:0,class:"loading-overlay"};function k(e,t,s,k,y,C){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",r,[(0,n.Lk)("div",c,[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)=>C.handleClose&&C.handleClose(...e)),class:"close-btn"},"×")):(0,n.Q3)("",!0)]),(0,n.Lk)("form",{onSubmit:t[4]||(t[4]=(0,a.D$)(((...e)=>C.handleSubmit&&C.handleSubmit(...e)),["prevent"])),class:"login-form"},[(0,n.Lk)("div",l,[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)=>C.login&&C.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",p,[t[11]||(t[11]=(0,n.Lk)("h3",null,"邮箱验证",-1)),(0,n.Lk)("button",{onClick:t[5]||(t[5]=(...e)=>C.closeCaptchaModal&&C.closeCaptchaModal(...e)),class:"close-btn"},"×")]),(0,n.Lk)("div",g,[(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)=>C.verifyCaptcha&&C.verifyCaptcha(...e)),class:"btn btn-primary"},"验证")])])],2),y.loading?((0,n.uX)(),(0,n.CE)("div",b,[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(4993),C={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(){const e=navigator.userAgent;return/android/i.test(e)?"Android":/iPad|iPhone|iPod/.test(e)?"iOS":/Windows Phone/i.test(e)?"Windows Phone":/Windows/i.test(e)?"Windows":/Macintosh|Mac OS X/i.test(e)?"macOS":/Linux/i.test(e)?"Linux":"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=86340; path=/; domain=${s}; secure; SameSite=Strict`,this.loading=!1,this.message="登录成功!正在加载中...",this.messageIsError=!1;const a={email:this.email,userId:e.id,token:e.token};this.onSuccess&&(this.onSuccess(a),window.location.reload()),this.$emit("login-success",a),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)))}}},w=s(1241);const L=(0,w.A)(C,[["render",k],["__scopeId","data-v-66365b1a"]]);var E=L;const _=(e={})=>new Promise(((t,s)=>{const n=document.createElement("div");document.body.appendChild(n);const o=(0,a.Ef)(E,{...e,visible:!0,showClose:!0,onSuccess:e=>{t(e)},onClose:()=>{o.unmount(),document.body.removeChild(n)}});o.mount(n)}));_.withCallback=(e,t={})=>_({...t,onSuccess:t=>{e(t)}});var 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[c])}))?a.splice(c--,1):(r=!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+"."+{12:"dc7bebdb",20:"07132bc6",155:"1f667a01",181:"541c8ed4",270:"c1406307",312:"7ab686ca",368:"c54ba54d",561:"73a6314e",597:"3683ba56",645:"6d6207d3",690:"d0237e04",898:"dc83e1e3",899:"831a7510",940:"705f02e8"}[e]+".js"}}(),function(){s.miniCssF=function(e){return"css/"+e+"."+{20:"3061a268",155:"e92d57c5",181:"8f61b0cf",270:"e032f250",312:"a2ba332f",368:"9ee9e7c3",561:"f10627b5",597:"eec7e7ed",645:"db1b5e5b",690:"4b505240",898:"6cbcb5bc",899:"35501d47"}[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 r,c;if(void 0!==o)for(var l=document.getElementsByTagName("script"),d=0;d[t[14]||(t[14]=(0,a.Lk)("img",{src:"https://download.xn--xhq44jb2fzpc.com/images/logo-hd.png",alt:"NEU小站",class:"navbar-logo-img"},null,-1)),t[15]||(t[15]=(0,a.Lk)("span",null,"NEU小站",-1)),le.currentTagConfig?((0,a.uX)(),(0,a.CE)("span",{key:0,style:(0,n.Tr)({backgroundColor:le.currentTagConfig.backgroundColor}),class:"route-tag"},(0,n.v_)(le.currentTagConfig.text),5)):(0,a.Q3)("",!0)])),_:1}),(0,a.Lk)("div",l,[(0,a.Lk)("div",{class:(0,n.C4)(["navbar-burger",{"is-active":ce.isMenuActive}]),onClick:t[0]||(t[0]=(...e)=>le.toggleMenu&&le.toggleMenu(...e))},t[16]||(t[16]=[(0,a.Lk)("span",null,null,-1),(0,a.Lk)("span",null,null,-1),(0,a.Lk)("span",null,null,-1)]),2),ce.userInfo&&ce.userInfo.messageUnread?((0,a.uX)(),(0,a.CE)("span",d)):(0,a.Q3)("",!0)])]),(0,a.Lk)("div",{class:(0,n.C4)(["navbar-menu",{"is-active":ce.isMenuActive}])},[(0,a.Lk)("div",u,[(0,a.bF)(de,{to:"/",class:"navbar-item"},{default:(0,a.k6)((()=>t[17]||(t[17]=[(0,a.eW)("首页")]))),_:1}),(0,a.bF)(de,{to:"/strategy",class:"navbar-item"},{default:(0,a.k6)((()=>t[18]||(t[18]=[(0,a.eW)("攻略指南")]))),_:1}),(0,a.bF)(de,{to:"/resources",class:"navbar-item"},{default:(0,a.k6)((()=>t[19]||(t[19]=[(0,a.eW)("资源共享")]))),_:1}),(0,a.bF)(de,{to:"/ranking",class:"navbar-item"},{default:(0,a.k6)((()=>t[20]||(t[20]=[(0,a.eW)("投稿排行榜")]))),_:1}),(0,a.bF)(de,{to:"/app",class:"navbar-item"},{default:(0,a.k6)((()=>t[21]||(t[21]=[(0,a.eW)("应用中心")]))),_:1}),(0,a.bF)(de,{to:"/widgets",class:"navbar-item"},{default:(0,a.k6)((()=>t[22]||(t[22]=[(0,a.eW)("小工具")]))),_:1}),(0,a.bF)(de,{to:"/about",class:"navbar-item"},{default:(0,a.k6)((()=>t[23]||(t[23]=[(0,a.eW)("关于")]))),_:1}),(0,a.bF)(de,{to:"/search",class:"navbar-item"},{default:(0,a.k6)((()=>t[24]||(t[24]=[(0,a.eW)("搜索")]))),_:1}),ce.userInfo?((0,a.uX)(),(0,a.CE)("div",h,[(0,a.Lk)("div",{class:"user-info",onClick:t[1]||(t[1]=(...e)=>le.toggleDropdown&&le.toggleDropdown(...e))},[(0,a.Lk)("div",p,[(0,a.Lk)("img",{src:ce.userInfo.avatar_path,class:"user-avatar",alt:ce.userInfo.nickname},null,8,g),ce.userInfo.messageUnread?((0,a.uX)(),(0,a.CE)("span",m)):(0,a.Q3)("",!0)]),(0,a.Lk)("span",f,(0,n.v_)(ce.userInfo.nickname),1),(0,a.Lk)("span",{class:(0,n.C4)(["dropdown-arrow",{"is-active":ce.isDropdownActive}])},"▼",2)]),(0,a.bo)((0,a.Lk)("div",v,[(0,a.Lk)("div",{class:"dropdown-item",onClick:t[2]||(t[2]=(...e)=>le.handleUserCenter&&le.handleUserCenter(...e))},"个人中心"),(0,a.Lk)("div",{class:"dropdown-item",onClick:t[3]||(t[3]=(...e)=>le.handleMessages&&le.handleMessages(...e))},[t[25]||(t[25]=(0,a.eW)(" 我的消息 ")),ce.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)=>le.handleLogout&&le.handleLogout(...e))},"退出登录")],512),[[o.aG,ce.isDropdownActive]])])):((0,a.uX)(),(0,a.CE)("div",k,[(0,a.Lk)("a",{class:"login-btn",onClick:t[5]||(t[5]=(...e)=>le.handleLogin&&le.handleLogin(...e))},"登录")]))])],2)]),ce.showActivationDialog?((0,a.uX)(),(0,a.CE)("div",y,[(0,a.Lk)("div",C,[t[32]||(t[32]=(0,a.Lk)("h3",null,"账户激活",-1)),t[33]||(t[33]=(0,a.Lk)("p",null,"您的账户尚未激活,请选择以下一种方式进行激活。如果无法激活,请退出登录后在“关于”页面联系网站管理员。",-1)),(0,a.Lk)("div",w,[(0,a.Lk)("div",L,[t[26]||(t[26]=(0,a.Lk)("h4",null,"方式 1:NEU 校园网验证",-1)),t[27]||(t[27]=(0,a.Lk)("p",null,"请连接 NEU 校园网后点击下面的验证按钮(暂不支持秦皇岛分校)",-1)),(0,a.Lk)("button",{onClick:t[6]||(t[6]=(...e)=>le.handleNetworkVerify&&le.handleNetworkVerify(...e)),class:"verify-btn"},"校园网验证")]),(0,a.Lk)("div",E,[t[28]||(t[28]=(0,a.Lk)("h4",null,"方式 2:校园邮箱验证",-1)),t[29]||(t[29]=(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)=>le.handleEmailVerify&&le.handleEmailVerify(...e)),class:"verify-btn"},"邮箱验证")]),(0,a.Lk)("div",_,[t[30]||(t[30]=(0,a.Lk)("h4",null,"方式 3:学生证照片认证",-1)),t[31]||(t[31]=(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)=>le.handleFileSelect&&le.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)=>le.triggerFileInput&&le.triggerFileInput(...e)),class:"verify-btn",disabled:ce.isUploading},(0,n.v_)(ce.isUploading?"上传认证中...":"上传学生证"),9,A)])]),(0,a.Lk)("button",{onClick:t[10]||(t[10]=(...e)=>le.handleLogout&&le.handleLogout(...e)),class:"close-btn"},"退出登录")])])):(0,a.Q3)("",!0),ce.showMessageModal?((0,a.uX)(),(0,a.CE)("div",M,[(0,a.Lk)("div",x,[(0,a.Lk)("div",I,[t[34]||(t[34]=(0,a.Lk)("h3",null,"我的消息",-1)),(0,a.Lk)("span",{class:"close-icon",onClick:t[11]||(t[11]=(...e)=>le.closeMessageModal&&le.closeMessageModal(...e))},"×")]),(0,a.Lk)("div",S,[0===ce.messages.length?((0,a.uX)(),(0,a.CE)("div",X," 暂无消息 ")):((0,a.uX)(),(0,a.CE)("div",P,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(ce.messages,(e=>((0,a.uX)(),(0,a.CE)("div",{key:e.id,class:"message-item"},[(0,a.Lk)("div",j,[(0,a.Lk)("span",T,(0,n.v_)(le.formatDate(e.created_at)),1),e.status?(0,a.Q3)("",!0):((0,a.uX)(),(0,a.CE)("span",z,"未读"))]),0===e.type?((0,a.uX)(),(0,a.CE)("div",{key:0,class:"message-content",innerHTML:e.content},null,8,W)):1===e.type?((0,a.uX)(),(0,a.CE)("div",O,[t[35]||(t[35]=(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,U)):((0,a.uX)(),(0,a.CE)("span",q,(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",N,[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.title),9,D)):((0,a.uX)(),(0,a.CE)("span",F,(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[37]||(t[37]=(0,a.eW)(' 您添加的课程"')),e.course_id?((0,a.uX)(),(0,a.CE)("a",{key:0,href:"https://course.xn--xhq44jb2fzpc.com/courses?c="+le.encodeBase64(e.course_id),target:"_blank"},(0,n.v_)(e.course_name),9,$)):((0,a.uX)(),(0,a.CE)("span",B,(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",Q," 您的密钥「"+(0,n.v_)(e.key_plaintext)+"」使用次数已用尽,继续投稿可获得新的密钥。 ",1)):5===e.type?((0,a.uX)(),(0,a.CE)("div",R,[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,J)):((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[39]||(t[39]=(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,H)):((0,a.uX)(),(0,a.CE)("span",K,(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",Y,[t[40]||(t[40]=(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,ee)):((0,a.uX)(),(0,a.CE)("span",te,(0,n.v_)(e.article_title),1)),(0,a.eW)("》浏览量达到"+(0,n.v_)(e.view_count)+",感谢您为NEU小站贡献优质内容,小站因为有你而更加精彩~ ",1)])):((0,a.uX)(),(0,a.CE)("div",se,(0,n.v_)(e.error||"未知消息类型"),1))])))),128))])),ce.totalPages>1?((0,a.uX)(),(0,a.CE)("div",ae,[(0,a.Lk)("button",{disabled:1===ce.currentPage,onClick:t[12]||(t[12]=e=>le.loadMessages(ce.currentPage-1)),class:"page-btn"},"上一页",8,ne),(0,a.Lk)("span",oe,(0,n.v_)(ce.currentPage)+" / "+(0,n.v_)(ce.totalPages),1),(0,a.Lk)("button",{disabled:ce.currentPage===ce.totalPages,onClick:t[13]||(t[13]=e=>le.loadMessages(ce.currentPage+1)),class:"page-btn"},"下一页",8,ie)])):(0,a.Q3)("",!0)],512)])])):(0,a.Q3)("",!0)])}s(4114),s(8111),s(116),s(3579),s(4979);var ce=s(8704),le=s(4373),de=s(4993),ue=s(9090),he={name:"NavBar",data(){return{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:{currentTagConfig(){const e=this.$route.path;return this.tagConfigurations.find((t=>!!t.routes.includes(e)||!!t.wildcard&&t.routes.some((t=>e===t||e.startsWith(t+"/")))))||null}},mounted(){this.checkLoginStatus()},methods:{handleLogin(){(0,ue.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(".");ce.A.remove("token",{domain:e,path:"/"}),this.userInfo=null,window.location.reload()},checkLoginStatus(){const e=ce.A.get("token");e&&le.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"}),de.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=ce.A.get("token");e?le.A.get("https://userlogin.xn--xhq44jb2fzpc.com/qv",{headers:{Authorization:e}}).then((e=>{de.A.alert(e.data.message,"提示"),this.isActivated=!0,this.showActivationDialog=!1})).catch((e=>{e.response&&e.response.data?de.A.alert(`${e.response.data.message} 当前IP: ${e.response.data.ip||"未知"}`,"提示"):de.A.alert("验证失败,请稍后重试","提示")})):de.A.alert("您未登录,请先登录后操作!","提示")},handleEmailVerify(){const e=ce.A.get("token");e?le.A.get("https://userlogin.xn--xhq44jb2fzpc.com/check-email",{headers:{Authorization:e}}).then((e=>{de.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?de.A.alert(t.response.data.message||"发生未知错误,请稍后重试","提示"):de.A.alert("验证失败,请稍后重试","提示")})):de.A.alert("您未登录,请先登录后操作!","提示")},promptForCampusEmail(e){(0,de.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):de.A.alert("请输入有效的 @stu.neu.edu.cn、@stu.neuq.edu.cn 或 @mails.neu.edu.cn 校园邮箱!","提示"):de.A.alert("邮箱不能为空","提示")})).catch((()=>{}))},sendCampusVerificationEmail(e,t){le.A.post("https://userlogin.xn--xhq44jb2fzpc.com/send-campus-verify",{campus_email:e},{headers:{Authorization:t,"Content-Type":"application/json"}}).then((t=>{de.A.alert(`验证邮件已发送至 ${e},请检查您的邮箱完成验证。`,"提示")})).catch((e=>{e.response&&e.response.data?de.A.alert(`发送验证邮件失败:${e.response.data.message}`,"提示"):de.A.alert("发送验证邮件失败,请稍后重试","提示")}))},handleMessages(){this.isDropdownActive=!1,this.showMessageModal=!0,this.loadMessages(1)},closeMessageModal(){this.showMessageModal=!1,this.checkLoginStatus()},loadMessages(e){this.currentPage=e,le.A.get("https://newfront.xn--xhq44jb2fzpc.com/message/get",{headers:{Authorization:ce.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),de.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 de.A.alert("不支持的文件格式,请上传 JPG, PNG, 或 WEBP 图片。","格式错误");const a=5242880;if(t.size>a)de.A.alert("文件大小不能超过 5MB。","文件过大");else{this.isUploading=!0;try{const e=ce.A.get("token");if(!e)return de.A.alert("您未登录,请先登录后操作!","提示"),void(this.isUploading=!1);const s=await le.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 le.A.put(a,t,{headers:{"Content-Type":t.type}});await le.A.post("https://newfront.xn--xhq44jb2fzpc.com/freshman/validate_card/verify",{objectPath:n},{headers:{Authorization:e}});de.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),de.A.alert(e,"错误")}finally{this.isUploading=!1,this.$refs.fileInput.value=""}}}}},pe=s(1241);const ge=(0,pe.A)(he,[["render",re],["__scopeId","data-v-106b3415"]]);var me=ge},2090:function(e,t,s){s.d(t,{A:function(){return f}});s(4114);var a=s(6768),n=s(5130),o=s(4232);const i={class:"bar-message-text"};function r(e,t,s,r,c,l){return(0,a.uX)(),(0,a.Wv)(n.eB,{name:"bar-message-fade"},{default:(0,a.k6)((()=>[c.visible?((0,a.uX)(),(0,a.CE)("div",{key:0,class:"bar-message",style:(0,o.Tr)(l.positionStyle)},[(0,a.Lk)("div",{class:(0,o.C4)(["bar-message-content",c.customColor?"":c.type]),style:(0,o.Tr)({backgroundColor:c.customColor})},[c.showIcon?((0,a.uX)(),(0,a.CE)("i",{key:0,class:(0,o.C4)(["bar-message-icon",l.iconClass])},null,2)):(0,a.Q3)("",!0),(0,a.Lk)("span",i,(0,o.v_)(c.message),1),c.showClose?((0,a.uX)(),(0,a.CE)("i",{key:1,class:"bar-message-close fas fa-times",onClick:t[0]||(t[0]=(...e)=>l.close&&l.close(...e))})):(0,a.Q3)("",!0)],6)],4)):(0,a.Q3)("",!0)])),_:1})}var c={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()}}},l=s(1241);const d=(0,l.A)(c,[["render",r],["__scopeId","data-v-18bdfd8a"]]);var u=d;const h=[];let p=1;const g=function(e){"string"===typeof e&&(e={message:e}),e=e||{};const t="bar_message_"+p++,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 r=i.component.proxy;r.show(e);const c={id:t,vnode:i,vm:r,container:s};return h.push(c),{close:()=>{r.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=>{g[e]=t=>("string"===typeof t?t={message:t,type:e}:(t=t||{},t.type=e),g(t))})),g.permanent=e=>("string"===typeof e&&(e={message:e}),e=e||{},e.duration=0,e.showClose=!1!==e.showClose,g(e)),g.closeAll=function(){for(let e=h.length-1;e>=0;e--)h[e].vm.close()};var f=g},4529:function(e,t,s){var a=s(5130),n=s(6768);const o={id:"app"},i={class:"beian-footer"},r={class:"container"},c={class:"copyright"};function l(e,t){const s=(0,n.g2)("router-view"),a=(0,n.g2)("router-link");return(0,n.uX)(),(0,n.CE)("div",o,[(0,n.bF)(s),(0,n.Lk)("footer",i,[(0,n.Lk)("div",r,[t[2]||(t[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",c,[t[1]||(t[1]=(0,n.eW)(" © 2025 ")),(0,n.bF)(a,{to:"/about"},{default:(0,n.k6)((()=>t[0]||(t[0]=[(0,n.eW)("NEU小站")]))),_:1})])])])])}var d=s(1241);const u={},h=(0,d.A)(u,[["render",l]]);var p=h,g=s(1387);const m={class:"home"},f={class:"container"},v={class:"welcome-section"},b={class:"quick-links"};function k(e,t,s,a,o,i){const r=(0,n.g2)("Navbar");return(0,n.uX)(),(0,n.CE)("div",m,[(0,n.bF)(r),(0,n.Lk)("div",f,[(0,n.Lk)("div",v,[t[2]||(t[2]=(0,n.Lk)("img",{alt:"Vue logo",src:"https://download.东北大学.com/images/logo-hd.png"},null,-1)),t[3]||(t[3]=(0,n.Lk)("h1",null,"欢迎访问NEU小站",-1)),(0,n.Lk)("div",b,[t[1]||(t[1]=(0,n.Lk)("span",null,"快速入口:",-1)),(0,n.Lk)("a",{onClick:t[0]||(t[0]=e=>i.goTo("course",!0)),target:"_blank"},"课程评分系统")]),t[4]||(t[4]=(0,n.Lk)("div",{class:"intro-text"},[(0,n.Lk)("p",null,"“哈哈,恭喜你发现了宝藏,让我在接下来的日子里陪你一起成长吧”"),(0,n.Lk)("p",{style:{"text-align":"right"}},"——NEU小站")],-1))])])])}var y=s(562),C=s(4993),w={name:"HomeView",components:{Navbar:y.A},created(){document.title="NEU小站"},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?C.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}`)}}};const L=(0,d.A)(w,[["render",k],["__scopeId","data-v-5a2476b6"]]);var E=L,_=s(4130),A=s.n(_);A().configure({showSpinner:!1});const M=[{path:"/",name:"home",component:E},{path:"/login",name:"login",component:()=>s.e(20).then(s.bind(s,4020))},{path:"/article/:id",name:"article-detail",component:()=>s.e(597).then(s.bind(s,7597))},{path:"/about",name:"about",component:()=>s.e(645).then(s.bind(s,9645))},{path:"/strategy",name:"strategy",component:()=>s.e(181).then(s.bind(s,8181))},{path:"/resources",name:"resources",component:()=>s.e(690).then(s.bind(s,9690))},{path:"/ranking",name:"ranking",component:()=>s.e(152).then(s.bind(s,7152))},{path:"/:pathMatch(.*)*",name:"404",component:()=>s.e(899).then(s.bind(s,3899))},{path:"/search",name:"search",component:()=>s.e(368).then(s.bind(s,7368))},{path:"/user-center",name:"user-center",component:()=>s.e(20).then(s.bind(s,4020))},{path:"/app",name:"app",component:()=>s.e(270).then(s.bind(s,9270))},{path:"/submit",name:"submit",component:()=>s.e(312).then(s.bind(s,312))},{path:"/preview",name:"preview",component:()=>s.e(597).then(s.bind(s,7597))},{path:"/edit",name:"edit-article",component:()=>s.e(312).then(s.bind(s,312))},{path:"/widgets",name:"widgets",component:()=>s.e(155).then(s.bind(s,5155))},{path:"/widgets/webvpn",name:"webvpn",component:()=>s.e(898).then(s.bind(s,898))}],x=(0,g.aE)({history:(0,g.LA)("/"),routes:M});x.beforeEach(((e,t,s)=>{A().start(),s()})),x.afterEach((()=>{A().done()}));var I=x,S=s(2090);const X=(0,a.Ef)(p);X.config.globalProperties.$barMessage=S.A,X.use(I).mount("#app"),window.$barMessage=S.A},4993:function(e,t,s){s.d(t,{A:function(){return b}});var a=s(5130),n=s(6768),o=s(4232);const i={class:"message-box"},r={key:0,class:"message-header"},c={class:"message-content"},l={key:0,class:"input-wrapper"},d=["type","placeholder"],u={class:"message-footer"};function h(e,t,s,h,p,g){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)=>g.handleOverlayClick&&g.handleOverlayClick(...e)),["self"]))},[(0,n.Lk)("div",i,[s.title?((0,n.uX)(),(0,n.CE)("div",r,[(0,n.Lk)("h3",null,(0,o.v_)(s.title),1)])):(0,n.Q3)("",!0),(0,n.Lk)("div",c,[(0,n.Lk)("p",null,(0,o.v_)(s.message),1),s.showInput?((0,n.uX)(),(0,n.CE)("div",l,[(0,n.bo)((0,n.Lk)("input",{"onUpdate:modelValue":t[0]||(t[0]=e=>p.localInputValue=e),type:s.inputType,placeholder:s.inputPlaceholder,class:"message-input",onKeyup:t[1]||(t[1]=(0,a.jR)(((...e)=>g.handleConfirm&&g.handleConfirm(...e)),["enter"]))},null,40,d),[[a.hp,p.localInputValue]])])):(0,n.Q3)("",!0)]),(0,n.Lk)("div",u,[g.cancelVisible?((0,n.uX)(),(0,n.CE)("button",{key:0,class:"btn btn-cancel",onClick:t[2]||(t[2]=(...e)=>g.handleCancel&&g.handleCancel(...e))},(0,o.v_)(s.cancelText),1)):(0,n.Q3)("",!0),g.confirmVisible?((0,n.uX)(),(0,n.CE)("button",{key:1,class:"btn btn-confirm",onClick:t[3]||(t[3]=(...e)=>g.handleConfirm&&g.handleConfirm(...e))},(0,o.v_)(s.confirmText),1)):(0,n.Q3)("",!0)])])])):(0,n.Q3)("",!0)])),_:1})}var p={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")}}},g=s(1241);const m=(0,g.A)(p,[["render",h],["__scopeId","data-v-076938bc"]]);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 b=v},9090:function(e,t,s){s.d(t,{A:function(){return A}});var a=s(5130),n=s(6768),o=s(4232);const i={key:0,class:"login-container"},r={class:"login-box"},c={class:"login-header"},l={class:"form-group"},d={class:"form-group"},u={class:"button-group"},h={class:"modal-content"},p={class:"modal-header"},g={class:"modal-body"},m={class:"captcha-instruction"},f={class:"form-group"},v={class:"modal-footer"},b={key:0,class:"loading-overlay"};function k(e,t,s,k,y,C){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",r,[(0,n.Lk)("div",c,[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)=>C.handleClose&&C.handleClose(...e)),class:"close-btn"},"×")):(0,n.Q3)("",!0)]),(0,n.Lk)("form",{onSubmit:t[4]||(t[4]=(0,a.D$)(((...e)=>C.handleSubmit&&C.handleSubmit(...e)),["prevent"])),class:"login-form"},[(0,n.Lk)("div",l,[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)=>C.login&&C.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",p,[t[11]||(t[11]=(0,n.Lk)("h3",null,"邮箱验证",-1)),(0,n.Lk)("button",{onClick:t[5]||(t[5]=(...e)=>C.closeCaptchaModal&&C.closeCaptchaModal(...e)),class:"close-btn"},"×")]),(0,n.Lk)("div",g,[(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)=>C.verifyCaptcha&&C.verifyCaptcha(...e)),class:"btn btn-primary"},"验证")])])],2),y.loading?((0,n.uX)(),(0,n.CE)("div",b,[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(4993),C={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(){const e=navigator.userAgent;return/android/i.test(e)?"Android":/iPad|iPhone|iPod/.test(e)?"iOS":/Windows Phone/i.test(e)?"Windows Phone":/Windows/i.test(e)?"Windows":/Macintosh|Mac OS X/i.test(e)?"macOS":/Linux/i.test(e)?"Linux":"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=86340; path=/; domain=${s}; secure; SameSite=Strict`,this.loading=!1,this.message="登录成功!正在加载中...",this.messageIsError=!1;const a={email:this.email,userId:e.id,token:e.token};this.onSuccess&&(this.onSuccess(a),window.location.reload()),this.$emit("login-success",a),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)))}}},w=s(1241);const L=(0,w.A)(C,[["render",k],["__scopeId","data-v-66365b1a"]]);var E=L;const _=(e={})=>new Promise(((t,s)=>{const n=document.createElement("div");document.body.appendChild(n);const o=(0,a.Ef)(E,{...e,visible:!0,showClose:!0,onSuccess:e=>{t(e)},onClose:()=>{o.unmount(),document.body.removeChild(n)}});o.mount(n)}));_.withCallback=(e,t={})=>_({...t,onSuccess:t=>{e(t)}});var 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[c])}))?a.splice(c--,1):(r=!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+"."+{12:"dc7bebdb",20:"07132bc6",152:"504c4922",155:"1f667a01",181:"541c8ed4",270:"c1406307",312:"7ab686ca",368:"c54ba54d",597:"3683ba56",645:"6d6207d3",690:"d0237e04",898:"dc83e1e3",899:"831a7510",940:"705f02e8"}[e]+".js"}}(),function(){s.miniCssF=function(e){return"css/"+e+"."+{20:"3061a268",152:"a20def69",155:"e92d57c5",181:"8f61b0cf",270:"e032f250",312:"a2ba332f",368:"9ee9e7c3",597:"eec7e7ed",645:"db1b5e5b",690:"4b505240",898:"6cbcb5bc",899:"35501d47"}[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 r,c;if(void 0!==o)for(var l=document.getElementsByTagName("script"),d=0;d
+
+ 您可以在【个人中心】—【我的投稿记录】处自愿选择是否加入排行榜。
+
@@ -384,13 +387,31 @@ export default {
}
.my-rank-tip {
- font-size: 14px;
- background: rgba(255, 255, 255, 0.2);
- padding: 6px 16px;
- border-radius: 20px;
- backdrop-filter: blur(5px);
+ font-size: 14px;
+ background: rgba(255, 255, 255, 0.2);
+ padding: 6px 16px;
+ border-radius: 20px;
+ backdrop-filter: blur(5px);
+ }
+
+ .my-rank-opt-out-tip {
+ margin-top: 16px;
+ font-size: 13px;
+ color: rgba(255, 255, 255, 0.9);
+ padding-top: 12px;
+ border-top: 1px solid rgba(255, 255, 255, 0.2);
+
+ .link-text {
+ cursor: pointer;
+ font-weight: 600;
+ /* text-decoration: underline; */
+
+ &:hover {
+ color: #fff;
+ }
+ }
+ }
}
-}
/* Top 3 Special Styles */
.rank-gold {