// ==UserScript== // @name DoubanFlix // @namespace http://tampermonkey.net/ // @version 1.0.0 // @description 在豆瓣电影页面获取添加资源链接 // @author Moz // @match https://movie.douban.com/subject/* // @grant none // ==/UserScript== // 注入CSS样式 (function() { const style = document.createElement('style'); style.textContent = `.auth-container[data-v-680e5434]{padding:16px}.user-info[data-v-680e5434]{text-align:center}.user-header[data-v-680e5434]{display:flex;align-items:center;margin-bottom:16px;padding:12px;background:#f8f9fa;border-radius:8px;position:relative}.user-avatar[data-v-680e5434]{width:40px;height:40px;border-radius:50%;background:#007bff;color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:16px;margin-right:12px}.user-details[data-v-680e5434]{flex:1;text-align:left}.user-display-name[data-v-680e5434]{font-size:14px;font-weight:500;color:#333;margin-bottom:2px}.user-email[data-v-680e5434]{font-size:12px;color:#666;margin-bottom:2px}.user-status[data-v-680e5434]{font-size:12px;color:#28a745}.edit-nickname-btn[data-v-680e5434]{position:absolute;top:12px;right:12px;padding:4px 8px;background:#e3f2fd;color:#1976d2;border:1px solid #bbdefb;border-radius:4px;cursor:pointer;font-size:11px;transition:all .2s}.edit-nickname-btn[data-v-680e5434]:hover{background:#bbdefb;color:#0d47a1}.nickname-edit-form[data-v-680e5434]{margin-bottom:16px;padding:12px;background:#fff;border:1px solid #dee2e6;border-radius:6px}.nickname-hint[data-v-680e5434]{font-size:11px;color:#666;margin-top:4px}.nickname-actions[data-v-680e5434]{display:flex;gap:8px;margin-top:12px}.save-nickname-btn[data-v-680e5434]{padding:6px 12px;background:#28a745;color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:12px;transition:background-color .2s}.save-nickname-btn[data-v-680e5434]:hover:not(:disabled){background:#218838}.save-nickname-btn[data-v-680e5434]:disabled{background:#6c757d;cursor:not-allowed}.cancel-nickname-btn[data-v-680e5434]{padding:6px 12px;background:#6c757d;color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:12px;transition:background-color .2s}.cancel-nickname-btn[data-v-680e5434]:hover{background:#5a6268}.sign-out-btn[data-v-680e5434]{width:100%;padding:8px 16px;background:#dc3545;color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:13px;transition:background-color .2s}.sign-out-btn[data-v-680e5434]:hover{background:#c82333}.auth-forms[data-v-680e5434]{width:100%}.auth-tabs[data-v-680e5434]{display:flex;margin-bottom:16px;background:#e9ecef;border-radius:6px;padding:2px}.auth-tab[data-v-680e5434]{flex:1;padding:8px 12px;border:none;background:transparent;color:#666;font-size:13px;border-radius:4px;cursor:pointer;transition:all .2s}.auth-tab[data-v-680e5434]:hover{background:#dee2e6}.auth-tab.active[data-v-680e5434]{background:#007bff;color:#fff;font-weight:500}.auth-form[data-v-680e5434]{display:flex;flex-direction:column;gap:12px}.form-group[data-v-680e5434]{display:flex;flex-direction:column}.form-group label[data-v-680e5434]{font-size:12px;color:#333;margin-bottom:4px;font-weight:500}.form-input[data-v-680e5434]{padding:8px 12px;border:1px solid #ddd;border-radius:4px;font-size:13px;transition:border-color .2s}.form-input[data-v-680e5434]:focus{outline:none;border-color:#007bff;box-shadow:0 0 0 2px #007bff40}.auth-submit-btn[data-v-680e5434]{padding:10px 16px;background:#007bff;color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:13px;font-weight:500;transition:background-color .2s;margin-top:8px}.auth-submit-btn[data-v-680e5434]:hover:not(:disabled){background:#0056b3}.auth-submit-btn[data-v-680e5434]:disabled{background:#6c757d;cursor:not-allowed}.forgot-password-link[data-v-680e5434]{text-align:center;margin-top:15px}.link-btn[data-v-680e5434]{background:none;border:none;color:#007bff;cursor:pointer;text-decoration:underline;font-size:14px;padding:0}.link-btn[data-v-680e5434]:hover{color:#0056b3}.link-btn[data-v-680e5434]:disabled{color:#6c757d;cursor:not-allowed;text-decoration:none}.back-button[data-v-680e5434]{margin-bottom:20px}.back-btn[data-v-680e5434]{background:none;border:none;color:#6c757d;cursor:pointer;font-size:14px;padding:8px 0;display:flex;align-items:center;gap:5px}.back-btn[data-v-680e5434]:hover{color:#495057}.form-title[data-v-680e5434]{font-size:24px;font-weight:700;text-align:center;margin-bottom:10px;color:#333}.form-description[data-v-680e5434]{font-size:14px;color:#6c757d;text-align:center;margin-bottom:25px;line-height:1.5}.proof-progress[data-v-680e5434]{margin:20px 0}.progress-text[data-v-680e5434]{font-size:14px;color:#6c757d;text-align:center;margin-bottom:10px}.progress-bar[data-v-680e5434]{width:100%;height:8px;background-color:#e9ecef;border-radius:4px;overflow:hidden}.progress-fill[data-v-680e5434]{height:100%;background:linear-gradient(90deg,#007bff,#0056b3);transition:width .3s ease;border-radius:4px}.resend-code[data-v-680e5434]{text-align:center;margin-top:15px}.error-message[data-v-680e5434]{padding:8px 12px;background:#f8d7da;color:#721c24;border:1px solid #f5c6cb;border-radius:4px;font-size:12px;margin-top:12px}.success-message[data-v-680e5434]{padding:8px 12px;background:#d4edda;color:#155724;border:1px solid #c3e6cb;border-radius:4px;font-size:12px;margin-top:12px}.custom-select[data-v-411df2ed]{position:relative;width:100%;font-size:14px}.select-trigger[data-v-411df2ed]{display:flex;align-items:center;justify-content:space-between;padding:4px 8px;border:1px solid #ddd;border-radius:6px;background-color:#fff;cursor:pointer;transition:all .2s ease;color:#333}.select-trigger[data-v-411df2ed]:hover{border-color:#007bff;box-shadow:0 0 0 2px #007bff1a}.select-trigger[data-v-411df2ed]:focus{outline:none;border-color:#007bff;box-shadow:0 0 0 2px #007bff40}.selected-text[data-v-411df2ed]{flex:1;text-align:left;color:#333}.arrow[data-v-411df2ed]{width:16px!important;height:16px!important;transition:transform .2s ease;color:#666!important;background:none!important;background-image:none!important;border:none!important;transform-origin:center!important;display:inline-block!important}.arrow-up[data-v-411df2ed]{transform:rotate(180deg);padding-left:0}.select-dropdown[data-v-411df2ed]{position:absolute;top:110%;left:0;width:200px;background:#fff;border:1px solid #ddd;border-top:none;border-radius:4px;box-shadow:0 4px 6px #0000001a;z-index:1000;max-height:200px;overflow-y:auto}.select-option[data-v-411df2ed]{padding:4px 12px;cursor:pointer;transition:all .2s ease;color:#666;background-color:#fff;border-radius:6px;margin:2px}.select-option[data-v-411df2ed]:hover{background-color:#f5f5f5!important;color:#333!important}.select-option.selected[data-v-411df2ed]{background-color:#e3f2fd;color:#1976d2;font-weight:500}.select-option.selected[data-v-411df2ed]:hover{background-color:#bbdefb!important;color:#1565c0!important}@media (prefers-color-scheme: dark){.select-trigger[data-v-411df2ed]{background-color:#2d3748;border-color:#4a5568;color:#e2e8f0}.select-trigger[data-v-411df2ed]:hover{border-color:#63b3ed;box-shadow:0 0 0 2px #63b3ed1a}.selected-text[data-v-411df2ed]{color:#e2e8f0}.arrow[data-v-411df2ed]{color:#a0aec0}.select-dropdown[data-v-411df2ed]{border-radius:4px;background-color:#2d3748;border-color:#4a5568}.select-option[data-v-411df2ed]{color:#a0a0a0;background-color:#2d3748}.select-option[data-v-411df2ed]:hover{background-color:#718096!important;color:#f7fafc!important}.select-option.selected[data-v-411df2ed]{background-color:#2b6cb0;color:#90cdf4}.select-option.selected[data-v-411df2ed]:hover{background-color:#2c5282!important;color:#bee3f8!important}}.loading-container[data-v-da15572b]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:30px 20px;text-align:center}.spinner[data-v-da15572b]{width:32px;height:32px;border:3px solid #e0e0e0;border-top:3px solid #00a1d6;border-radius:50%;animation:spin-da15572b 1s linear infinite;margin-bottom:12px}.loading-text[data-v-da15572b]{color:#666;font-size:14px;font-weight:500}.loading-container.small .spinner[data-v-da15572b]{width:20px;height:20px;border-width:2px;margin-bottom:8px}.loading-container.small .loading-text[data-v-da15572b]{font-size:12px}.loading-container.large .spinner[data-v-da15572b]{width:48px;height:48px;border-width:4px;margin-bottom:16px}.loading-container.large .loading-text[data-v-da15572b]{font-size:16px}@keyframes spin-da15572b{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (max-width: 480px){.loading-container[data-v-da15572b]{padding:20px 15px}.spinner[data-v-da15572b]{width:28px;height:28px;border-width:2px}.loading-text[data-v-da15572b]{font-size:13px}}.link-item.skeleton[data-v-115afd35]{background:#f8f9fa;border:1px solid #e9ecef;border-radius:8px;padding:16px;margin-bottom:12px}.skeleton-element[data-v-115afd35]{background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0,#f0f0f0 75%);background-size:200% 100%;animation:skeleton-loading-115afd35 1.5s infinite;border-radius:4px}@keyframes skeleton-loading-115afd35{0%{background-position:200% 0}to{background-position:-200% 0}}.link-header[data-v-115afd35]{display:flex;align-items:center;gap:12px;margin-bottom:12px}.platform-badge[data-v-115afd35]{display:flex;align-items:center;gap:6px}.skeleton-icon[data-v-115afd35]{width:20px;height:20px;border-radius:50%}.link-meta[data-v-115afd35]{display:flex;flex-direction:column;gap:6px}.skeleton-language[data-v-115afd35]{width:40px;height:16px}.feature-tags[data-v-115afd35]{display:flex;gap:6px}.skeleton-tag[data-v-115afd35]{width:30px;height:14px}.link-title-row[data-v-115afd35]{display:flex;align-items:center;justify-content:space-between}.skeleton-title[data-v-115afd35]{width:70%;height:20px}.skeleton-arrow[data-v-115afd35]{width:16px;height:16px;border-radius:2px}.ios-checkbox[data-v-77ac6b2a]{--checkbox-size: 28px;--checkbox-color: #3b82f6;--checkbox-bg: #dbeafe;--checkbox-border: #93c5fd;position:relative;display:inline-flex;align-items:center;justify-content:flex-start;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;vertical-align:middle}.ios-checkbox input[data-v-77ac6b2a]{display:none}.checkbox-wrapper[data-v-77ac6b2a]{position:relative;width:var(--checkbox-size);height:var(--checkbox-size);border-radius:8px;flex-shrink:0;display:flex;align-items:center;justify-content:center;transition:all .2s ease}.checkbox-bg[data-v-77ac6b2a]{position:absolute;top:0;left:0;right:0;bottom:0;border-radius:8px;border:2px solid var(--checkbox-border);background:#fff;transition:all .2s ease}.checkbox-icon[data-v-77ac6b2a]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) scale(0);width:16px;height:16px;color:#fff;transition:all .2s ease}.check-path[data-v-77ac6b2a]{stroke-dasharray:40;stroke-dashoffset:40;transition:stroke-dashoffset .3s ease .1s}.checkbox-label[data-v-77ac6b2a]{font-size:14px;color:#374151;font-weight:500;line-height:28px;height:28px;display:flex;align-items:center}.ios-checkbox input:checked+.checkbox-wrapper .checkbox-bg[data-v-77ac6b2a]{background:var(--checkbox-color);border-color:var(--checkbox-color)}.ios-checkbox input:checked+.checkbox-wrapper .checkbox-icon[data-v-77ac6b2a]{transform:translate(-50%,-50%) scale(1)}.ios-checkbox input:checked+.checkbox-wrapper .check-path[data-v-77ac6b2a]{stroke-dashoffset:0}.ios-checkbox:hover .checkbox-wrapper[data-v-77ac6b2a]{transform:scale(1.05)}.ios-checkbox:active .checkbox-wrapper[data-v-77ac6b2a]{transform:scale(.95)}.ios-checkbox input:focus+.checkbox-wrapper .checkbox-bg[data-v-77ac6b2a]{box-shadow:0 0 0 4px var(--checkbox-bg)}.ios-checkbox.blue[data-v-77ac6b2a]{--checkbox-color: #3b82f6;--checkbox-bg: #dbeafe;--checkbox-border: #93c5fd}.ios-checkbox.green[data-v-77ac6b2a]{--checkbox-color: #10b981;--checkbox-bg: #d1fae5;--checkbox-border: #6ee7b7}.ios-checkbox.purple[data-v-77ac6b2a]{--checkbox-color: #8b5cf6;--checkbox-bg: #ede9fe;--checkbox-border: #c4b5fd}.ios-checkbox.red[data-v-77ac6b2a]{--checkbox-color: #ef4444;--checkbox-bg: #fee2e2;--checkbox-border: #fca5a5}@keyframes bounce-77ac6b2a{0%,to{transform:scale(1)}50%{transform:scale(1.1)}}.ios-checkbox input:checked+.checkbox-wrapper[data-v-77ac6b2a]{animation:bounce-77ac6b2a .3s cubic-bezier(.4,0,.2,1)}.link-manager[data-v-adb0c426]{max-width:1000px;margin:0 auto}.link-stats[data-v-adb0c426]{display:flex;gap:20px;margin-bottom:20px;padding:15px;background:#f5f5f5;border-radius:8px}.stat-item[data-v-adb0c426]{display:flex;flex-direction:column;align-items:center}.stat-label[data-v-adb0c426]{font-size:12px;color:#666;margin-bottom:4px}.stat-value[data-v-adb0c426]{font-size:18px;font-weight:700;color:#333}.add-link-section[data-v-adb0c426]{margin-bottom:20px;display:flex;align-items:center;gap:10px}.add-link-btn[data-v-adb0c426]{padding:10px 20px;background:#007bff;color:#fff;border:none;border-radius:6px;cursor:pointer;font-size:14px}.add-link-btn[data-v-adb0c426]:hover:not(:disabled){background:#0056b3}.add-link-btn[data-v-adb0c426]:disabled{background:#ccc;cursor:not-allowed}.auth-hint[data-v-adb0c426]{color:#666;font-size:12px}.add-form[data-v-adb0c426]{background:#f9f9f9;padding:20px;border-radius:8px;margin-bottom:20px}.add-form h4[data-v-adb0c426]{margin:0 0 15px;color:#333}.form-row[data-v-adb0c426]{display:flex;gap:15px;margin-bottom:15px}.form-group[data-v-adb0c426]{flex:1}.form-group label[data-v-adb0c426]{margin-bottom:5px;font-weight:700;color:#333;font-size:13px}.checkbox-group[data-v-adb0c426]{display:flex;flex-wrap:wrap;gap:15px}.form-group input[data-v-adb0c426],.form-group select[data-v-adb0c426]{width:100%;padding:8px 12px;border:1px solid #ddd;border-radius:4px;font-size:14px}.form-group select[data-v-adb0c426]:focus{outline:none;border-color:#007bff;box-shadow:0 0 0 2px #007bff40}.input-wrapper[data-v-adb0c426]{border:1px solid #ddd;border-radius:6px}.input-wrapper input[data-v-adb0c426]{width:100%;border:none;outline:none;font-size:14px;background:transparent}.input-wrapper[data-v-adb0c426]:focus-within{border-color:#007bff;box-shadow:0 0 0 2px #007bff40}.form-actions[data-v-adb0c426]{display:flex;gap:10px;margin-top:20px}.form-actions button[data-v-adb0c426]{padding:10px 20px;border:none;border-radius:4px;cursor:pointer;font-size:14px}.form-actions button[type=submit][data-v-adb0c426]{background:#28a745;color:#fff}.form-actions button[type=submit][data-v-adb0c426]:hover:not(:disabled){background:#218838}.form-actions button[type=button][data-v-adb0c426]{background:#6c757d;color:#fff}.form-actions button[type=button][data-v-adb0c426]:hover{background:#545b62}.filter-bar[data-v-adb0c426]{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:20px;border-radius:6px}.filter-controls[data-v-adb0c426]{display:flex;gap:10px}.filter-bar .custom-select[data-v-adb0c426]{width:auto;min-width:100px}.add-link-btn-compact[data-v-adb0c426]{width:32px;height:32px;background:#e6f3ff;color:#007bff;border:none;border-radius:4px;cursor:pointer;font-size:18px;font-weight:700;display:flex;align-items:center;justify-content:center;transition:all .2s ease;flex-shrink:0;line-height:1;padding:0}.add-link-btn-compact[data-v-adb0c426]:hover:not(:disabled){background:#b1cfef;transform:scale(1)}.add-link-btn-compact[data-v-adb0c426]:disabled{background:#ccc;cursor:not-allowed;transform:none}.filter-bar select[data-v-adb0c426]{padding:6px 10px;border:1px solid #ddd;border-radius:4px;font-size:13px}.links-list[data-v-adb0c426]{display:flex;flex-direction:column;gap:15px}.link-item[data-v-adb0c426]{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:8px;padding:15px;box-shadow:0 2px 4px #0000001a;transition:box-shadow .3s ease}.link-item[data-v-adb0c426]:hover{box-shadow:0 4px 8px #00000026}.link-header[data-v-adb0c426]{display:flex;align-items:center;gap:10px;margin-bottom:10px}.link-type-badge[data-v-adb0c426]{padding:4px 8px;border-radius:4px;font-size:12px;font-weight:700;color:#fff}.link-type-badge.netdisk[data-v-adb0c426]{background:#28a745}.link-type-badge.bt[data-v-adb0c426]{background:#dc3545}.link-type-badge.online[data-v-adb0c426]{background:#007bff}.platform-badge[data-v-adb0c426]{padding:4px;background:#fff;color:#fff;border-radius:4px;font-size:12px;display:flex;align-items:center;justify-content:center;border:1px solid #e9ecef}.platform-icon[data-v-adb0c426]{width:16px;height:16px;object-fit:contain}.link-meta[data-v-adb0c426]{display:flex;gap:10px;margin-left:auto;align-items:center}.link-meta span[data-v-adb0c426]{padding:2px 6px;background:#f8f9fa;border-radius:3px;font-size:11px;color:#666}.feature-tags[data-v-adb0c426]{display:flex;gap:4px;flex-wrap:wrap}.feature-tag[data-v-adb0c426]{padding:2px 6px;background:#007bff;color:#fff;border-radius:3px;font-size:10px;font-weight:700}.feature-tag[data-v-adb0c426]:nth-child(1){background:#28a745}.feature-tag[data-v-adb0c426]:nth-child(2){background:#fd7e14}.feature-tag[data-v-adb0c426]:nth-child(3){background:#6f42c1}.feature-tag[data-v-adb0c426]:nth-child(4){background:#20c997}.link-content[data-v-adb0c426]{margin-bottom:15px}.link-title-row[data-v-adb0c426]{display:flex;align-items:center;justify-content:space-between;cursor:pointer;padding:5px 0;margin-bottom:8px;border-radius:4px;transition:background-color .2s ease}.link-title-row[data-v-adb0c426]:hover{background-color:#f8f9fa}.link-title[data-v-adb0c426]{font-weight:700;color:#333;flex:1;white-space:nowrap;overflow:hidden;position:relative;padding-right:20px;min-width:0}.link-title.expanded[data-v-adb0c426]{white-space:normal;overflow:hidden;padding-right:10px;word-wrap:break-word;word-break:break-word}.link-title[data-v-adb0c426]:after{content:"";position:absolute;top:0;right:0;width:20px;height:100%;background:linear-gradient(to right,transparent,white);pointer-events:none;transition:opacity .3s ease}.link-title.expanded[data-v-adb0c426]:after{opacity:0}.expand-arrow[data-v-adb0c426]{display:flex;align-items:center;justify-content:center;width:24px;height:24px;color:#666;transition:transform .3s ease,color .2s ease}.expand-arrow[data-v-adb0c426]:hover{color:#333}.expand-arrow.expanded[data-v-adb0c426]{transform:rotate(180deg)}.link-details[data-v-adb0c426]{margin-top:10px;animation:slideDown-adb0c426 .3s ease forwards}@keyframes slideDown-adb0c426{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.link-url[data-v-adb0c426]{display:flex;align-items:center;gap:8px;margin-bottom:5px}.link-url a[data-v-adb0c426]{color:#007bff;text-decoration:none;flex:1;word-break:break-all}.link-url a[data-v-adb0c426]:hover{text-decoration:underline;background-color:transparent}.extract-code[data-v-adb0c426]{display:flex;align-items:center;gap:8px;font-size:14px;margin-bottom:5px}.extract-code code[data-v-adb0c426]{background:#f8f9fa;padding:2px 6px;border-radius:3px;font-family:monospace;color:#e83e8c}.copy-btn[data-v-adb0c426]{background:none;border:none;cursor:pointer;font-size:14px;padding:2px 4px;border-radius:3px}.copy-btn[data-v-adb0c426]:hover{background:#f8f9fa}.link-actions[data-v-adb0c426]{display:flex;justify-content:space-between;align-items:center;margin-top:10px;margin-bottom:10px}.vote-section[data-v-adb0c426]{display:flex;align-items:center;gap:10px}.vote-btn[data-v-adb0c426]{background:#f8f9fa;border:1px solid #dee2e6;padding:5px 10px;border-radius:4px;cursor:pointer;font-size:12px;display:flex;align-items:center;gap:4px}.vote-btn[data-v-adb0c426]:hover:not(:disabled){background:#e9ecef}.vote-btn[data-v-adb0c426]:disabled{opacity:.6;cursor:not-allowed}.vote-btn.active.up[data-v-adb0c426]{background:#d4edda;border-color:#c3e6cb;color:#155724}.vote-btn.active.down[data-v-adb0c426]{background:#f8d7da;border-color:#f5c6cb;color:#721c24}.score[data-v-adb0c426]{font-weight:700;color:#333;font-size:13px}.action-buttons[data-v-adb0c426]{display:flex;gap:8px}.action-buttons button[data-v-adb0c426]{padding:4px 8px;border:none;border-radius:3px;cursor:pointer;font-size:12px}.edit-btn[data-v-adb0c426]{background:#ffc107;color:#212529}.edit-btn[data-v-adb0c426]:hover{background:#e0a800}.delete-btn[data-v-adb0c426]{background:#dc3545;color:#fff}.delete-btn[data-v-adb0c426]:hover{background:#c82333}.report-btn[data-v-adb0c426]{width:48px;height:28px;background:#eee;color:#495057}.report-btn[data-v-adb0c426]:hover{color:#495057;background:#e3e3e3}.link-footer[data-v-adb0c426]{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:#666;border-top:1px solid #f0f0f0;padding-top:10px}.report-count[data-v-adb0c426]{color:#dc3545;font-weight:700}.empty-state[data-v-adb0c426]{text-align:center;padding:40px;color:#666}.loading[data-v-adb0c426]{text-align:center;padding:20px;color:#666}.toast-container[data-v-adb0c426]{position:fixed;top:20px;left:50%;transform:translate(-50%);z-index:10000;pointer-events:none}.toast[data-v-adb0c426]{background:#fff;border-radius:8px;padding:12px 16px;margin-bottom:10px;box-shadow:0 4px 12px #00000026;display:flex;align-items:center;justify-content:space-between;min-width:300px;max-width:500px;pointer-events:auto;cursor:pointer;animation:slideDown-adb0c426 .3s ease-out;transition:all .3s ease}.toast[data-v-adb0c426]:hover{transform:translateY(-2px);box-shadow:0 6px 16px #0003}.error-toast[data-v-adb0c426]{background:#fff5f5}.error-toast span[data-v-adb0c426]{color:#721c24}.success-toast[data-v-adb0c426]{background:#f0fff4}.success-toast span[data-v-adb0c426]{color:#155724}.toast-close[data-v-adb0c426]{background:none;border:none;font-size:18px;font-weight:700;color:#999;cursor:pointer;margin-left:12px;padding:0;line-height:1}.toast-close[data-v-adb0c426]:hover{color:#666}@keyframes slideDown-adb0c426{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}.error-message[data-v-adb0c426]{background:#f8d7da;color:#721c24;padding:10px 15px;border-radius:4px;margin:10px 0;border:1px solid #f5c6cb}.success-message[data-v-adb0c426]{background:#d4edda;color:#155724;padding:10px 15px;border-radius:4px;margin:10px 0;border:1px solid #c3e6cb}@media (max-width: 768px){.link-manager[data-v-adb0c426]{padding:10px}.form-row[data-v-adb0c426]{flex-direction:column;gap:10px}.filter-bar[data-v-adb0c426]{flex-direction:column;gap:8px}.link-header[data-v-adb0c426]{flex-wrap:wrap}.link-meta[data-v-adb0c426]{margin-left:0;margin-top:5px}.link-actions[data-v-adb0c426]{flex-direction:column;gap:10px;align-items:flex-start}}.modal-overlay[data-v-adb0c426]{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;display:flex;justify-content:center;align-items:center;z-index:1000}.modal-content[data-v-adb0c426]{background:#fff;border-radius:8px;width:90%;max-width:600px;max-height:90vh;box-shadow:0 4px 20px #00000026}.modal-header[data-v-adb0c426]{display:flex;justify-content:space-between;align-items:center;padding:20px 20px 0;border-bottom:1px solid #eee;margin-bottom:20px}.modal-header h4[data-v-adb0c426]{margin:0;color:#333;font-size:18px}.close-btn[data-v-adb0c426]{background:none;border:none;font-size:24px;cursor:pointer;color:#999;padding:0;width:30px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:50%}.close-btn[data-v-adb0c426]:hover{background:#f5f5f5;color:#333}.modal-body[data-v-adb0c426]{padding:0 20px 20px}.vote-section[data-v-adb0c426]{width:100%}.input-wrapper textarea[data-v-adb0c426]{width:100%;border:none;outline:none;font-size:14px;font-family:inherit;resize:vertical;min-height:80px;background:transparent}.input-wrapper[data-v-adb0c426]:has(textarea):focus-within{border-color:#007bff;box-shadow:0 0 0 2px #007bff40}.input-wrapper textarea[data-v-adb0c426]::placeholder{color:#999}.form-actions button[data-v-adb0c426]:disabled{background:#ccc;cursor:not-allowed}.form-actions button[data-v-adb0c426]:disabled:hover{background:#ccc}.pagination[data-v-adb0c426]{display:flex;justify-content:center;align-items:center;gap:15px;margin-top:10px;padding:10px;background:#f8f9fa;border-radius:8px}.pagination-btn[data-v-adb0c426]{padding:8px 16px;border:1px solid #ddd;background:#fff;color:#333;border-radius:4px;cursor:pointer;font-size:14px;transition:all .2s}.pagination-btn[data-v-adb0c426]:hover:not(:disabled){background:#b3d8ff;color:#007bff;border-color:#b3d8ff}.pagination-btn[data-v-adb0c426]:disabled{background:#f5f5f5;color:#999;cursor:not-allowed;border-color:#ddd}.pagination-info[data-v-adb0c426]{font-size:14px;color:#666;font-weight:500}.content-wrapper[data-v-2fb0e09c]{padding:16px}.movie-info[data-v-2fb0e09c]{margin-bottom:16px;padding:12px;background:#f8f9fa;border-radius:6px;border-left:4px solid #00a1d6}.movie-title[data-v-2fb0e09c]{margin:0 0 8px;font-size:16px;font-weight:600;color:#333;line-height:1.3}.movie-meta[data-v-2fb0e09c]{display:flex;gap:12px;align-items:center}.movie-meta .year[data-v-2fb0e09c]{background:#6c757d;color:#fff;padding:2px 6px;border-radius:3px;font-size:12px;font-weight:500}.movie-meta .rating[data-v-2fb0e09c]{color:#ff6b35;font-weight:600;font-size:13px}.navigation-bar[data-v-2fb0e09c]{display:flex;border-bottom:1px solid #e0e0e0;margin-bottom:16px}.nav-btn[data-v-2fb0e09c]{flex:1;padding:12px 16px;border:none;background:none;cursor:pointer;font-size:14px;font-weight:500;color:#666;transition:all .2s;border-bottom:2px solid transparent}.nav-btn[data-v-2fb0e09c]:hover{background-color:#f5f5f5;color:#333}.nav-btn.active[data-v-2fb0e09c]{color:#00a1d6;border-bottom-color:#00a1d6;background-color:#f8fbff}.tab-content[data-v-2fb0e09c]{min-height:200px}.tab-panel[data-v-2fb0e09c]{padding-top:16px 0}.tab-panel h4[data-v-2fb0e09c]{margin:0 0 12px;color:#333;font-size:16px;font-weight:600}.tab-panel p[data-v-2fb0e09c]{margin:0;color:#666;line-height:1.5}.sub-nav[data-v-2fb0e09c]{display:flex;gap:4px;margin-bottom:12px;padding:4px;background:#e9ecef;border-radius:6px}.sub-tab[data-v-2fb0e09c]{flex:1;padding:6px 8px;border:none;background:transparent;color:#666;font-size:12px;border-radius:4px;cursor:pointer;transition:all .2s;text-align:center}.sub-tab[data-v-2fb0e09c]:hover{background:#dee2e6;color:#495057}.sub-tab.active[data-v-2fb0e09c]{background:#007bff;color:#fff;font-weight:500}.sub-content[data-v-2fb0e09c]{margin-top:8px}.sub-tab-content[data-v-2fb0e09c]{padding:8px 0}.sub-tab-content p[data-v-2fb0e09c]{margin:4px 0;color:#666;font-size:12px}.no-subject[data-v-2fb0e09c]{text-align:center;padding:40px 20px;color:#666}.no-subject p[data-v-2fb0e09c]{margin:8px 0;line-height:1.5}.no-subject .hint[data-v-2fb0e09c]{font-size:12px;color:#999;font-style:italic}.debug-panel[data-v-7f68f54d]{position:fixed;top:20px;right:20px;width:400px;max-height:80vh;background:#fff;border:2px solid #007bff;border-radius:8px;box-shadow:0 4px 20px #0000004d;z-index:10000;font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;overflow-y:auto}.debug-header[data-v-7f68f54d]{background:#007bff;color:#fff;padding:10px 15px;display:flex;justify-content:space-between;align-items:center}.debug-header h3[data-v-7f68f54d]{margin:0;font-size:16px}.close-btn[data-v-7f68f54d]{background:none;border:none;color:#fff;font-size:20px;cursor:pointer;padding:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center}.debug-content[data-v-7f68f54d]{padding:15px}.debug-section[data-v-7f68f54d]{margin-bottom:20px;padding-bottom:15px;border-bottom:1px solid #eee}.debug-section[data-v-7f68f54d]:last-child{border-bottom:none;margin-bottom:0}.debug-section h4[data-v-7f68f54d]{margin:0 0 10px;color:#333;font-size:14px}.debug-section h5[data-v-7f68f54d]{margin:10px 0 5px;color:#666;font-size:12px}.status-item[data-v-7f68f54d]{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;font-size:12px}.label[data-v-7f68f54d]{font-weight:700;color:#555}.value[data-v-7f68f54d]{color:#333;max-width:200px;word-break:break-all}.token[data-v-7f68f54d]{font-family:monospace;font-size:10px}.status[data-v-7f68f54d]{padding:2px 6px;border-radius:3px;font-size:11px;font-weight:700}.status.success[data-v-7f68f54d]{background:#d4edda;color:#155724}.status.error[data-v-7f68f54d]{background:#f8d7da;color:#721c24}.button-group[data-v-7f68f54d]{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px}.debug-btn[data-v-7f68f54d]{padding:6px 12px;border:1px solid #007bff;background:#fff;color:#007bff;border-radius:4px;cursor:pointer;font-size:11px;transition:all .2s}.debug-btn[data-v-7f68f54d]:hover{background:#007bff;color:#fff}.debug-btn.danger[data-v-7f68f54d]{border-color:#dc3545;color:#dc3545}.debug-btn.danger[data-v-7f68f54d]:hover{background:#dc3545;color:#fff}.test-result[data-v-7f68f54d]{background:#f8f9fa;border:1px solid #dee2e6;border-radius:4px;padding:10px;margin-top:10px}.test-result pre[data-v-7f68f54d]{margin:0;font-size:10px;white-space:pre-wrap;word-break:break-word}.headers-preview[data-v-7f68f54d]{background:#f8f9fa;border:1px solid #dee2e6;border-radius:4px;padding:10px}.headers-preview code[data-v-7f68f54d]{font-size:10px;white-space:pre-wrap;word-break:break-word}.debug-toggle[data-v-7f68f54d]{position:fixed;top:20px;right:20px;width:40px;height:40px;background:#007bff;color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:18px;z-index:9999;box-shadow:0 2px 10px #0000004d;transition:all .2s}.debug-toggle[data-v-7f68f54d]:hover{background:#0056b3;transform:scale(1.1)}.custom-window[data-v-0af292b5]{position:relative;width:100%;max-width:350px;min-height:200px;background:#fff;border:1px solid #ddd;border-radius:8px;box-shadow:0 2px 12px #0000000d;margin-bottom:15px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.window-header[data-v-0af292b5]{color:#545454;border-top:1px solid #ddd;padding:6px 12px;border-radius:0 0 8px 8px;display:flex;justify-content:space-between;align-items:center;-webkit-user-select:none;user-select:none}.window-title[data-v-0af292b5]{font-weight:300;font-size:12px}.close-btn[data-v-0af292b5]{background:none;border:none;color:#fff;font-size:16px;cursor:pointer;padding:0;width:20px;height:20px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:background-color .2s}.close-btn[data-v-0af292b5]:hover{background-color:#fff3}.window-content[data-v-0af292b5]{padding:0}#douban-trigger-btn:hover{background:#005a1a!important;transform:translateY(-1px);box-shadow:0 2px 8px #00772280}#douban-custom-window{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}#douban-custom-window ::-webkit-scrollbar{width:6px}#douban-custom-window ::-webkit-scrollbar-track{background:#f1f1f1;border-radius:3px}#douban-custom-window ::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}#douban-custom-window ::-webkit-scrollbar-thumb:hover{background:#a8a8a8}@keyframes fadeIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}@keyframes slideIn{0%{transform:translateY(-20px);opacity:0}to{transform:translateY(0);opacity:1}}.custom-window{animation:fadeIn .3s ease-out}.window-content>*{animation:slideIn .4s ease-out}@media (max-width: 480px){.custom-window{width:90vw!important;left:5vw!important}.stats-grid{grid-template-columns:1fr!important}.action-section{flex-direction:column}.action-btn{width:100%}}@media (prefers-color-scheme: dark){.custom-window{background:#2d3748;border-color:#4a5568;color:#e2e8f0}.window-content h3,.window-content h4{color:#e2e8f0}.window-content p{color:#cbd5e0}.feature-section li,.info-section{background:#4a5568;color:#cbd5e0}.info-item strong{color:#e2e8f0}}select option{color:#666;background-color:#fff;padding:8px 12px;border-radius:6px;margin:2px 0;transition:background-color .2s ease}select option:hover{background-color:#f5f5f5}select{border-radius:6px;padding:8px 12px}@media (prefers-color-scheme: dark){select option{color:#a0a0a0;background-color:#2d3748}select option:hover{background-color:#718096;color:#f7fafc}} `; document.head.appendChild(style); })(); (function(){"use strict";(function(){"use strict";/** * @vue/shared v3.5.18 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT **//*! #__NO_SIDE_EFFECTS__ */function Bs(e){const t=Object.create(null);for(const s of e.split(","))t[s]=1;return s=>s in t}const Z={},St=[],je=()=>{},go=()=>!1,us=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),js=e=>e.startsWith("onUpdate:"),_e=Object.assign,Hs=(e,t)=>{const s=e.indexOf(t);s>-1&&e.splice(s,1)},mo=Object.prototype.hasOwnProperty,G=(e,t)=>mo.call(e,t),L=Array.isArray,Tt=e=>cs(e)==="[object Map]",Pr=e=>cs(e)==="[object Set]",R=e=>typeof e=="function",ue=e=>typeof e=="string",lt=e=>typeof e=="symbol",ne=e=>e!==null&&typeof e=="object",Ir=e=>(ne(e)||R(e))&&R(e.then)&&R(e.catch),Or=Object.prototype.toString,cs=e=>Or.call(e),_o=e=>cs(e).slice(8,-1),Dr=e=>cs(e)==="[object Object]",qs=e=>ue(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Ft=Bs(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),fs=e=>{const t=Object.create(null);return s=>t[s]||(t[s]=e(s))},bo=/-(\w)/g,it=fs(e=>e.replace(bo,(t,s)=>s?s.toUpperCase():"")),yo=/\B([A-Z])/g,mt=fs(e=>e.replace(yo,"-$1").toLowerCase()),Mr=fs(e=>e.charAt(0).toUpperCase()+e.slice(1)),Ws=fs(e=>e?`on${Mr(e)}`:""),at=(e,t)=>!Object.is(e,t),ds=(e,...t)=>{for(let s=0;s{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:s})},Gs=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Vr;const ps=()=>Vr||(Vr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Nt(e){if(L(e)){const t={};for(let s=0;s{if(s){const r=s.split(xo);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function ce(e){let t="";if(ue(e))t=e;else if(L(e))for(let s=0;s!!(e&&e.__v_isRef===!0),N=e=>ue(e)?e:e==null?"":L(e)||ne(e)&&(e.toString===Or||!R(e.toString))?Ur(e)?N(e.value):JSON.stringify(e,Rr,2):String(e),Rr=(e,t)=>Ur(t)?Rr(e,t.value):Tt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((s,[r,n],o)=>(s[zs(r,o)+" =>"]=n,s),{})}:Pr(t)?{[`Set(${t.size})`]:[...t.values()].map(s=>zs(s))}:lt(t)?zs(t):ne(t)&&!L(t)&&!Dr(t)?String(t):t,zs=(e,t="")=>{var s;return lt(e)?`Symbol(${(s=e.description)!=null?s:t})`:e};/** * @vue/reactivity v3.5.18 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT **/let Se;class To{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=Se,!t&&Se&&(this.index=(Se.scopes||(Se.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,s;if(this.scopes)for(t=0,s=this.scopes.length;t0&&--this._on===0&&(Se=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let s,r;for(s=0,r=this.effects.length;s0)return;if(jt){let t=jt;for(jt=void 0;t;){const s=t.next;t.next=void 0,t.flags&=-9,t=s}}let e;for(;Bt;){let t=Bt;for(Bt=void 0;t;){const s=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(r){e||(e=r)}t=s}}if(e)throw e}function jr(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Hr(e){let t,s=e.depsTail,r=s;for(;r;){const n=r.prevDep;r.version===-1?(r===s&&(s=n),Zs(r),$o(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=n}e.deps=t,e.depsTail=s}function Xs(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(qr(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function qr(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Ht)||(e.globalVersion=Ht,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Xs(e))))return;e.flags|=2;const t=e.dep,s=ee,r=Fe;ee=e,Fe=!0;try{jr(e);const n=e.fn(e._value);(t.version===0||at(n,e._value))&&(e.flags|=128,e._value=n,t.version++)}catch(n){throw t.version++,n}finally{ee=s,Fe=r,Hr(e),e.flags&=-3}}function Zs(e,t=!1){const{dep:s,prevSub:r,nextSub:n}=e;if(r&&(r.nextSub=n,e.prevSub=void 0),n&&(n.prevSub=r,e.nextSub=void 0),s.subs===e&&(s.subs=r,!r&&s.computed)){s.computed.flags&=-5;for(let o=s.computed.deps;o;o=o.nextDep)Zs(o,!0)}!t&&!--s.sc&&s.map&&s.map.delete(s.key)}function $o(e){const{prevDep:t,nextDep:s}=e;t&&(t.nextDep=s,e.prevDep=void 0),s&&(s.prevDep=t,e.nextDep=void 0)}let Fe=!0;const Wr=[];function He(){Wr.push(Fe),Fe=!1}function qe(){const e=Wr.pop();Fe=e===void 0?!0:e}function Kr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const s=ee;ee=void 0;try{t()}finally{ee=s}}}let Ht=0;class Ao{constructor(t,s){this.sub=t,this.dep=s,this.version=s.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class er{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!ee||!Fe||ee===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==ee)s=this.activeLink=new Ao(ee,this),ee.deps?(s.prevDep=ee.depsTail,ee.depsTail.nextDep=s,ee.depsTail=s):ee.deps=ee.depsTail=s,Gr(s);else if(s.version===-1&&(s.version=this.version,s.nextDep)){const r=s.nextDep;r.prevDep=s.prevDep,s.prevDep&&(s.prevDep.nextDep=r),s.prevDep=ee.depsTail,s.nextDep=void 0,ee.depsTail.nextDep=s,ee.depsTail=s,ee.deps===s&&(ee.deps=r)}return s}trigger(t){this.version++,Ht++,this.notify(t)}notify(t){Ys();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{Qs()}}}function Gr(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let r=t.deps;r;r=r.nextDep)Gr(r)}const s=e.dep.subs;s!==e&&(e.prevSub=s,s&&(s.nextSub=e)),e.dep.subs=e}}const tr=new WeakMap,_t=Symbol(""),sr=Symbol(""),qt=Symbol("");function ge(e,t,s){if(Fe&&ee){let r=tr.get(e);r||tr.set(e,r=new Map);let n=r.get(s);n||(r.set(s,n=new er),n.map=r,n.key=s),n.track()}}function Ze(e,t,s,r,n,o){const l=tr.get(e);if(!l){Ht++;return}const i=a=>{a&&a.trigger()};if(Ys(),t==="clear")l.forEach(i);else{const a=L(e),g=a&&qs(s);if(a&&s==="length"){const v=Number(r);l.forEach((_,m)=>{(m==="length"||m===qt||!lt(m)&&m>=v)&&i(_)})}else switch((s!==void 0||l.has(void 0))&&i(l.get(s)),g&&i(l.get(qt)),t){case"add":a?g&&i(l.get("length")):(i(l.get(_t)),Tt(e)&&i(l.get(sr)));break;case"delete":a||(i(l.get(_t)),Tt(e)&&i(l.get(sr)));break;case"set":Tt(e)&&i(l.get(_t));break}}Qs()}function Et(e){const t=W(e);return t===e?t:(ge(t,"iterate",qt),Ve(e)?t:t.map(pe))}function hs(e){return ge(e=W(e),"iterate",qt),e}const Po={__proto__:null,[Symbol.iterator](){return rr(this,Symbol.iterator,pe)},concat(...e){return Et(this).concat(...e.map(t=>L(t)?Et(t):t))},entries(){return rr(this,"entries",e=>(e[1]=pe(e[1]),e))},every(e,t){return et(this,"every",e,t,void 0,arguments)},filter(e,t){return et(this,"filter",e,t,s=>s.map(pe),arguments)},find(e,t){return et(this,"find",e,t,pe,arguments)},findIndex(e,t){return et(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return et(this,"findLast",e,t,pe,arguments)},findLastIndex(e,t){return et(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return et(this,"forEach",e,t,void 0,arguments)},includes(...e){return nr(this,"includes",e)},indexOf(...e){return nr(this,"indexOf",e)},join(e){return Et(this).join(e)},lastIndexOf(...e){return nr(this,"lastIndexOf",e)},map(e,t){return et(this,"map",e,t,void 0,arguments)},pop(){return Wt(this,"pop")},push(...e){return Wt(this,"push",e)},reduce(e,...t){return zr(this,"reduce",e,t)},reduceRight(e,...t){return zr(this,"reduceRight",e,t)},shift(){return Wt(this,"shift")},some(e,t){return et(this,"some",e,t,void 0,arguments)},splice(...e){return Wt(this,"splice",e)},toReversed(){return Et(this).toReversed()},toSorted(e){return Et(this).toSorted(e)},toSpliced(...e){return Et(this).toSpliced(...e)},unshift(...e){return Wt(this,"unshift",e)},values(){return rr(this,"values",pe)}};function rr(e,t,s){const r=hs(e),n=r[t]();return r!==e&&!Ve(e)&&(n._next=n.next,n.next=()=>{const o=n._next();return o.value&&(o.value=s(o.value)),o}),n}const Io=Array.prototype;function et(e,t,s,r,n,o){const l=hs(e),i=l!==e&&!Ve(e),a=l[t];if(a!==Io[t]){const _=a.apply(e,o);return i?pe(_):_}let g=s;l!==e&&(i?g=function(_,m){return s.call(this,pe(_),m,e)}:s.length>2&&(g=function(_,m){return s.call(this,_,m,e)}));const v=a.call(l,g,r);return i&&n?n(v):v}function zr(e,t,s,r){const n=hs(e);let o=s;return n!==e&&(Ve(e)?s.length>3&&(o=function(l,i,a){return s.call(this,l,i,a,e)}):o=function(l,i,a){return s.call(this,l,pe(i),a,e)}),n[t](o,...r)}function nr(e,t,s){const r=W(e);ge(r,"iterate",qt);const n=r[t](...s);return(n===-1||n===!1)&&lr(s[0])?(s[0]=W(s[0]),r[t](...s)):n}function Wt(e,t,s=[]){He(),Ys();const r=W(e)[t].apply(e,s);return Qs(),qe(),r}const Oo=Bs("__proto__,__v_isRef,__isVue"),Jr=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(lt));function Do(e){lt(e)||(e=String(e));const t=W(this);return ge(t,"has",e),t.hasOwnProperty(e)}class Yr{constructor(t=!1,s=!1){this._isReadonly=t,this._isShallow=s}get(t,s,r){if(s==="__v_skip")return t.__v_skip;const n=this._isReadonly,o=this._isShallow;if(s==="__v_isReactive")return!n;if(s==="__v_isReadonly")return n;if(s==="__v_isShallow")return o;if(s==="__v_raw")return r===(n?o?sn:tn:o?en:Zr).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const l=L(t);if(!n){let a;if(l&&(a=Po[s]))return a;if(s==="hasOwnProperty")return Do}const i=Reflect.get(t,s,he(t)?t:r);return(lt(s)?Jr.has(s):Oo(s))||(n||ge(t,"get",s),o)?i:he(i)?l&&qs(s)?i:i.value:ne(i)?n?rn(i):$t(i):i}}class Qr extends Yr{constructor(t=!1){super(!1,t)}set(t,s,r,n){let o=t[s];if(!this._isShallow){const a=ut(o);if(!Ve(r)&&!ut(r)&&(o=W(o),r=W(r)),!L(t)&&he(o)&&!he(r))return a?!1:(o.value=r,!0)}const l=L(t)&&qs(s)?Number(s)e,vs=e=>Reflect.getPrototypeOf(e);function Ro(e,t,s){return function(...r){const n=this.__v_raw,o=W(n),l=Tt(o),i=e==="entries"||e===Symbol.iterator&&l,a=e==="keys"&&l,g=n[e](...r),v=s?or:t?bs:pe;return!t&&ge(o,"iterate",a?sr:_t),{next(){const{value:_,done:m}=g.next();return m?{value:_,done:m}:{value:i?[v(_[0]),v(_[1])]:v(_),done:m}},[Symbol.iterator](){return this}}}}function gs(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Fo(e,t){const s={get(n){const o=this.__v_raw,l=W(o),i=W(n);e||(at(n,i)&&ge(l,"get",n),ge(l,"get",i));const{has:a}=vs(l),g=t?or:e?bs:pe;if(a.call(l,n))return g(o.get(n));if(a.call(l,i))return g(o.get(i));o!==l&&o.get(n)},get size(){const n=this.__v_raw;return!e&&ge(W(n),"iterate",_t),Reflect.get(n,"size",n)},has(n){const o=this.__v_raw,l=W(o),i=W(n);return e||(at(n,i)&&ge(l,"has",n),ge(l,"has",i)),n===i?o.has(n):o.has(n)||o.has(i)},forEach(n,o){const l=this,i=l.__v_raw,a=W(i),g=t?or:e?bs:pe;return!e&&ge(a,"iterate",_t),i.forEach((v,_)=>n.call(o,g(v),g(_),l))}};return _e(s,e?{add:gs("add"),set:gs("set"),delete:gs("delete"),clear:gs("clear")}:{add(n){!t&&!Ve(n)&&!ut(n)&&(n=W(n));const o=W(this);return vs(o).has.call(o,n)||(o.add(n),Ze(o,"add",n,n)),this},set(n,o){!t&&!Ve(o)&&!ut(o)&&(o=W(o));const l=W(this),{has:i,get:a}=vs(l);let g=i.call(l,n);g||(n=W(n),g=i.call(l,n));const v=a.call(l,n);return l.set(n,o),g?at(o,v)&&Ze(l,"set",n,o):Ze(l,"add",n,o),this},delete(n){const o=W(this),{has:l,get:i}=vs(o);let a=l.call(o,n);a||(n=W(n),a=l.call(o,n)),i&&i.call(o,n);const g=o.delete(n);return a&&Ze(o,"delete",n,void 0),g},clear(){const n=W(this),o=n.size!==0,l=n.clear();return o&&Ze(n,"clear",void 0,void 0),l}}),["keys","values","entries",Symbol.iterator].forEach(n=>{s[n]=Ro(n,e,t)}),s}function ms(e,t){const s=Fo(e,t);return(r,n,o)=>n==="__v_isReactive"?!e:n==="__v_isReadonly"?e:n==="__v_raw"?r:Reflect.get(G(s,n)&&n in r?s:r,n,o)}const No={get:ms(!1,!1)},Bo={get:ms(!1,!0)},jo={get:ms(!0,!1)},Ho={get:ms(!0,!0)},Zr=new WeakMap,en=new WeakMap,tn=new WeakMap,sn=new WeakMap;function qo(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Wo(e){return e.__v_skip||!Object.isExtensible(e)?0:qo(_o(e))}function $t(e){return ut(e)?e:_s(e,!1,Mo,No,Zr)}function Ko(e){return _s(e,!1,Lo,Bo,en)}function rn(e){return _s(e,!0,Vo,jo,tn)}function zc(e){return _s(e,!0,Uo,Ho,sn)}function _s(e,t,s,r,n){if(!ne(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=Wo(e);if(o===0)return e;const l=n.get(e);if(l)return l;const i=new Proxy(e,o===2?r:s);return n.set(e,i),i}function At(e){return ut(e)?At(e.__v_raw):!!(e&&e.__v_isReactive)}function ut(e){return!!(e&&e.__v_isReadonly)}function Ve(e){return!!(e&&e.__v_isShallow)}function lr(e){return e?!!e.__v_raw:!1}function W(e){const t=e&&e.__v_raw;return t?W(t):e}function Go(e){return!G(e,"__v_skip")&&Object.isExtensible(e)&&Ks(e,"__v_skip",!0),e}const pe=e=>ne(e)?$t(e):e,bs=e=>ne(e)?rn(e):e;function he(e){return e?e.__v_isRef===!0:!1}function j(e){return zo(e,!1)}function zo(e,t){return he(e)?e:new Jo(e,t)}class Jo{constructor(t,s){this.dep=new er,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=s?t:W(t),this._value=s?t:pe(t),this.__v_isShallow=s}get value(){return this.dep.track(),this._value}set value(t){const s=this._rawValue,r=this.__v_isShallow||Ve(t)||ut(t);t=r?t:W(t),at(t,s)&&(this._rawValue=t,this._value=r?t:pe(t),this.dep.trigger())}}function Yo(e){return he(e)?e.value:e}const Qo={get:(e,t,s)=>t==="__v_raw"?e:Yo(Reflect.get(e,t,s)),set:(e,t,s,r)=>{const n=e[t];return he(n)&&!he(s)?(n.value=s,!0):Reflect.set(e,t,s,r)}};function nn(e){return At(e)?e:new Proxy(e,Qo)}class Xo{constructor(t,s,r){this.fn=t,this.setter=s,this._value=void 0,this.dep=new er(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Ht-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!s,this.isSSR=r}notify(){if(this.flags|=16,!(this.flags&8)&&ee!==this)return Br(this,!0),!0}get value(){const t=this.dep.track();return qr(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Zo(e,t,s=!1){let r,n;return R(e)?r=e:(r=e.get,n=e.set),new Xo(r,n,s)}const ys={},ws=new WeakMap;let bt;function el(e,t=!1,s=bt){if(s){let r=ws.get(s);r||ws.set(s,r=[]),r.push(e)}}function tl(e,t,s=Z){const{immediate:r,deep:n,once:o,scheduler:l,augmentJob:i,call:a}=s,g=I=>n?I:Ve(I)||n===!1||n===0?tt(I,1):tt(I);let v,_,m,y,E=!1,M=!1;if(he(e)?(_=()=>e.value,E=Ve(e)):At(e)?(_=()=>g(e),E=!0):L(e)?(M=!0,E=e.some(I=>At(I)||Ve(I)),_=()=>e.map(I=>{if(he(I))return I.value;if(At(I))return g(I);if(R(I))return a?a(I,2):I()})):R(e)?t?_=a?()=>a(e,2):e:_=()=>{if(m){He();try{m()}finally{qe()}}const I=bt;bt=v;try{return a?a(e,3,[y]):e(y)}finally{bt=I}}:_=je,t&&n){const I=_,te=n===!0?1/0:n;_=()=>tt(I(),te)}const re=Eo(),B=()=>{v.stop(),re&&re.active&&Hs(re.effects,v)};if(o&&t){const I=t;t=(...te)=>{I(...te),B()}}let K=M?new Array(e.length).fill(ys):ys;const H=I=>{if(!(!(v.flags&1)||!v.dirty&&!I))if(t){const te=v.run();if(n||E||(M?te.some((Ue,Ce)=>at(Ue,K[Ce])):at(te,K))){m&&m();const Ue=bt;bt=v;try{const Ce=[te,K===ys?void 0:M&&K[0]===ys?[]:K,y];K=te,a?a(t,3,Ce):t(...Ce)}finally{bt=Ue}}}else v.run()};return i&&i(H),v=new Fr(_),v.scheduler=l?()=>l(H,!1):H,y=I=>el(I,!1,v),m=v.onStop=()=>{const I=ws.get(v);if(I){if(a)a(I,4);else for(const te of I)te();ws.delete(v)}},t?r?H(!0):K=v.run():l?l(H.bind(null,!0),!0):v.run(),B.pause=v.pause.bind(v),B.resume=v.resume.bind(v),B.stop=B,B}function tt(e,t=1/0,s){if(t<=0||!ne(e)||e.__v_skip||(s=s||new Set,s.has(e)))return e;if(s.add(e),t--,he(e))tt(e.value,t,s);else if(L(e))for(let r=0;r{tt(r,t,s)});else if(Dr(e)){for(const r in e)tt(e[r],t,s);for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&tt(e[r],t,s)}return e}/** * @vue/runtime-core v3.5.18 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT **/const Kt=[];let ir=!1;function Jc(e,...t){if(ir)return;ir=!0,He();const s=Kt.length?Kt[Kt.length-1].component:null,r=s&&s.appContext.config.warnHandler,n=sl();if(r)Pt(r,s,11,[e+t.map(o=>{var l,i;return(i=(l=o.toString)==null?void 0:l.call(o))!=null?i:JSON.stringify(o)}).join(""),s&&s.proxy,n.map(({vnode:o})=>`at <${Jn(s,o.type)}>`).join(` `),n]);else{const o=[`[Vue warn]: ${e}`,...t];n.length&&o.push(` `,...rl(n)),console.warn(...o)}qe(),ir=!1}function sl(){let e=Kt[Kt.length-1];if(!e)return[];const t=[];for(;e;){const s=t[0];s&&s.vnode===e?s.recurseCount++:t.push({vnode:e,recurseCount:0});const r=e.component&&e.component.parent;e=r&&r.vnode}return t}function rl(e){const t=[];return e.forEach((s,r)=>{t.push(...r===0?[]:[` `],...nl(s))}),t}function nl({vnode:e,recurseCount:t}){const s=t>0?`... (${t} recursive calls)`:"",r=e.component?e.component.parent==null:!1,n=` at <${Jn(e.component,e.type,r)}`,o=">"+s;return e.props?[n,...ol(e.props),o]:[n+o]}function ol(e){const t=[],s=Object.keys(e);return s.slice(0,3).forEach(r=>{t.push(...on(r,e[r]))}),s.length>3&&t.push(" ..."),t}function on(e,t,s){return ue(t)?(t=JSON.stringify(t),s?t:[`${e}=${t}`]):typeof t=="number"||typeof t=="boolean"||t==null?s?t:[`${e}=${t}`]:he(t)?(t=on(e,W(t.value),!0),s?t:[`${e}=Ref<`,t,">"]):R(t)?[`${e}=fn${t.name?`<${t.name}>`:""}`]:(t=W(t),s?t:[`${e}=`,t])}function Pt(e,t,s,r){try{return r?e(...r):e()}catch(n){xs(n,t,s)}}function We(e,t,s,r){if(R(e)){const n=Pt(e,t,s,r);return n&&Ir(n)&&n.catch(o=>{xs(o,t,s)}),n}if(L(e)){const n=[];for(let o=0;o>>1,n=be[r],o=Gt(n);o=Gt(s)?be.push(e):be.splice(il(t),0,e),e.flags|=1,an()}}function an(){ks||(ks=ln.then(fn))}function al(e){L(e)?It.push(...e):ct&&e.id===-1?ct.splice(Ot+1,0,e):e.flags&1||(It.push(e),e.flags|=1),an()}function un(e,t,s=Ke+1){for(;sGt(s)-Gt(r));if(It.length=0,ct){ct.push(...t);return}for(ct=t,Ot=0;Ote.id==null?e.flags&2?-1:1/0:e.id;function fn(e){try{for(Ke=0;Ke{r._d&&Bn(-1);const o=Cs(t);let l;try{l=e(...n)}finally{Cs(o),r._d&&Bn(1)}return l};return r._n=!0,r._c=!0,r._d=!0,r}function le(e,t){if(Le===null)return e;const s=Ms(Le),r=e.dirs||(e.dirs=[]);for(let n=0;ne.__isTeleport;function cr(e,t){e.shapeFlag&6&&e.component?(e.transition=t,cr(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function pn(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function zt(e,t,s,r,n=!1){if(L(e)){e.forEach((E,M)=>zt(E,t&&(L(t)?t[M]:t),s,r,n));return}if(Jt(r)&&!n){r.shapeFlag&512&&r.type.__asyncResolved&&r.component.subTree.component&&zt(e,t,s,r.component.subTree);return}const o=r.shapeFlag&4?Ms(r.component):r.el,l=n?null:o,{i,r:a}=e,g=t&&t.r,v=i.refs===Z?i.refs={}:i.refs,_=i.setupState,m=W(_),y=_===Z?()=>!1:E=>G(m,E);if(g!=null&&g!==a&&(ue(g)?(v[g]=null,y(g)&&(_[g]=null)):he(g)&&(g.value=null)),R(a))Pt(a,i,12,[l,v]);else{const E=ue(a),M=he(a);if(E||M){const re=()=>{if(e.f){const B=E?y(a)?_[a]:v[a]:a.value;n?L(B)&&Hs(B,o):L(B)?B.includes(o)||B.push(o):E?(v[a]=[o],y(a)&&(_[a]=v[a])):(a.value=[o],e.k&&(v[e.k]=a.value))}else E?(v[a]=l,y(a)&&(_[a]=l)):M&&(a.value=l,e.k&&(v[e.k]=l))};l?(re.id=-1,Pe(re,s)):re()}}}ps().requestIdleCallback,ps().cancelIdleCallback;const Jt=e=>!!e.type.__asyncLoader,hn=e=>e.type.__isKeepAlive;function dl(e,t){vn(e,"a",t)}function pl(e,t){vn(e,"da",t)}function vn(e,t,s=xe){const r=e.__wdc||(e.__wdc=()=>{let n=s;for(;n;){if(n.isDeactivated)return;n=n.parent}return e()});if(Ss(t,r,s),s){let n=s.parent;for(;n&&n.parent;)hn(n.parent.vnode)&&hl(r,t,s,n),n=n.parent}}function hl(e,t,s,r){const n=Ss(t,e,r,!0);Ts(()=>{Hs(r[t],n)},s)}function Ss(e,t,s=xe,r=!1){if(s){const n=s[e]||(s[e]=[]),o=t.__weh||(t.__weh=(...l)=>{He();const i=ts(s),a=We(t,s,e,l);return i(),qe(),a});return r?n.unshift(o):n.push(o),o}}const st=e=>(t,s=xe)=>{(!ss||e==="sp")&&Ss(e,(...r)=>t(...r),s)},vl=st("bm"),Dt=st("m"),gl=st("bu"),ml=st("u"),_l=st("bum"),Ts=st("um"),bl=st("sp"),yl=st("rtg"),wl=st("rtc");function xl(e,t=xe){Ss("ec",e,t)}const kl=Symbol.for("v-ndc");function fr(e,t,s,r){let n;const o=s,l=L(e);if(l||ue(e)){const i=l&&At(e);let a=!1,g=!1;i&&(a=!Ve(e),g=ut(e),e=hs(e)),n=new Array(e.length);for(let v=0,_=e.length;v<_;v++)n[v]=t(a?g?bs(pe(e[v])):pe(e[v]):e[v],v,void 0,o)}else if(typeof e=="number"){n=new Array(e);for(let i=0;it(i,a,void 0,o));else{const i=Object.keys(e);n=new Array(i.length);for(let a=0,g=i.length;ae?Kn(e)?Ms(e):dr(e.parent):null,Yt=_e(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>dr(e.parent),$root:e=>dr(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>bn(e),$forceUpdate:e=>e.f||(e.f=()=>{ur(e.update)}),$nextTick:e=>e.n||(e.n=ar.bind(e.proxy)),$watch:e=>Wl.bind(e)}),pr=(e,t)=>e!==Z&&!e.__isScriptSetup&&G(e,t),Cl={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:s,setupState:r,data:n,props:o,accessCache:l,type:i,appContext:a}=e;let g;if(t[0]!=="$"){const y=l[t];if(y!==void 0)switch(y){case 1:return r[t];case 2:return n[t];case 4:return s[t];case 3:return o[t]}else{if(pr(r,t))return l[t]=1,r[t];if(n!==Z&&G(n,t))return l[t]=2,n[t];if((g=e.propsOptions[0])&&G(g,t))return l[t]=3,o[t];if(s!==Z&&G(s,t))return l[t]=4,s[t];hr&&(l[t]=0)}}const v=Yt[t];let _,m;if(v)return t==="$attrs"&&ge(e.attrs,"get",""),v(e);if((_=i.__cssModules)&&(_=_[t]))return _;if(s!==Z&&G(s,t))return l[t]=4,s[t];if(m=a.config.globalProperties,G(m,t))return m[t]},set({_:e},t,s){const{data:r,setupState:n,ctx:o}=e;return pr(n,t)?(n[t]=s,!0):r!==Z&&G(r,t)?(r[t]=s,!0):G(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=s,!0)},has({_:{data:e,setupState:t,accessCache:s,ctx:r,appContext:n,propsOptions:o}},l){let i;return!!s[l]||e!==Z&&G(e,l)||pr(t,l)||(i=o[0])&&G(i,l)||G(r,l)||G(Yt,l)||G(n.config.globalProperties,l)},defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:G(s,"value")&&this.set(e,t,s.value,null),Reflect.defineProperty(e,t,s)}};function gn(e){return L(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}let hr=!0;function Sl(e){const t=bn(e),s=e.proxy,r=e.ctx;hr=!1,t.beforeCreate&&mn(t.beforeCreate,e,"bc");const{data:n,computed:o,methods:l,watch:i,provide:a,inject:g,created:v,beforeMount:_,mounted:m,beforeUpdate:y,updated:E,activated:M,deactivated:re,beforeDestroy:B,beforeUnmount:K,destroyed:H,unmounted:I,render:te,renderTracked:Ue,renderTriggered:Ce,errorCaptured:Re,serverPrefetch:nt,expose:Te,inheritAttrs:oe,components:Ne,directives:V,filters:x}=t;if(g&&Tl(g,r,null),l)for(const Q in l){const X=l[Q];R(X)&&(r[Q]=X.bind(s))}if(n){const Q=n.call(s,s);ne(Q)&&(e.data=$t(Q))}if(hr=!0,o)for(const Q in o){const X=o[Q],ot=R(X)?X.bind(s,s):R(X.get)?X.get.bind(s,s):je,Rt=!R(X)&&R(X.set)?X.set.bind(s):je,Je=Oe({get:ot,set:Rt});Object.defineProperty(r,Q,{enumerable:!0,configurable:!0,get:()=>Je.value,set:Ee=>Je.value=Ee})}if(i)for(const Q in i)_n(i[Q],r,s,Q);if(a){const Q=R(a)?a.call(s):a;Reflect.ownKeys(Q).forEach(X=>{Ol(X,Q[X])})}v&&mn(v,e,"c");function O(Q,X){L(X)?X.forEach(ot=>Q(ot.bind(s))):X&&Q(X.bind(s))}if(O(vl,_),O(Dt,m),O(gl,y),O(ml,E),O(dl,M),O(pl,re),O(xl,Re),O(wl,Ue),O(yl,Ce),O(_l,K),O(Ts,I),O(bl,nt),L(Te))if(Te.length){const Q=e.exposed||(e.exposed={});Te.forEach(X=>{Object.defineProperty(Q,X,{get:()=>s[X],set:ot=>s[X]=ot,enumerable:!0})})}else e.exposed||(e.exposed={});te&&e.render===je&&(e.render=te),oe!=null&&(e.inheritAttrs=oe),Ne&&(e.components=Ne),V&&(e.directives=V),nt&&pn(e)}function Tl(e,t,s=je){L(e)&&(e=vr(e));for(const r in e){const n=e[r];let o;ne(n)?"default"in n?o=$s(n.from||r,n.default,!0):o=$s(n.from||r):o=$s(n),he(o)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>o.value,set:l=>o.value=l}):t[r]=o}}function mn(e,t,s){We(L(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,s)}function _n(e,t,s,r){let n=r.includes(".")?Ln(s,r):()=>s[r];if(ue(e)){const o=t[e];R(o)&&Vt(n,o)}else if(R(e))Vt(n,e.bind(s));else if(ne(e))if(L(e))e.forEach(o=>_n(o,t,s,r));else{const o=R(e.handler)?e.handler.bind(s):t[e.handler];R(o)&&Vt(n,o,e)}}function bn(e){const t=e.type,{mixins:s,extends:r}=t,{mixins:n,optionsCache:o,config:{optionMergeStrategies:l}}=e.appContext,i=o.get(t);let a;return i?a=i:!n.length&&!s&&!r?a=t:(a={},n.length&&n.forEach(g=>Es(a,g,l,!0)),Es(a,t,l)),ne(t)&&o.set(t,a),a}function Es(e,t,s,r=!1){const{mixins:n,extends:o}=t;o&&Es(e,o,s,!0),n&&n.forEach(l=>Es(e,l,s,!0));for(const l in t)if(!(r&&l==="expose")){const i=El[l]||s&&s[l];e[l]=i?i(e[l],t[l]):t[l]}return e}const El={data:yn,props:wn,emits:wn,methods:Qt,computed:Qt,beforeCreate:ye,created:ye,beforeMount:ye,mounted:ye,beforeUpdate:ye,updated:ye,beforeDestroy:ye,beforeUnmount:ye,destroyed:ye,unmounted:ye,activated:ye,deactivated:ye,errorCaptured:ye,serverPrefetch:ye,components:Qt,directives:Qt,watch:Al,provide:yn,inject:$l};function yn(e,t){return t?e?function(){return _e(R(e)?e.call(this,this):e,R(t)?t.call(this,this):t)}:t:e}function $l(e,t){return Qt(vr(e),vr(t))}function vr(e){if(L(e)){const t={};for(let s=0;s1)return s&&R(t)?t.call(r&&r.proxy):t}}const kn={},Cn=()=>Object.create(kn),Sn=e=>Object.getPrototypeOf(e)===kn;function Dl(e,t,s,r=!1){const n={},o=Cn();e.propsDefaults=Object.create(null),Tn(e,t,n,o);for(const l in e.propsOptions[0])l in n||(n[l]=void 0);s?e.props=r?n:Ko(n):e.type.props?e.props=n:e.props=o,e.attrs=o}function Ml(e,t,s,r){const{props:n,attrs:o,vnode:{patchFlag:l}}=e,i=W(n),[a]=e.propsOptions;let g=!1;if((r||l>0)&&!(l&16)){if(l&8){const v=e.vnode.dynamicProps;for(let _=0;_{a=!0;const[m,y]=En(_,t,!0);_e(l,m),y&&i.push(...y)};!s&&t.mixins.length&&t.mixins.forEach(v),e.extends&&v(e.extends),e.mixins&&e.mixins.forEach(v)}if(!o&&!a)return ne(e)&&r.set(e,St),St;if(L(o))for(let v=0;ve==="_"||e==="__"||e==="_ctx"||e==="$stable",_r=e=>L(e)?e.map(Ge):[Ge(e)],Ll=(e,t,s)=>{if(t._n)return t;const r=ul((...n)=>_r(t(...n)),s);return r._c=!1,r},An=(e,t,s)=>{const r=e._ctx;for(const n in e){if(mr(n))continue;const o=e[n];if(R(o))t[n]=Ll(n,o,r);else if(o!=null){const l=_r(o);t[n]=()=>l}}},Pn=(e,t)=>{const s=_r(t);e.slots.default=()=>s},In=(e,t,s)=>{for(const r in t)(s||!mr(r))&&(e[r]=t[r])},Ul=(e,t,s)=>{const r=e.slots=Cn();if(e.vnode.shapeFlag&32){const n=t.__;n&&Ks(r,"__",n,!0);const o=t._;o?(In(r,t,s),s&&Ks(r,"_",o,!0)):An(t,r)}else t&&Pn(e,t)},Rl=(e,t,s)=>{const{vnode:r,slots:n}=e;let o=!0,l=Z;if(r.shapeFlag&32){const i=t._;i?s&&i===1?o=!1:In(n,t,s):(o=!t.$stable,An(t,n)),l=t}else t&&(Pn(e,t),l={default:1});if(o)for(const i in n)!mr(i)&&l[i]==null&&delete n[i]},Pe=Xl;function Fl(e){return Nl(e)}function Nl(e,t){const s=ps();s.__VUE__=!0;const{insert:r,remove:n,patchProp:o,createElement:l,createText:i,createComment:a,setText:g,setElementText:v,parentNode:_,nextSibling:m,setScopeId:y=je,insertStaticContent:E}=e,M=(u,h,p,d=null,f=null,b=null,T=void 0,C=null,S=!!h.dynamicChildren)=>{if(u===h)return;u&&!es(u,h)&&(d=Ct(u),Ee(u,f,b,!0),u=null),h.patchFlag===-2&&(S=!1,h.dynamicChildren=null);const{type:w,ref:A,shapeFlag:k}=h;switch(w){case Ps:re(u,h,p,d);break;case ft:B(u,h,p,d);break;case Is:u==null&&K(h,p,d,T);break;case we:Ne(u,h,p,d,f,b,T,C,S);break;default:k&1?te(u,h,p,d,f,b,T,C,S):k&6?V(u,h,p,d,f,b,T,C,S):(k&64||k&128)&&w.process(u,h,p,d,f,b,T,C,S,Be)}A!=null&&f?zt(A,u&&u.ref,b,h||u,!h):A==null&&u&&u.ref!=null&&zt(u.ref,null,b,u,!0)},re=(u,h,p,d)=>{if(u==null)r(h.el=i(h.children),p,d);else{const f=h.el=u.el;h.children!==u.children&&g(f,h.children)}},B=(u,h,p,d)=>{u==null?r(h.el=a(h.children||""),p,d):h.el=u.el},K=(u,h,p,d)=>{[u.el,u.anchor]=E(u.children,h,p,d,u.el,u.anchor)},H=({el:u,anchor:h},p,d)=>{let f;for(;u&&u!==h;)f=m(u),r(u,p,d),u=f;r(h,p,d)},I=({el:u,anchor:h})=>{let p;for(;u&&u!==h;)p=m(u),n(u),u=p;n(h)},te=(u,h,p,d,f,b,T,C,S)=>{h.type==="svg"?T="svg":h.type==="math"&&(T="mathml"),u==null?Ue(h,p,d,f,b,T,C,S):nt(u,h,f,b,T,C,S)},Ue=(u,h,p,d,f,b,T,C)=>{let S,w;const{props:A,shapeFlag:k,transition:D,dirs:U}=u;if(S=u.el=l(u.type,b,A&&A.is,A),k&8?v(S,u.children):k&16&&Re(u.children,S,null,d,f,br(u,b),T,C),U&&yt(u,null,d,"created"),Ce(S,u,u.scopeId,T,d),A){for(const se in A)se!=="value"&&!Ft(se)&&o(S,se,null,A[se],b,d);"value"in A&&o(S,"value",null,A.value,b),(w=A.onVnodeBeforeMount)&&ze(w,d,u)}U&&yt(u,null,d,"beforeMount");const q=Bl(f,D);q&&D.beforeEnter(S),r(S,h,p),((w=A&&A.onVnodeMounted)||q||U)&&Pe(()=>{w&&ze(w,d,u),q&&D.enter(S),U&&yt(u,null,d,"mounted")},f)},Ce=(u,h,p,d,f)=>{if(p&&y(u,p),d)for(let b=0;b{for(let w=S;w{const C=h.el=u.el;let{patchFlag:S,dynamicChildren:w,dirs:A}=h;S|=u.patchFlag&16;const k=u.props||Z,D=h.props||Z;let U;if(p&&wt(p,!1),(U=D.onVnodeBeforeUpdate)&&ze(U,p,h,u),A&&yt(h,u,p,"beforeUpdate"),p&&wt(p,!0),(k.innerHTML&&D.innerHTML==null||k.textContent&&D.textContent==null)&&v(C,""),w?Te(u.dynamicChildren,w,C,p,d,br(h,f),b):T||X(u,h,C,null,p,d,br(h,f),b,!1),S>0){if(S&16)oe(C,k,D,p,f);else if(S&2&&k.class!==D.class&&o(C,"class",null,D.class,f),S&4&&o(C,"style",k.style,D.style,f),S&8){const q=h.dynamicProps;for(let se=0;se{U&&ze(U,p,h,u),A&&yt(h,u,p,"updated")},d)},Te=(u,h,p,d,f,b,T)=>{for(let C=0;C{if(h!==p){if(h!==Z)for(const b in h)!Ft(b)&&!(b in p)&&o(u,b,h[b],null,f,d);for(const b in p){if(Ft(b))continue;const T=p[b],C=h[b];T!==C&&b!=="value"&&o(u,b,C,T,f,d)}"value"in p&&o(u,"value",h.value,p.value,f)}},Ne=(u,h,p,d,f,b,T,C,S)=>{const w=h.el=u?u.el:i(""),A=h.anchor=u?u.anchor:i("");let{patchFlag:k,dynamicChildren:D,slotScopeIds:U}=h;U&&(C=C?C.concat(U):U),u==null?(r(w,p,d),r(A,p,d),Re(h.children||[],p,A,f,b,T,C,S)):k>0&&k&64&&D&&u.dynamicChildren?(Te(u.dynamicChildren,D,p,f,b,T,C),(h.key!=null||f&&h===f.subTree)&&On(u,h,!0)):X(u,h,p,A,f,b,T,C,S)},V=(u,h,p,d,f,b,T,C,S)=>{h.slotScopeIds=C,u==null?h.shapeFlag&512?f.ctx.activate(h,p,d,T,S):x(h,p,d,f,b,T,S):me(u,h,S)},x=(u,h,p,d,f,b,T)=>{const C=u.component=ii(u,d,f);if(hn(u)&&(C.ctx.renderer=Be),ui(C,!1,T),C.asyncDep){if(f&&f.registerDep(C,O,T),!u.el){const S=C.subTree=ie(ft);B(null,S,h,p),u.placeholder=S.el}}else O(C,u,h,p,f,b,T)},me=(u,h,p)=>{const d=h.component=u.component;if(Yl(u,h,p))if(d.asyncDep&&!d.asyncResolved){Q(d,h,p);return}else d.next=h,d.update();else h.el=u.el,d.vnode=h},O=(u,h,p,d,f,b,T)=>{const C=()=>{if(u.isMounted){let{next:k,bu:D,u:U,parent:q,vnode:se}=u;{const Qe=Dn(u);if(Qe){k&&(k.el=se.el,Q(u,k,T)),Qe.asyncDep.then(()=>{u.isUnmounted||C()});return}}let J=k,$e;wt(u,!1),k?(k.el=se.el,Q(u,k,T)):k=se,D&&ds(D),($e=k.props&&k.props.onVnodeBeforeUpdate)&&ze($e,q,k,se),wt(u,!0);const Ae=Rn(u),Ye=u.subTree;u.subTree=Ae,M(Ye,Ae,_(Ye.el),Ct(Ye),u,f,b),k.el=Ae.el,J===null&&Ql(u,Ae.el),U&&Pe(U,f),($e=k.props&&k.props.onVnodeUpdated)&&Pe(()=>ze($e,q,k,se),f)}else{let k;const{el:D,props:U}=h,{bm:q,m:se,parent:J,root:$e,type:Ae}=u,Ye=Jt(h);wt(u,!1),q&&ds(q),!Ye&&(k=U&&U.onVnodeBeforeMount)&&ze(k,J,h),wt(u,!0);{$e.ce&&$e.ce._def.shadowRoot!==!1&&$e.ce._injectChildStyle(Ae);const Qe=u.subTree=Rn(u);M(null,Qe,p,d,u,f,b),h.el=Qe.el}if(se&&Pe(se,f),!Ye&&(k=U&&U.onVnodeMounted)){const Qe=h;Pe(()=>ze(k,J,Qe),f)}(h.shapeFlag&256||J&&Jt(J.vnode)&&J.vnode.shapeFlag&256)&&u.a&&Pe(u.a,f),u.isMounted=!0,h=p=d=null}};u.scope.on();const S=u.effect=new Fr(C);u.scope.off();const w=u.update=S.run.bind(S),A=u.job=S.runIfDirty.bind(S);A.i=u,A.id=u.uid,S.scheduler=()=>ur(A),wt(u,!0),w()},Q=(u,h,p)=>{h.component=u;const d=u.vnode.props;u.vnode=h,u.next=null,Ml(u,h.props,d,p),Rl(u,h.children,p),He(),un(u),qe()},X=(u,h,p,d,f,b,T,C,S=!1)=>{const w=u&&u.children,A=u?u.shapeFlag:0,k=h.children,{patchFlag:D,shapeFlag:U}=h;if(D>0){if(D&128){Rt(w,k,p,d,f,b,T,C,S);return}else if(D&256){ot(w,k,p,d,f,b,T,C,S);return}}U&8?(A&16&&kt(w,f,b),k!==w&&v(p,k)):A&16?U&16?Rt(w,k,p,d,f,b,T,C,S):kt(w,f,b,!0):(A&8&&v(p,""),U&16&&Re(k,p,d,f,b,T,C,S))},ot=(u,h,p,d,f,b,T,C,S)=>{u=u||St,h=h||St;const w=u.length,A=h.length,k=Math.min(w,A);let D;for(D=0;DA?kt(u,f,b,!0,!1,k):Re(h,p,d,f,b,T,C,S,k)},Rt=(u,h,p,d,f,b,T,C,S)=>{let w=0;const A=h.length;let k=u.length-1,D=A-1;for(;w<=k&&w<=D;){const U=u[w],q=h[w]=S?dt(h[w]):Ge(h[w]);if(es(U,q))M(U,q,p,null,f,b,T,C,S);else break;w++}for(;w<=k&&w<=D;){const U=u[k],q=h[D]=S?dt(h[D]):Ge(h[D]);if(es(U,q))M(U,q,p,null,f,b,T,C,S);else break;k--,D--}if(w>k){if(w<=D){const U=D+1,q=UD)for(;w<=k;)Ee(u[w],f,b,!0),w++;else{const U=w,q=w,se=new Map;for(w=q;w<=D;w++){const Me=h[w]=S?dt(h[w]):Ge(h[w]);Me.key!=null&&se.set(Me.key,w)}let J,$e=0;const Ae=D-q+1;let Ye=!1,Qe=0;const as=new Array(Ae);for(w=0;w=Ae){Ee(Me,f,b,!0);continue}let Xe;if(Me.key!=null)Xe=se.get(Me.key);else for(J=q;J<=D;J++)if(as[J-q]===0&&es(Me,h[J])){Xe=J;break}Xe===void 0?Ee(Me,f,b,!0):(as[Xe-q]=w+1,Xe>=Qe?Qe=Xe:Ye=!0,M(Me,h[Xe],p,null,f,b,T,C,S),$e++)}const po=Ye?jl(as):St;for(J=po.length-1,w=Ae-1;w>=0;w--){const Me=q+w,Xe=h[Me],ho=h[Me+1],vo=Me+1{const{el:b,type:T,transition:C,children:S,shapeFlag:w}=u;if(w&6){Je(u.component.subTree,h,p,d);return}if(w&128){u.suspense.move(h,p,d);return}if(w&64){T.move(u,h,p,Be);return}if(T===we){r(b,h,p);for(let k=0;kC.enter(b),f);else{const{leave:k,delayLeave:D,afterLeave:U}=C,q=()=>{u.ctx.isUnmounted?n(b):r(b,h,p)},se=()=>{k(b,()=>{q(),U&&U()})};D?D(b,q,se):se()}else r(b,h,p)},Ee=(u,h,p,d=!1,f=!1)=>{const{type:b,props:T,ref:C,children:S,dynamicChildren:w,shapeFlag:A,patchFlag:k,dirs:D,cacheIndex:U}=u;if(k===-2&&(f=!1),C!=null&&(He(),zt(C,null,p,u,!0),qe()),U!=null&&(h.renderCache[U]=void 0),A&256){h.ctx.deactivate(u);return}const q=A&1&&D,se=!Jt(u);let J;if(se&&(J=T&&T.onVnodeBeforeUnmount)&&ze(J,h,u),A&6)$r(u.component,p,d);else{if(A&128){u.suspense.unmount(p,d);return}q&&yt(u,null,h,"beforeUnmount"),A&64?u.type.remove(u,h,p,Be,d):w&&!w.hasOnce&&(b!==we||k>0&&k&64)?kt(w,h,p,!1,!0):(b===we&&k&384||!f&&A&16)&&kt(S,h,p),d&&Ns(u)}(se&&(J=T&&T.onVnodeUnmounted)||q)&&Pe(()=>{J&&ze(J,h,u),q&&yt(u,null,h,"unmounted")},p)},Ns=u=>{const{type:h,el:p,anchor:d,transition:f}=u;if(h===we){Er(p,d);return}if(h===Is){I(u);return}const b=()=>{n(p),f&&!f.persisted&&f.afterLeave&&f.afterLeave()};if(u.shapeFlag&1&&f&&!f.persisted){const{leave:T,delayLeave:C}=f,S=()=>T(p,b);C?C(u.el,b,S):S()}else b()},Er=(u,h)=>{let p;for(;u!==h;)p=m(u),n(u),u=p;n(h)},$r=(u,h,p)=>{const{bum:d,scope:f,job:b,subTree:T,um:C,m:S,a:w,parent:A,slots:{__:k}}=u;Mn(S),Mn(w),d&&ds(d),A&&L(k)&&k.forEach(D=>{A.renderCache[D]=void 0}),f.stop(),b&&(b.flags|=8,Ee(T,u,h,p)),C&&Pe(C,h),Pe(()=>{u.isUnmounted=!0},h),h&&h.pendingBranch&&!h.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===h.pendingId&&(h.deps--,h.deps===0&&h.resolve())},kt=(u,h,p,d=!1,f=!1,b=0)=>{for(let T=b;T{if(u.shapeFlag&6)return Ct(u.component.subTree);if(u.shapeFlag&128)return u.suspense.next();const h=m(u.anchor||u.el),p=h&&h[cl];return p?m(p):h};let is=!1;const gt=(u,h,p)=>{u==null?h._vnode&&Ee(h._vnode,null,null,!0):M(h._vnode||null,u,h,null,null,null,p),h._vnode=u,is||(is=!0,un(),cn(),is=!1)},Be={p:M,um:Ee,m:Je,r:Ns,mt:x,mc:Re,pc:X,pbc:Te,n:Ct,o:e};return{render:gt,hydrate:void 0,createApp:Il(gt)}}function br({type:e,props:t},s){return s==="svg"&&e==="foreignObject"||s==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:s}function wt({effect:e,job:t},s){s?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Bl(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function On(e,t,s=!1){const r=e.children,n=t.children;if(L(r)&&L(n))for(let o=0;o>1,e[s[i]]0&&(t[r]=s[o-1]),s[o]=r)}}for(o=s.length,l=s[o-1];o-- >0;)s[o]=l,l=t[l];return s}function Dn(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Dn(t)}function Mn(e){if(e)for(let t=0;t$s(Hl);function Vt(e,t,s){return Vn(e,t,s)}function Vn(e,t,s=Z){const{immediate:r,deep:n,flush:o,once:l}=s,i=_e({},s),a=t&&r||!t&&o!=="post";let g;if(ss){if(o==="sync"){const y=ql();g=y.__watcherHandles||(y.__watcherHandles=[])}else if(!a){const y=()=>{};return y.stop=je,y.resume=je,y.pause=je,y}}const v=xe;i.call=(y,E,M)=>We(y,v,E,M);let _=!1;o==="post"?i.scheduler=y=>{Pe(y,v&&v.suspense)}:o!=="sync"&&(_=!0,i.scheduler=(y,E)=>{E?y():ur(y)}),i.augmentJob=y=>{t&&(y.flags|=4),_&&(y.flags|=2,v&&(y.id=v.uid,y.i=v))};const m=tl(e,t,i);return ss&&(g?g.push(m):a&&m()),m}function Wl(e,t,s){const r=this.proxy,n=ue(e)?e.includes(".")?Ln(r,e):()=>r[e]:e.bind(r,r);let o;R(t)?o=t:(o=t.handler,s=t);const l=ts(this),i=Vn(n,o.bind(r),s);return l(),i}function Ln(e,t){const s=t.split(".");return()=>{let r=e;for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${it(t)}Modifiers`]||e[`${mt(t)}Modifiers`];function Gl(e,t,...s){if(e.isUnmounted)return;const r=e.vnode.props||Z;let n=s;const o=t.startsWith("update:"),l=o&&Kl(r,t.slice(7));l&&(l.trim&&(n=s.map(v=>ue(v)?v.trim():v)),l.number&&(n=s.map(Gs)));let i,a=r[i=Ws(t)]||r[i=Ws(it(t))];!a&&o&&(a=r[i=Ws(mt(t))]),a&&We(a,e,6,n);const g=r[i+"Once"];if(g){if(!e.emitted)e.emitted={};else if(e.emitted[i])return;e.emitted[i]=!0,We(g,e,6,n)}}function Un(e,t,s=!1){const r=t.emitsCache,n=r.get(e);if(n!==void 0)return n;const o=e.emits;let l={},i=!1;if(!R(e)){const a=g=>{const v=Un(g,t,!0);v&&(i=!0,_e(l,v))};!s&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!o&&!i?(ne(e)&&r.set(e,null),null):(L(o)?o.forEach(a=>l[a]=null):_e(l,o),ne(e)&&r.set(e,l),l)}function As(e,t){return!e||!us(t)?!1:(t=t.slice(2).replace(/Once$/,""),G(e,t[0].toLowerCase()+t.slice(1))||G(e,mt(t))||G(e,t))}function Yc(){}function Rn(e){const{type:t,vnode:s,proxy:r,withProxy:n,propsOptions:[o],slots:l,attrs:i,emit:a,render:g,renderCache:v,props:_,data:m,setupState:y,ctx:E,inheritAttrs:M}=e,re=Cs(e);let B,K;try{if(s.shapeFlag&4){const I=n||r,te=I;B=Ge(g.call(te,I,v,_,y,m,E)),K=i}else{const I=t;B=Ge(I.length>1?I(_,{attrs:i,slots:l,emit:a}):I(_,null)),K=t.props?i:zl(i)}}catch(I){Xt.length=0,xs(I,e,1),B=ie(ft)}let H=B;if(K&&M!==!1){const I=Object.keys(K),{shapeFlag:te}=H;I.length&&te&7&&(o&&I.some(js)&&(K=Jl(K,o)),H=Lt(H,K,!1,!0))}return s.dirs&&(H=Lt(H,null,!1,!0),H.dirs=H.dirs?H.dirs.concat(s.dirs):s.dirs),s.transition&&cr(H,s.transition),B=H,Cs(re),B}const zl=e=>{let t;for(const s in e)(s==="class"||s==="style"||us(s))&&((t||(t={}))[s]=e[s]);return t},Jl=(e,t)=>{const s={};for(const r in e)(!js(r)||!(r.slice(9)in t))&&(s[r]=e[r]);return s};function Yl(e,t,s){const{props:r,children:n,component:o}=e,{props:l,children:i,patchFlag:a}=t,g=o.emitsOptions;if(t.dirs||t.transition)return!0;if(s&&a>=0){if(a&1024)return!0;if(a&16)return r?Fn(r,l,g):!!l;if(a&8){const v=t.dynamicProps;for(let _=0;_e.__isSuspense;function Xl(e,t){t&&t.pendingBranch?L(e)?t.effects.push(...e):t.effects.push(e):al(e)}const we=Symbol.for("v-fgt"),Ps=Symbol.for("v-txt"),ft=Symbol.for("v-cmt"),Is=Symbol.for("v-stc"),Xt=[];let Ie=null;function $(e=!1){Xt.push(Ie=e?null:[])}function Zl(){Xt.pop(),Ie=Xt[Xt.length-1]||null}let Zt=1;function Bn(e,t=!1){Zt+=e,e<0&&Ie&&t&&(Ie.hasOnce=!0)}function jn(e){return e.dynamicChildren=Zt>0?Ie||St:null,Zl(),Zt>0&&Ie&&Ie.push(e),e}function P(e,t,s,r,n,o){return jn(c(e,t,s,r,n,o,!0))}function yr(e,t,s,r,n){return jn(ie(e,t,s,r,n,!0))}function Hn(e){return e?e.__v_isVNode===!0:!1}function es(e,t){return e.type===t.type&&e.key===t.key}const qn=({key:e})=>e??null,Os=({ref:e,ref_key:t,ref_for:s})=>(typeof e=="number"&&(e=""+e),e!=null?ue(e)||he(e)||R(e)?{i:Le,r:e,k:t,f:!!s}:e:null);function c(e,t=null,s=null,r=0,n=null,o=e===we?0:1,l=!1,i=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&qn(t),ref:t&&Os(t),scopeId:dn,slotScopeIds:null,children:s,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:r,dynamicProps:n,dynamicChildren:null,appContext:null,ctx:Le};return i?(wr(a,s),o&128&&e.normalize(a)):s&&(a.shapeFlag|=ue(s)?8:16),Zt>0&&!l&&Ie&&(a.patchFlag>0||o&6)&&a.patchFlag!==32&&Ie.push(a),a}const ie=ei;function ei(e,t=null,s=null,r=0,n=null,o=!1){if((!e||e===kl)&&(e=ft),Hn(e)){const i=Lt(e,t,!0);return s&&wr(i,s),Zt>0&&!o&&Ie&&(i.shapeFlag&6?Ie[Ie.indexOf(e)]=i:Ie.push(i)),i.patchFlag=-2,i}if(gi(e)&&(e=e.__vccOpts),t){t=ti(t);let{class:i,style:a}=t;i&&!ue(i)&&(t.class=ce(i)),ne(a)&&(lr(a)&&!L(a)&&(a=_e({},a)),t.style=Nt(a))}const l=ue(e)?1:Nn(e)?128:fl(e)?64:ne(e)?4:R(e)?2:0;return c(e,t,s,r,n,l,o,!0)}function ti(e){return e?lr(e)||Sn(e)?_e({},e):e:null}function Lt(e,t,s=!1,r=!1){const{props:n,ref:o,patchFlag:l,children:i,transition:a}=e,g=t?ni(n||{},t):n,v={__v_isVNode:!0,__v_skip:!0,type:e.type,props:g,key:g&&qn(g),ref:t&&t.ref?s&&o?L(o)?o.concat(Os(t)):[o,Os(t)]:Os(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==we?l===-1?16:l|16:l,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:a,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Lt(e.ssContent),ssFallback:e.ssFallback&&Lt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return a&&r&&cr(v,a.clone(v)),v}function si(e=" ",t=0){return ie(Ps,null,e,t)}function ri(e,t){const s=ie(Is,null,e);return s.staticCount=t,s}function F(e="",t=!1){return t?($(),yr(ft,null,e)):ie(ft,null,e)}function Ge(e){return e==null||typeof e=="boolean"?ie(ft):L(e)?ie(we,null,e.slice()):Hn(e)?dt(e):ie(Ps,null,String(e))}function dt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Lt(e)}function wr(e,t){let s=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(L(t))s=16;else if(typeof t=="object")if(r&65){const n=t.default;n&&(n._c&&(n._d=!1),wr(e,n()),n._c&&(n._d=!0));return}else{s=32;const n=t._;!n&&!Sn(t)?t._ctx=Le:n===3&&Le&&(Le.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else R(t)?(t={default:t,_ctx:Le},s=32):(t=String(t),r&64?(s=16,t=[si(t)]):s=8);e.children=t,e.shapeFlag|=s}function ni(...e){const t={};for(let s=0;sxe||Le;let Ds,xr;{const e=ps(),t=(s,r)=>{let n;return(n=e[s])||(n=e[s]=[]),n.push(r),o=>{n.length>1?n.forEach(l=>l(o)):n[0](o)}};Ds=t("__VUE_INSTANCE_SETTERS__",s=>xe=s),xr=t("__VUE_SSR_SETTERS__",s=>ss=s)}const ts=e=>{const t=xe;return Ds(e),e.scope.on(),()=>{e.scope.off(),Ds(t)}},Wn=()=>{xe&&xe.scope.off(),Ds(null)};function Kn(e){return e.vnode.shapeFlag&4}let ss=!1;function ui(e,t=!1,s=!1){t&&xr(t);const{props:r,children:n}=e.vnode,o=Kn(e);Dl(e,r,o,t),Ul(e,n,s||t);const l=o?ci(e,t):void 0;return t&&xr(!1),l}function ci(e,t){const s=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Cl);const{setup:r}=s;if(r){He();const n=e.setupContext=r.length>1?di(e):null,o=ts(e),l=Pt(r,e,0,[e.props,n]),i=Ir(l);if(qe(),o(),(i||e.sp)&&!Jt(e)&&pn(e),i){if(l.then(Wn,Wn),t)return l.then(a=>{Gn(e,a)}).catch(a=>{xs(a,e,0)});e.asyncDep=l}else Gn(e,l)}else zn(e)}function Gn(e,t,s){R(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ne(t)&&(e.setupState=nn(t)),zn(e)}function zn(e,t,s){const r=e.type;e.render||(e.render=r.render||je);{const n=ts(e);He();try{Sl(e)}finally{qe(),n()}}}const fi={get(e,t){return ge(e,"get",""),e[t]}};function di(e){const t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.attrs,fi),slots:e.slots,emit:e.emit,expose:t}}function Ms(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(nn(Go(e.exposed)),{get(t,s){if(s in t)return t[s];if(s in Yt)return Yt[s](e)},has(t,s){return s in t||s in Yt}})):e.proxy}const pi=/(?:^|[-_])(\w)/g,hi=e=>e.replace(pi,t=>t.toUpperCase()).replace(/[-_]/g,"");function vi(e,t=!0){return R(e)?e.displayName||e.name:e.name||t&&e.__name}function Jn(e,t,s=!1){let r=vi(t);if(!r&&t.__file){const n=t.__file.match(/([^/\\]+)\.\w+$/);n&&(r=n[1])}if(!r&&e&&e.parent){const n=o=>{for(const l in o)if(o[l]===t)return l};r=n(e.components||e.parent.type.components)||n(e.appContext.components)}return r?hi(r):s?"App":"Anonymous"}function gi(e){return R(e)&&"__vccOpts"in e}const Oe=(e,t)=>Zo(e,t,ss),mi="3.5.18";/** * @vue/runtime-dom v3.5.18 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT **/let kr;const Yn=typeof window<"u"&&window.trustedTypes;if(Yn)try{kr=Yn.createPolicy("vue",{createHTML:e=>e})}catch{}const Qn=kr?e=>kr.createHTML(e):e=>e,_i="http://www.w3.org/2000/svg",bi="http://www.w3.org/1998/Math/MathML",rt=typeof document<"u"?document:null,Xn=rt&&rt.createElement("template"),yi={insert:(e,t,s)=>{t.insertBefore(e,s||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,s,r)=>{const n=t==="svg"?rt.createElementNS(_i,e):t==="mathml"?rt.createElementNS(bi,e):s?rt.createElement(e,{is:s}):rt.createElement(e);return e==="select"&&r&&r.multiple!=null&&n.setAttribute("multiple",r.multiple),n},createText:e=>rt.createTextNode(e),createComment:e=>rt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>rt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,s,r,n,o){const l=s?s.previousSibling:t.lastChild;if(n&&(n===o||n.nextSibling))for(;t.insertBefore(n.cloneNode(!0),s),!(n===o||!(n=n.nextSibling)););else{Xn.innerHTML=Qn(r==="svg"?`${e}`:r==="mathml"?`${e}`:e);const i=Xn.content;if(r==="svg"||r==="mathml"){const a=i.firstChild;for(;a.firstChild;)i.appendChild(a.firstChild);i.removeChild(a)}t.insertBefore(i,s)}return[l?l.nextSibling:t.firstChild,s?s.previousSibling:t.lastChild]}},wi=Symbol("_vtc");function xi(e,t,s){const r=e[wi];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const Vs=Symbol("_vod"),Zn=Symbol("_vsh"),Ls={beforeMount(e,{value:t},{transition:s}){e[Vs]=e.style.display==="none"?"":e.style.display,s&&t?s.beforeEnter(e):rs(e,t)},mounted(e,{value:t},{transition:s}){s&&t&&s.enter(e)},updated(e,{value:t,oldValue:s},{transition:r}){!t!=!s&&(r?t?(r.beforeEnter(e),rs(e,!0),r.enter(e)):r.leave(e,()=>{rs(e,!1)}):rs(e,t))},beforeUnmount(e,{value:t}){rs(e,t)}};function rs(e,t){e.style.display=t?e[Vs]:"none",e[Zn]=!t}const ki=Symbol(""),Ci=/(^|;)\s*display\s*:/;function Si(e,t,s){const r=e.style,n=ue(s);let o=!1;if(s&&!n){if(t)if(ue(t))for(const l of t.split(";")){const i=l.slice(0,l.indexOf(":")).trim();s[i]==null&&Us(r,i,"")}else for(const l in t)s[l]==null&&Us(r,l,"");for(const l in s)l==="display"&&(o=!0),Us(r,l,s[l])}else if(n){if(t!==s){const l=r[ki];l&&(s+=";"+l),r.cssText=s,o=Ci.test(s)}}else t&&e.removeAttribute("style");Vs in e&&(e[Vs]=o?r.display:"",e[Zn]&&(r.display="none"))}const eo=/\s*!important$/;function Us(e,t,s){if(L(s))s.forEach(r=>Us(e,t,r));else if(s==null&&(s=""),t.startsWith("--"))e.setProperty(t,s);else{const r=Ti(e,t);eo.test(s)?e.setProperty(mt(r),s.replace(eo,""),"important"):e[r]=s}}const to=["Webkit","Moz","ms"],Cr={};function Ti(e,t){const s=Cr[t];if(s)return s;let r=it(t);if(r!=="filter"&&r in e)return Cr[t]=r;r=Mr(r);for(let n=0;nSr||(Pi.then(()=>Sr=0),Sr=Date.now());function Oi(e,t){const s=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=s.attached)return;We(Di(r,s.value),t,5,[r])};return s.value=e,s.attached=Ii(),s}function Di(e,t){if(L(t)){const s=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{s.call(e),e._stopped=!0},t.map(r=>n=>!n._stopped&&r&&r(n))}else return t}const io=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Mi=(e,t,s,r,n,o)=>{const l=n==="svg";t==="class"?xi(e,r,l):t==="style"?Si(e,s,r):us(t)?js(t)||$i(e,t,s,r,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Vi(e,t,r,l))?(no(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&ro(e,t,r,l,o,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!ue(r))?no(e,it(t),r,o,t):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),ro(e,t,r,l))};function Vi(e,t,s,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&io(t)&&R(s));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const n=e.tagName;if(n==="IMG"||n==="VIDEO"||n==="CANVAS"||n==="SOURCE")return!1}return io(t)&&ue(s)?!1:t in e}const ao=e=>{const t=e.props["onUpdate:modelValue"]||!1;return L(t)?s=>ds(t,s):t};function Li(e){e.target.composing=!0}function uo(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Tr=Symbol("_assign"),de={created(e,{modifiers:{lazy:t,trim:s,number:r}},n){e[Tr]=ao(n);const o=r||n.props&&n.props.type==="number";Ut(e,t?"change":"input",l=>{if(l.target.composing)return;let i=e.value;s&&(i=i.trim()),o&&(i=Gs(i)),e[Tr](i)}),s&&Ut(e,"change",()=>{e.value=e.value.trim()}),t||(Ut(e,"compositionstart",Li),Ut(e,"compositionend",uo),Ut(e,"change",uo))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:s,modifiers:{lazy:r,trim:n,number:o}},l){if(e[Tr]=ao(l),e.composing)return;const i=(o||e.type==="number")&&!/^0\d/.test(e.value)?Gs(e.value):e.value,a=t??"";i!==a&&(document.activeElement===e&&e.type!=="range"&&(r&&t===s||n&&e.value.trim()===a)||(e.value=a))}},Ui=["ctrl","shift","alt","meta"],Ri={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Ui.some(s=>e[`${s}Key`]&&!t.includes(s))},pt=(e,t)=>{const s=e._withMods||(e._withMods={}),r=t.join(".");return s[r]||(s[r]=(n,...o)=>{for(let l=0;l{const t=Ni().createApp(...e),{mount:s}=t;return t.mount=r=>{const n=Hi(r);if(!n)return;const o=t._component;!R(o)&&!o.render&&!o.template&&(o.template=n.innerHTML),n.nodeType===1&&(n.textContent="");const l=s(n,!1,ji(n));return n instanceof Element&&(n.removeAttribute("v-cloak"),n.setAttribute("data-v-app","")),l},t};function ji(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Hi(e){return ue(e)?document.querySelector(e):e}const qi="https://das.doubanflix.com/api",Wi=1e4;class Ki{constructor(){this.baseURL=qi,this.timeout=Wi}addAuthHeaders(t={}){const s=localStorage.getItem("auth_token");return s&&(t.Authorization=`Bearer ${s}`),{"Content-Type":"application/json",...t}}async handleResponse(t){if(!t.ok){const s=await t.json().catch(()=>({}));switch(t.status){case 401:throw localStorage.removeItem("auth_token"),new Error("登录已过期,请重新登录");case 403:throw new Error("没有权限访问该资源");case 404:return{success:!1,error:"NOT_FOUND",status:404,message:"请求的资源不存在"};case 500:throw new Error("服务器内部错误");default:throw new Error(s.message||"请求失败")}}return t.json()}async request(t,s={}){const r=`${this.baseURL}${t}`,n={headers:this.addAuthHeaders(s.headers),...s};try{const o=new AbortController,l=setTimeout(()=>o.abort(),this.timeout),i=await fetch(r,{...n,signal:o.signal});return clearTimeout(l),await this.handleResponse(i)}catch(o){throw o.name==="AbortError"?new Error("请求超时,请检查网络连接"):o}}async get(t,s={}){const r=new URLSearchParams(s).toString(),n=r?`${t}?${r}`:t;return this.request(n,{method:"GET"})}async post(t,s={}){return this.request(t,{method:"POST",body:JSON.stringify(s)})}async put(t,s={}){return this.request(t,{method:"PUT",body:JSON.stringify(s)})}async delete(t){return this.request(t,{method:"DELETE"})}}const ae=new Ki,ke={getChallenge(){return ae.get("/auth/challenge")},register(e){return ae.post("/auth/register",e)},login(e){return ae.post("/auth/login",e)},verifyEmail(e){return ae.post("/auth/verify-email",e)},resendVerificationCode(e){return ae.post("/auth/resend-code",e)},getUserInfo(){return ae.get("/user/profile")},getCurrentUser(){return ae.get("/user/profile")},logout(){return ae.post("/auth/logout")},forgotPassword(e){return ae.post("/auth/forgot-password",e)},resetPassword(e){return ae.post("/auth/reset-password",e)}},De={getMovieLinks(e,t={}){return ae.get(`/movie/${e}/links`,t)},addMovieLink(e,t){return ae.post(`/movies/${e}/links`,t)},deleteMovieLink(e,t){return ae.delete(`/movies/${e}/links/${t}`)},voteLink(e,t){return ae.post(`/links/${e}/vote`,{vote_type:t})},removeVote(e){return Promise.resolve({success:!0,message:"取消投票成功"})},getLinkVoteStatus(e){return ae.get(`/links/${e}/vote-status`)},getUserVote(e){return ae.get(`/links/${e}/vote-status`)}},ns={getUserLinks(e={}){return ae.get("/user/links",e)},getUserLinksByCategory(){return ae.get("/user/links/category")},updateUserName(e){return ae.put("/user/name",e)},getAllUsers(){return ae.get("/admin/users")},banUser(e,t){return ae.put(`/admin/users/${e}/ban`,{reason:t})},unbanUser(e){return ae.put(`/admin/users/${e}/unban`)}};async function Gi(e){const t=new TextEncoder().encode(e),s=await crypto.subtle.digest("SHA-256",t);return Array.from(new Uint8Array(s)).map(o=>o.toString(16).padStart(2,"0")).join("")}function zi(e,t){return e.startsWith("0".repeat(t))}async function Rs(e,t,s=null){let r=0;const n=Date.now();for(;;){const o=e+r.toString(),l=await Gi(o);if(zi(l,t)){const a=Date.now()-n;return console.log(`工作量证明完成: nonce=${r}, 耗时=${a}ms, hash=${l}`),{challenge:e,nonce:r.toString(),hash:l}}r++,r%1e3===0&&(s&&s(r),await new Promise(i=>setTimeout(i,1)))}}const ve=j(null),ht=j(null),fe=j(!1),Y=j(""),Ji=Oe(()=>!!ve.value&&!!ht.value),Yi=Oe(()=>{var e;return((e=ve.value)==null?void 0:e.email)||""}),Qi=Oe(()=>{var e;return((e=ve.value)==null?void 0:e.id)||""}),z={user:ve,token:ht,loading:fe,error:Y,isAuthenticated:Ji,userEmail:Yi,userId:Qi,async initAuth(){try{fe.value=!0;const e=localStorage.getItem("auth_token");if(e){ht.value=e;try{const t=await ke.getCurrentUser();t&&t.data?ve.value=t.data:ve.value=t,Y.value=""}catch(t){console.error("获取用户信息失败:",t),(t.status===401||t.status===403)&&(localStorage.removeItem("auth_token"),ht.value=null,ve.value=null)}}}catch(e){console.error("初始化认证失败:",e),Y.value="初始化认证失败"}finally{fe.value=!1}},async signIn(e,t){try{fe.value=!0,Y.value="";const s=await ke.login({email:e,password:t});return ht.value=s.data.token,ve.value=s.data.user,localStorage.setItem("auth_token",s.data.token),{success:!0,user:s.data.user}}catch(s){return console.error("登录错误:",s),Y.value=s.message||"登录过程中发生错误",{success:!1,error:Y.value}}finally{fe.value=!1}},async signUp(e,t,s={}){try{fe.value=!0,Y.value="";const r=await ke.register({email:e,password:t,...s});return ht.value=r.token,ve.value=r.user,localStorage.setItem("auth_token",r.token),{success:!0,data:r}}catch(r){return console.error("注册错误:",r),Y.value=r.message||"注册过程中发生错误",{success:!1,error:Y.value}}finally{fe.value=!1}},async signUpWithProof(e,t){try{fe.value=!0,Y.value="";const s=await ke.getChallenge();if(!s.success)throw new Error(s.error||"获取挑战失败");const{challenge:r,difficulty:n}=s.data,o=await Rs(r,n,t),l={username:e.username,email:e.email,password:e.password,proof_of_work:{challenge:r,nonce:o.nonce,hash:o.hash}},i=await ke.register(l);return i.success?{success:!0,data:i.data}:{success:!1,error:i.error}}catch(s){return console.error("注册失败:",s),Y.value=s.message||"注册失败",{success:!1,error:Y.value}}finally{fe.value=!1}},async verifyEmail(e,t){try{fe.value=!0,Y.value="";const s={email:e,code:t},r=await ke.verifyEmail(s);return r.success?{success:!0,data:r.data}:{success:!1,error:r.error}}catch(s){return console.error("邮箱验证失败:",s),Y.value=s.message||"验证失败",{success:!1,error:Y.value}}finally{fe.value=!1}},async resendVerificationCode(e){try{fe.value=!0,Y.value="";const t=await ke.getChallenge();if(!t.success)throw new Error(t.error||"获取挑战失败");const{challenge:s,difficulty:r}=t.data,n=await Rs(s,r,onProgress),o={email:e,challenge:s,solution:n.nonce},l=await ke.resendVerificationCode(o);return l.success?{success:!0,data:l.data}:{success:!1,error:l.error}}catch(t){return console.error("重发验证码失败:",t),Y.value=t.message||"发送失败",{success:!1,error:Y.value}}finally{fe.value=!1}},async forgotPassword(e,t){try{fe.value=!0,Y.value="";const s=await ke.getChallenge();if(!s.success)throw new Error(s.error||"获取挑战失败");const{challenge:r,difficulty:n}=s.data,o=await Rs(r,n,t),l={email:e,proof_of_work:{challenge:r,nonce:o.nonce,hash:o.hash}},i=await ke.forgotPassword(l);return i.success?{success:!0,data:i.data}:{success:!1,error:i.message||i.error}}catch(s){return console.error("忘记密码失败:",s),Y.value=s.message||"发送失败",{success:!1,error:Y.value}}finally{fe.value=!1}},async resetPassword(e,t,s){try{fe.value=!0,Y.value="";const r=await ke.resetPassword({email:e,code:t,password:s});return r.success?{success:!0,data:r.data}:{success:!1,error:r.message||r.error}}catch(r){return console.error("重置密码失败:",r),Y.value=r.message||"重置失败",{success:!1,error:Y.value}}finally{fe.value=!1}},async signOut(){try{return fe.value=!0,Y.value="",localStorage.removeItem("auth_token"),ht.value=null,ve.value=null,{success:!0}}catch(e){return console.error("登出错误:",e),Y.value="登出过程中发生错误",localStorage.removeItem("auth_token"),ht.value=null,ve.value=null,{success:!1,error:Y.value}}finally{fe.value=!1}},clearError(){Y.value=""},hasPermission(e){return!!ve.value},getDisplayName(){var e;return ve.value?((e=ve.value.user_metadata)==null?void 0:e.full_name)||ve.value.email||"用户":"未登录"},getAvatarUrl(){var e;return ve.value&&((e=ve.value.user_metadata)==null?void 0:e.avatar_url)||null}};class Xi{async getUserProfile(t=null){try{let s=t;if(!s){const n=await ke.getCurrentUser();if(!n)return{success:!1,error:"用户未登录"};s=n.id}const r=await ns.getUserProfile(s);return r?{success:!0,data:r}:{success:!0,data:{user_id:s,nickname:null,avatar_url:null,bio:null}}}catch(s){return console.error("获取用户配置异常:",s),{success:!1,error:"获取用户配置失败"}}}async updateUserProfile(t){try{return await ke.getCurrentUser()?t.nickname&&t.nickname.length>50?{success:!1,error:"昵称长度不能超过50个字符"}:t.nickname&&!(await ns.checkNicknameAvailability(t.nickname)).available?{success:!1,error:"该昵称已被使用,请选择其他昵称"}:{success:!0,data:await ns.updateUserProfile(t),message:"用户配置更新成功"}:{success:!1,error:"用户未登录"}}catch(s){return console.error("更新用户配置异常:",s),{success:!1,error:"更新用户配置失败"}}}async getUserDisplayName(t,s="匿名用户"){var r;try{const n=await this.getUserProfile(t);return n.success&&((r=n.data)!=null&&r.nickname)?n.data.nickname:s||"匿名用户"}catch(n){return console.error("获取用户显示名称失败:",n),s||"匿名用户"}}async checkNicknameAvailability(t){try{return!t||t.trim().length===0?{success:!1,error:"昵称不能为空"}:t.length>50?{success:!1,error:"昵称长度不能超过50个字符"}:await ke.getCurrentUser()?{success:!0,available:(await ns.checkNicknameAvailability(t.trim())).available}:{success:!1,error:"用户未登录"}}catch(s){return console.error("检查昵称可用性失败:",s),{success:!1,error:"检查昵称可用性失败"}}}}const Zi=new Xi,vt=(e,t)=>{const s=e.__vccOpts||e;for(const[r,n]of t)s[r]=n;return s},ea={class:"auth-container"},ta={key:0,class:"user-info"},sa={class:"user-header"},ra={class:"user-avatar"},na={class:"user-details"},oa={class:"user-display-name"},la={key:0,class:"user-email"},ia={key:0,class:"nickname-edit-form"},aa={class:"form-group"},ua={class:"nickname-actions"},ca=["disabled"],fa={key:1,class:"auth-forms"},da={key:0,class:"auth-tabs"},pa={key:1,class:"back-button"},ha={class:"form-group"},va={class:"form-group"},ga=["disabled"],ma={class:"forgot-password-link"},_a={class:"form-group"},ba={class:"form-group"},ya={class:"form-group"},wa={class:"form-group"},xa={key:0,class:"proof-progress"},ka={class:"progress-bar"},Ca=["disabled"],Sa={class:"form-description"},Ta={class:"form-group"},Ea=["readonly"],$a={class:"form-group"},Aa=["disabled"],Pa={class:"resend-code"},Ia=["disabled"],Oa={class:"form-group"},Da={key:0,class:"proof-progress"},Ma={class:"progress-bar"},Va=["disabled"],La={class:"form-group"},Ua={class:"form-group"},Ra={class:"form-group"},Fa={class:"form-group"},Na=["disabled"],Ba={key:7,class:"error-message"},ja={key:8,class:"success-message"},Ha=vt({__name:"AuthComponent",setup(e){const t=j(null),s=j(null),r=j("login"),n=j(!1),o=j(""),l=j(""),i=j(!1),a=j({email:"",password:""});Ts(()=>{stopWatching&&stopWatching()});const g=j({email:"",password:"",confirmPassword:"",username:""}),v=j({email:"",code:""}),_=j({email:""}),m=j({email:"",code:"",password:"",confirmPassword:""}),y=j(!1),E=j(0),M=j(""),re=j({username:""});Dt(async()=>{await z.initAuth(),t.value=z.user.value,t.value&&await K(),Vt(()=>z.user.value,V=>{t.value=V,V?K():s.value=null},{immediate:!1})});const B=()=>{o.value="",l.value=""},K=async()=>{if(t.value)try{const V=await Zi.getUserProfile(t.value.id);V.success?s.value=V.data:console.error("加载用户资料失败:",V.error)}catch(V){console.error("加载用户资料失败:",V)}},H=()=>{var V;i.value=!i.value,i.value&&(re.value.username=((V=t.value)==null?void 0:V.username)||""),B()},I=async()=>{var V,x;if(t.value){B(),n.value=!0;try{const me=re.value.username.trim();if(!me){o.value="用户名不能为空";return}if(me.length<2||me.length>10){o.value="用户名长度必须在2-10个字符之间";return}const O=await ns.updateUserName({username:me});if(O.data.success){const Q={...t.value,...O.data.data};t.value=Q,z.user.value=Q,l.value=O.data.message||"用户名更新成功!",i.value=!1,await K()}else o.value=O.data.message||"更新用户名失败"}catch(me){console.error("更新用户名错误:",me),(x=(V=me.response)==null?void 0:V.data)!=null&&x.message?o.value=me.response.data.message:o.value="更新用户名失败,请稍后重试"}finally{n.value=!1}}},te=async()=>{B(),n.value=!0;try{const V=await z.signIn(a.value.email,a.value.password);V.success?(t.value=V.user,l.value="登录成功!",a.value={email:"",password:""},await K()):o.value=V.error||"登录失败,请检查邮箱和密码"}catch(V){o.value="登录过程中发生错误",console.error("登录错误:",V)}finally{n.value=!1}},Ue=async()=>{if(B(),g.value.password!==g.value.confirmPassword){o.value="两次输入的密码不一致";return}n.value=!0;try{const V=await z.signUpWithProof(g.value,x=>{y.value=!0,E.value=x});y.value=!1,E.value=0,V.success?(M.value=g.value.email,v.value.email=g.value.email,r.value="verify-email",l.value="注册成功!请查收邮件并验证邮箱",g.value={email:"",password:"",confirmPassword:"",username:""}):o.value=V.error||"注册失败,请稍后重试"}catch(V){y.value=!1,E.value=0,o.value="注册过程中发生错误",console.error("注册错误:",V)}finally{n.value=!1}},Ce=async()=>{B(),n.value=!0;try{const V=await z.verifyEmail(v.value.email,v.value.code);V.success?(l.value="邮箱验证成功!请登录",r.value="login",v.value={email:"",code:""},M.value=""):o.value=V.error||"验证失败,请重试"}catch(V){o.value="验证过程中发生错误",console.error("验证错误:",V)}finally{n.value=!1}},Re=async()=>{B(),n.value=!0;try{const V=v.value.email||M.value,x=await z.resendVerificationCode(V);x.success?l.value="验证码已重新发送,请查收邮件":o.value=x.error||"发送失败,请重试"}catch(V){o.value="发送过程中发生错误",console.error("重发验证码错误:",V)}finally{n.value=!1}},nt=async()=>{B(),n.value=!0;try{const V=await z.forgotPassword(_.value.email,x=>{y.value=!0,E.value=x});y.value=!1,E.value=0,V.success?(m.value.email=_.value.email,r.value="reset-password",l.value="重置码已发送,请查收邮件",_.value={email:""}):o.value=V.error||"发送失败,请重试"}catch(V){y.value=!1,E.value=0,o.value="发送过程中发生错误",console.error("忘记密码错误:",V)}finally{n.value=!1}},Te=async()=>{if(B(),m.value.password!==m.value.confirmPassword){o.value="两次输入的密码不一致";return}n.value=!0;try{const V=await z.resetPassword(m.value.email,m.value.code,m.value.password);V.success?(l.value="密码重置成功!请使用新密码登录",r.value="login",m.value={email:"",code:"",password:"",confirmPassword:""}):o.value=V.error||"重置失败,请重试"}catch(V){o.value="重置过程中发生错误",console.error("重置密码错误:",V)}finally{n.value=!1}},oe=()=>{r.value="login",B()},Ne=()=>{z.signOut(),l.value="已成功登出",t.value=null,s.value=null};return(V,x)=>{var me;return $(),P("div",ea,[t.value?($(),P("div",ta,[c("div",sa,[c("div",ra,[c("span",null,N((((me=s.value)==null?void 0:me.nickname)||t.value.email).charAt(0).toUpperCase()),1)]),c("div",na,[c("div",oa,N(t.value.username||t.value.email),1),t.value.username?($(),P("div",la,N(t.value.email),1)):F("",!0),x[17]||(x[17]=c("div",{class:"user-status"},"已登录",-1))]),c("button",{onClick:H,class:"edit-nickname-btn"},N(i.value?"取消":"编辑用户名"),1)]),i.value?($(),P("div",ia,[c("div",aa,[x[18]||(x[18]=c("label",null,"用户名",-1)),le(c("input",{"onUpdate:modelValue":x[0]||(x[0]=O=>re.value.username=O),type:"text",placeholder:"请输入用户名",class:"form-input",maxlength:"10"},null,512),[[de,re.value.username]]),x[19]||(x[19]=c("div",{class:"nickname-hint"},"用户名长度为2-10个字符",-1))]),c("div",ua,[c("button",{onClick:I,disabled:n.value,class:"save-nickname-btn"},N(n.value?"保存中...":"保存"),9,ca),c("button",{onClick:H,class:"cancel-nickname-btn"}," 取消 ")])])):F("",!0),c("button",{onClick:Ne,class:"sign-out-btn"}," 退出登录 ")])):($(),P("div",fa,[["verify-email","forgot-password","reset-password"].includes(r.value)?F("",!0):($(),P("div",da,[c("button",{class:ce(["auth-tab",{active:r.value==="login"}]),onClick:x[1]||(x[1]=O=>r.value="login")}," 登录 ",2),c("button",{class:ce(["auth-tab",{active:r.value==="register"}]),onClick:x[2]||(x[2]=O=>r.value="register")}," 注册 ",2)])),["verify-email","forgot-password","reset-password"].includes(r.value)?($(),P("div",pa,[c("button",{onClick:oe,class:"back-btn"}," ← 返回登录 ")])):F("",!0),r.value==="login"?($(),P("form",{key:2,onSubmit:pt(te,["prevent"]),class:"auth-form"},[c("div",ha,[x[20]||(x[20]=c("label",null,"邮箱",-1)),le(c("input",{"onUpdate:modelValue":x[3]||(x[3]=O=>a.value.email=O),type:"email",required:"",placeholder:"请输入邮箱",class:"form-input"},null,512),[[de,a.value.email]])]),c("div",va,[x[21]||(x[21]=c("label",null,"密码",-1)),le(c("input",{"onUpdate:modelValue":x[4]||(x[4]=O=>a.value.password=O),type:"password",required:"",placeholder:"请输入密码",class:"form-input"},null,512),[[de,a.value.password]])]),c("button",{type:"submit",disabled:n.value,class:"auth-submit-btn"},N(n.value?"登录中...":"登录"),9,ga),c("div",ma,[c("button",{type:"button",onClick:x[5]||(x[5]=O=>r.value="forgot-password"),class:"link-btn"}," 忘记密码? ")])],32)):F("",!0),r.value==="register"?($(),P("form",{key:3,onSubmit:pt(Ue,["prevent"]),class:"auth-form"},[c("div",_a,[x[22]||(x[22]=c("label",null,"用户名",-1)),le(c("input",{"onUpdate:modelValue":x[6]||(x[6]=O=>g.value.username=O),type:"text",required:"",placeholder:"请输入用户名(3-10个字符)",class:"form-input",minlength:"3",maxlength:"10"},null,512),[[de,g.value.username]])]),c("div",ba,[x[23]||(x[23]=c("label",null,"邮箱",-1)),le(c("input",{"onUpdate:modelValue":x[7]||(x[7]=O=>g.value.email=O),type:"email",required:"",placeholder:"请输入邮箱",class:"form-input"},null,512),[[de,g.value.email]])]),c("div",ya,[x[24]||(x[24]=c("label",null,"密码",-1)),le(c("input",{"onUpdate:modelValue":x[8]||(x[8]=O=>g.value.password=O),type:"password",required:"",placeholder:"请输入密码(至少6位)",class:"form-input",minlength:"6"},null,512),[[de,g.value.password]])]),c("div",wa,[x[25]||(x[25]=c("label",null,"确认密码",-1)),le(c("input",{"onUpdate:modelValue":x[9]||(x[9]=O=>g.value.confirmPassword=O),type:"password",required:"",placeholder:"请再次输入密码",class:"form-input"},null,512),[[de,g.value.confirmPassword]])]),y.value?($(),P("div",xa,[x[26]||(x[26]=c("div",{class:"progress-text"},"正在计算工作量证明...",-1)),c("div",ka,[c("div",{class:"progress-fill",style:Nt({width:Math.min(E.value/1e3,100)+"%"})},null,4)])])):F("",!0),c("button",{type:"submit",disabled:n.value||y.value,class:"auth-submit-btn"},N(y.value?"计算中...":n.value?"注册中...":"注册"),9,Ca)],32)):F("",!0),r.value==="verify-email"?($(),P("form",{key:4,onSubmit:pt(Ce,["prevent"]),class:"auth-form"},[x[29]||(x[29]=c("div",{class:"form-title"},"邮箱验证",-1)),c("div",Sa," 我们已向 "+N(M.value||v.value.email)+" 发送了验证码,请查收邮件并输入验证码。 ",1),c("div",Ta,[x[27]||(x[27]=c("label",null,"邮箱",-1)),le(c("input",{"onUpdate:modelValue":x[10]||(x[10]=O=>v.value.email=O),type:"email",required:"",placeholder:"请输入邮箱",class:"form-input",readonly:!!M.value},null,8,Ea),[[de,v.value.email]])]),c("div",$a,[x[28]||(x[28]=c("label",null,"验证码",-1)),le(c("input",{"onUpdate:modelValue":x[11]||(x[11]=O=>v.value.code=O),type:"text",required:"",placeholder:"请输入6位验证码",class:"form-input",maxlength:"6"},null,512),[[de,v.value.code]])]),c("button",{type:"submit",disabled:n.value,class:"auth-submit-btn"},N(n.value?"验证中...":"验证邮箱"),9,Aa),c("div",Pa,[c("button",{type:"button",onClick:Re,disabled:n.value,class:"link-btn"}," 重新发送验证码 ",8,Ia)])],32)):F("",!0),r.value==="forgot-password"?($(),P("form",{key:5,onSubmit:pt(nt,["prevent"]),class:"auth-form"},[x[32]||(x[32]=c("div",{class:"form-title"},"忘记密码",-1)),x[33]||(x[33]=c("div",{class:"form-description"}," 请输入您的邮箱地址,我们将向您发送重置密码的验证码。 ",-1)),c("div",Oa,[x[30]||(x[30]=c("label",null,"邮箱",-1)),le(c("input",{"onUpdate:modelValue":x[12]||(x[12]=O=>_.value.email=O),type:"email",required:"",placeholder:"请输入注册时使用的邮箱",class:"form-input"},null,512),[[de,_.value.email]])]),y.value?($(),P("div",Da,[x[31]||(x[31]=c("div",{class:"progress-text"},"正在计算工作量证明...",-1)),c("div",Ma,[c("div",{class:"progress-fill",style:Nt({width:Math.min(E.value/1e3,100)+"%"})},null,4)])])):F("",!0),c("button",{type:"submit",disabled:n.value||y.value,class:"auth-submit-btn"},N(y.value?"计算中...":n.value?"发送中...":"发送重置码"),9,Va)],32)):F("",!0),r.value==="reset-password"?($(),P("form",{key:6,onSubmit:pt(Te,["prevent"]),class:"auth-form"},[x[38]||(x[38]=c("div",{class:"form-title"},"重置密码",-1)),x[39]||(x[39]=c("div",{class:"form-description"}," 请输入您收到的验证码和新密码。 ",-1)),c("div",La,[x[34]||(x[34]=c("label",null,"邮箱",-1)),le(c("input",{"onUpdate:modelValue":x[13]||(x[13]=O=>m.value.email=O),type:"email",required:"",placeholder:"请输入邮箱",class:"form-input",readonly:""},null,512),[[de,m.value.email]])]),c("div",Ua,[x[35]||(x[35]=c("label",null,"验证码",-1)),le(c("input",{"onUpdate:modelValue":x[14]||(x[14]=O=>m.value.code=O),type:"text",required:"",placeholder:"请输入6位验证码",class:"form-input",maxlength:"6"},null,512),[[de,m.value.code]])]),c("div",Ra,[x[36]||(x[36]=c("label",null,"新密码",-1)),le(c("input",{"onUpdate:modelValue":x[15]||(x[15]=O=>m.value.password=O),type:"password",required:"",placeholder:"请输入新密码(至少6位)",class:"form-input",minlength:"6"},null,512),[[de,m.value.password]])]),c("div",Fa,[x[37]||(x[37]=c("label",null,"确认新密码",-1)),le(c("input",{"onUpdate:modelValue":x[16]||(x[16]=O=>m.value.confirmPassword=O),type:"password",required:"",placeholder:"请再次输入新密码",class:"form-input"},null,512),[[de,m.value.confirmPassword]])]),c("button",{type:"submit",disabled:n.value,class:"auth-submit-btn"},N(n.value?"重置中...":"重置密码"),9,Na)],32)):F("",!0),o.value?($(),P("div",Ba,N(o.value),1)):F("",!0),l.value?($(),P("div",ja,N(l.value),1)):F("",!0)]))])}}},[["__scopeId","data-v-680e5434"]]);class xt{static async getLinks(t,s={}){try{const r={},{linkType:n,platform:o,page:l=1,limit:i=5,sortBy:a="created_at",sortOrder:g="desc"}=s;l&&(r.page=l),i&&(r.limit=i),a&&(r.sort_by=a),g&&(r.sort_order=g),n&&(r.type=n==="bt"?"magnet":n),o&&(r.platform=o);const v=await De.getMovieLinks(t,r);if(v&&v.error==="NOT_FOUND"&&v.status===404)return{success:!0,data:[],pagination:{page:1,limit:5,total:0,pages:0},count:0,total:0};if(!v.success)throw console.error("获取链接失败:",v.error),new Error(`获取链接失败: ${v.error}`);const _=v.data||{};let m=_.links||[];const y=_.pagination||{};Array.isArray(m)||(console.warn("API返回的links不是数组格式:",m),m=[]);const E=m.map(M=>({...M,up_votes:M.likes_count||0,down_votes:M.dislikes_count||0,score:(M.likes_count||0)-(M.dislikes_count||0),user_vote_type:M.user_vote_type==="like"?"up":M.user_vote_type==="dislike"?"down":M.user_vote_type||"",user_display_name:M.username||"匿名用户"}));return{success:!0,data:E,pagination:y,count:E.length,total:y.total||0}}catch(r){return console.error("获取链接服务错误:",r),{success:!1,error:r.message||"获取链接失败",data:[],pagination:{page:1,limit:5,total:0,pages:0},count:0,total:0}}}static async addLink(t){try{const{movieId:s,linkType:r,platform:n,url:o,extractCode:l,title:i,quality:a,size:g,has_4k:v,has_hdr:_,has_dolby_atmos:m,has_subtitles:y}=t;if(!s||!r||!o)throw new Error("缺少必填字段:movieId, linkType, url");if(!["netdisk","bt","online"].includes(r))throw new Error("无效的链接类型");if(l&&l.length>10)throw new Error("提取码长度不能超过10个字符");const E=await ke.getChallenge();if(!E.success)throw new Error("获取工作量证明挑战失败");const{challenge:M,difficulty:re}=E.data,B=await Rs(M,re),K={title:i||"",url:o.trim(),type:r==="bt"?"magnet":r,password:l||"",quality:a||"",size:g||"",has_4k:!!v,has_hdr:!!_,has_dolby_atmos:!!m,has_subtitles:!!y,proof_of_work:B};r==="netdisk"&&n&&n.trim()&&(K.platform=n.trim());const H=await De.addMovieLink(s,K);if(!H.success)throw console.error("添加链接失败:",H.error),new Error(`添加链接失败: ${H.error}`);return{success:!0,data:H.data,message:"链接添加成功"}}catch(s){return console.error("添加链接服务错误:",s),{success:!1,error:s.message||"添加链接失败"}}}static async updateLink(t,s){try{if(!t)throw new Error("链接ID不能为空");if(!z.isAuthenticated.value)throw new Error("用户未登录");if(s.extractCode&&s.extractCode.length>10)throw new Error("提取码长度不能超过10个字符");const r=["platform","url","extract_code","title","quality","size","language"],n={};if(Object.keys(s).forEach(i=>{r.includes(i)&&s[i]!==void 0&&(n[i]=s[i])}),Object.keys(n).length===0)throw new Error("没有有效的更新字段");const o=await De.updateLink(t,n);if(!o.success)throw console.error("更新链接失败:",o.error),new Error(`更新链接失败: ${o.error}`);return{success:!0,data:o.data,message:"链接更新成功"}}catch(r){return console.error("更新链接服务错误:",r),{success:!1,error:r.message||"更新链接失败"}}}static async deleteLink(t){try{if(!t)throw new Error("链接ID不能为空");if(!z.isAuthenticated.value)throw new Error("用户未登录");const s=await De.deleteLink(t);if(!s.success)throw console.error("删除链接失败:",s.error),new Error(`删除链接失败: ${s.error}`);return{success:!0,message:"链接删除成功"}}catch(s){return console.error("删除链接服务错误:",s),{success:!1,error:s.message||"删除链接失败"}}}static async voteLink(t,s){try{if(!t||!s)throw new Error("链接ID和投票类型不能为空");if(!["up","down"].includes(s))throw new Error("无效的投票类型");if(!z.isAuthenticated.value)throw new Error("用户未登录");const r=s==="up"?"like":"dislike",n=await De.voteLink(t,r);if(!n.success)throw console.error("投票失败:",n.error),new Error(`投票失败: ${n.error}`);const o=n.data||{};return{success:!0,message:`${s==="up"?"点赞":"点踩"}成功`,data:{up_votes:o.likes_count||0,down_votes:o.dislikes_count||0,user_vote_type:o.user_vote_type==="like"?"up":o.user_vote_type==="dislike"?"down":null}}}catch(r){return console.error("投票服务错误:",r),{success:!1,error:r.message||"投票失败"}}}static async removeVote(t){try{if(!t)throw new Error("链接ID不能为空");if(!z.isAuthenticated.value)throw new Error("用户未登录");const s=await De.removeVote(t);if(!s.success)throw console.error("取消投票失败:",s.error),new Error(`取消投票失败: ${s.error}`);return{success:!0,message:"取消投票成功"}}catch(s){return console.error("取消投票服务错误:",s),{success:!1,error:s.message||"取消投票失败"}}}static async reportLink(t,s,r=""){try{if(!t||!s)throw new Error("链接ID和反馈原因不能为空");if(!z.isAuthenticated.value)throw new Error("用户未登录");const n={linkId:t,reason:s.trim(),description:r.trim()||null},o=await De.reportLink(n);if(!o.success)throw console.error("反馈失败:",o.error),new Error(`反馈失败: ${o.error}`);return{success:!0,data:o.data,message:"反馈提交成功"}}catch(n){return console.error("反馈服务错误:",n),{success:!1,error:n.message||"反馈失败"}}}static async getUserVote(t){try{if(!t)return{success:!0,data:null};if(!z.isAuthenticated.value)return{success:!0,data:null};const s=await De.getUserVote(t);if(!s.success)throw console.error("获取投票状态失败:",s.error),new Error(`获取投票状态失败: ${s.error}`);const r=s.data;let n=null;return(r==null?void 0:r.vote_type)==="like"?n="up":(r==null?void 0:r.vote_type)==="dislike"&&(n="down"),{success:!0,data:n}}catch(s){return console.error("获取投票状态服务错误:",s),{success:!1,error:s.message||"获取投票状态失败",data:null}}}static async getLinkStats(t){try{if(!t)throw new Error("电影ID不能为空");const s=await De.getLinkStats(t);if(!s.success)throw console.error("获取链接统计失败:",s.error),new Error(`获取链接统计失败: ${s.error}`);const r=s.data,n={total:r.length,netdisk:r.filter(o=>o.link_type==="netdisk").length,bt:r.filter(o=>o.link_type==="bt").length,online:r.filter(o=>o.link_type==="online").length,platforms:{}};return r.forEach(o=>{o.platform&&(n.platforms[o.platform]=(n.platforms[o.platform]||0)+1)}),{success:!0,data:n}}catch(s){return console.error("获取链接统计服务错误:",s),{success:!1,error:s.message||"获取链接统计失败",data:{total:0,netdisk:0,bt:0,online:0,platforms:{}}}}}static async getPendingLinks(t={}){try{const{status:s="pending",limit:r=50,offset:n=0}=t,o={status:s,limit:r,offset:n},l=await De.getPendingLinks(o);if(!l.success)throw new Error(l.error);return{success:!0,data:l.data||[]}}catch(s){return console.error("获取待审核链接服务错误:",s),{success:!1,error:s.message||"获取待审核链接失败",data:[]}}}static async moderateLink(t,s,r=""){try{if(!z.isAuthenticated.value)throw new Error("用户未登录");const n={action:s,reason:r},o=await De.moderateLink(t,n);if(!o.success)throw new Error(o.error);return{success:!0,data:o.data[0]}}catch(n){return console.error("审核链接服务错误:",n),{success:!1,error:n.message||"审核链接失败"}}}static async moderateLinksInBatch(t,s,r=""){try{if(!z.isAuthenticated.value)throw new Error("用户未登录");const n={linkIds:t,action:s,reason:r},o=await De.moderateLinksInBatch(n);if(!o.success)throw new Error(o.error);return{success:!0,data:o.data}}catch(n){return console.error("批量审核链接服务错误:",n),{success:!1,error:n.message||"批量审核链接失败"}}}}const qa="data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1756543843235'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='20280'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='200'%20height='200'%3e%3cpath%20d='M512%20330.666667c14.933333%200%2029.866667%204.266667%2040.533333%2014.933333l277.33333399%20234.666667c27.733333%2023.466667%2029.866667%2064%208.53333301%2089.6-23.466667%2027.733333-64%2029.866667-89.6%208.53333299L512%20477.866667l-236.8%20200.53333299c-27.733333%2023.466667-68.266667%2019.19999999-89.6-8.53333299-23.466667-27.733333-19.19999999-68.266667%208.53333301-89.6l277.33333399-234.666667c10.666667-10.666667%2025.6-14.933333%2040.533333-14.933333z'%20fill='currentColor'%20p-id='20281'%3e%3c/path%3e%3c/svg%3e",Wa={name:"CustomSelect",props:{modelValue:{type:[String,Number],default:""},options:{type:Array,required:!0,default:()=>[]},placeholder:{type:String,default:"请选择"}},emits:["update:modelValue","change"],data(){return{isOpen:!1}},computed:{selectedLabel(){const e=this.options.find(t=>t.value===this.modelValue);return e?e.label:""}},mounted(){document.addEventListener("click",this.closeDropdown)},beforeUnmount(){document.removeEventListener("click",this.closeDropdown)},methods:{toggleDropdown(){this.isOpen=!this.isOpen},selectOption(e){this.$emit("update:modelValue",e.value),this.$emit("change",e.value),this.isOpen=!1},closeDropdown(){this.isOpen=!1}}},Ka={class:"selected-text"},Ga={class:"select-dropdown"},za=["onClick"];function Ja(e,t,s,r,n,o){return $(),P("div",{class:ce(["custom-select",{"is-open":n.isOpen}]),onClick:t[1]||(t[1]=pt(()=>{},["stop"]))},[c("div",{class:"select-trigger",onClick:t[0]||(t[0]=(...l)=>o.toggleDropdown&&o.toggleDropdown(...l))},[c("span",Ka,N(o.selectedLabel||s.placeholder),1),c("img",{src:qa,class:ce(["arrow",{"arrow-up":n.isOpen}]),alt:"箭头"},null,2)]),le(c("div",Ga,[($(!0),P(we,null,fr(s.options,l=>($(),P("div",{class:ce(["select-option",{selected:l.value===s.modelValue}]),key:l.value,onClick:i=>o.selectOption(l)},N(l.label),11,za))),128))],512),[[Ls,n.isOpen]])],2)}const os=vt(Wa,[["render",Ja],["__scopeId","data-v-411df2ed"]]),Ya={name:"LinkItemSkeleton"},Qa={class:"link-item skeleton"};function Xa(e,t,s,r,n,o){return $(),P("div",Qa,t[0]||(t[0]=[ri('',2)]))}const Za=vt(Ya,[["render",Xa],["__scopeId","data-v-115afd35"]]),eu=["checked"],tu={key:0,class:"checkbox-label"},Fs=vt({__name:"CheckBox",props:{modelValue:{type:Boolean,default:!1},label:{type:String,default:""},color:{type:String,default:"blue",validator:e=>["blue","green","purple","red"].includes(e)}},emits:["update:modelValue"],setup(e){return(t,s)=>($(),P("label",{class:ce(["ios-checkbox",e.color])},[c("input",{type:"checkbox",checked:e.modelValue,onChange:s[0]||(s[0]=r=>t.$emit("update:modelValue",r.target.checked))},null,40,eu),s[1]||(s[1]=c("div",{class:"checkbox-wrapper"},[c("div",{class:"checkbox-bg"}),c("svg",{fill:"none",viewBox:"0 0 24 24",class:"checkbox-icon"},[c("path",{"stroke-linejoin":"round","stroke-linecap":"round","stroke-width":"3",stroke:"currentColor",d:"M4 12L10 18L20 6",class:"check-path"})])],-1)),e.label?($(),P("span",tu,N(e.label),1)):F("",!0)],2))}},[["__scopeId","data-v-77ac6b2a"]]),su={class:"link-manager"},ru={key:0,class:"modal-overlay"},nu={class:"modal-content"},ou={class:"modal-body"},lu={class:"form-row"},iu={class:"form-group"},au={key:0,class:"form-group"},uu={class:"form-group"},cu={class:"input-wrapper"},fu={class:"form-row"},du={key:0,class:"form-group"},pu={class:"input-wrapper"},hu={class:"form-group"},vu={class:"input-wrapper"},gu={class:"form-row"},mu={class:"form-group"},_u={class:"checkbox-group"},bu={class:"form-actions"},yu=["disabled"],wu={class:"links-section"},xu={class:"filter-bar"},ku={class:"filter-controls"},Cu=["disabled"],Su={key:0,class:"links-list"},Tu={key:1,class:"links-list"},Eu={class:"link-header"},$u={key:0,class:"platform-badge"},Au=["src","alt"],Pu={class:"link-meta"},Iu={key:0,class:"language"},Ou={key:1,class:"feature-tags"},Du={key:0,class:"feature-tag"},Mu={key:1,class:"feature-tag"},Vu={key:2,class:"feature-tag"},Lu={key:3,class:"feature-tag"},Uu={class:"link-content"},Ru=["onClick"],Fu={class:"link-details"},Nu={key:0,class:"extract-code"},Bu=["onClick"],ju={class:"link-url"},Hu=["href"],qu=["onClick"],Wu={class:"link-actions"},Ku={class:"vote-section"},Gu=["onClick","disabled"],zu=["onClick","disabled"],Ju={class:"score"},Yu={class:"action-buttons"},Qu=["onClick"],Xu=["onClick"],Zu=["onClick"],ec={class:"link-footer"},tc={class:"author"},sc={class:"date"},rc={key:0,class:"report-count"},nc={key:2,class:"empty-state"},oc={key:1,class:"pagination"},lc=["disabled"],ic={class:"pagination-info"},ac=["disabled"],uc={class:"toast-container"},cc={key:0,class:"modal-overlay"},fc={class:"modal-content"},dc={class:"modal-body"},pc={class:"form-group"},hc={class:"form-group"},vc={class:"input-wrapper"},gc={class:"form-actions"},mc=["disabled"],ls="doubanflix_link_draft",_c=vt({__name:"LinkManager",props:{movieId:{type:String,required:!0},linkType:{type:String,default:"all"}},setup(e){const t=e,s=Oe(()=>t.linkType),r=j([]),n=j({total:0,netdisk:0,bt:0,online:0,platforms:{}}),o=j(!1),l=j(""),i=j(""),a=j(!1),g=j(!1),v=j(new Set),_=j({page:1,limit:5,total:0,pages:0}),m=$t({linkType:"",platform:"",url:"",extractCode:"",title:"",has_4k:!1,has_hdr:!1,has_dolby_atmos:!1,has_subtitles:!1}),y=$t({platform:"",sortBy:"created_at"}),E=[{value:"",label:"请选择类型"},{value:"netdisk",label:"网盘"},{value:"bt",label:"BT"},{value:"online",label:"在线"}],M=[{value:"",label:"请选择平台"},{value:"quark",label:"夸克网盘"},{value:"aliyun",label:"阿里云盘"},{value:"baidu",label:"百度网盘"},{value:"tianyi",label:"天翼云盘"},{value:"yidong",label:"移动云盘"}],re=[{value:"created_at",label:"按时间排序"},{value:"likes_count",label:"按点赞数排序"},{value:"like_rate",label:"按点赞率排序"}],B=Oe(()=>{switch(m.linkType){case"netdisk":return M;default:return[{value:"",label:"请选择平台"}]}}),K=Oe(()=>{const p=[{value:"",label:"所有平台"}];switch(t.linkType){case"netdisk":return p.concat([{value:"quark",label:"夸克"},{value:"aliyun",label:"阿里"},{value:"baidu",label:"百度"},{value:"tianyi",label:"天翼"},{value:"yidong",label:"移动"}]);default:return p}}),H=Oe(()=>z.isAuthenticated.value),I=async(p=1)=>{if(t.movieId){o.value=!0,l.value="";try{const d=t.linkType==="all"?void 0:t.linkType,f=await xt.getLinks(t.movieId,{linkType:d,platform:y.platform||void 0,sortBy:y.sortBy,sortOrder:"desc",page:p,limit:_.value.limit});f.success?(r.value=f.data,f.pagination&&(_.value={page:f.pagination.page||1,limit:f.pagination.limit||5,total:f.pagination.total||0,pages:f.pagination.pages||0})):l.value=f.error}catch(d){l.value="加载链接失败",console.error("加载链接错误:",d)}finally{o.value=!1}}},te=async()=>{if(t.movieId)try{const p=await xt.getLinkStats(t.movieId);p.success&&(n.value=p.data)}catch(p){console.error("加载统计失败:",p)}},Ue=async()=>{if(!H.value){l.value="请先登录";return}g.value=!0,l.value="";try{const p=await xt.addLink({movieId:t.movieId,linkType:m.linkType,platform:m.platform,url:m.url,extractCode:m.extractCode,title:m.title,has_4k:m.has_4k,has_hdr:m.has_hdr,has_dolby_atmos:m.has_dolby_atmos,has_subtitles:m.has_subtitles});p.success?(i.value=p.message,nt(),ot(),a.value=!1,await I(),await te(),setTimeout(()=>{i.value=""},3e3)):l.value=p.error}catch(p){l.value="添加链接失败",console.error("添加链接错误:",p)}finally{g.value=!1}},Ce=async(p,d)=>{if(!H.value){l.value="请先登录";return}const f=r.value.find(k=>k.id===p);if(!f)return;const b=f.user_vote_type,T=f.up_votes||0,C=f.down_votes||0,S=f.score||0;let w=T,A=C;if(f.user_vote_type===d)f.user_vote_type=null,d==="up"?w=Math.max(0,T-1):A=Math.max(0,C-1);else{const k=f.user_vote_type;f.user_vote_type=d,k==="up"?w=Math.max(0,T-1):k==="down"&&(A=Math.max(0,C-1)),d==="up"?w=w+1:A=A+1}f.up_votes=w,f.down_votes=A,f.score=w-A;try{let k;b===d?k=await xt.removeVote(p):k=await xt.voteLink(p,d),k.success?k.data&&(f.up_votes=k.data.up_votes,f.down_votes=k.data.down_votes,f.score=f.up_votes-f.down_votes,f.user_vote_type=k.data.user_vote_type||null):(f.user_vote_type=b,f.up_votes=T,f.down_votes=C,f.score=S,l.value=k.error)}catch(k){f.user_vote_type=b,f.up_votes=T,f.down_votes=C,f.score=S,l.value="投票失败",console.error("投票错误:",k)}},Re=async p=>{if(confirm("确定要删除这个链接吗?"))try{const d=await xt.deleteLink(p);d.success?(i.value=d.message,await I(),await te(),setTimeout(()=>{i.value=""},3e3)):l.value=d.error}catch(d){l.value="删除链接失败",console.error("删除链接错误:",d)}},nt=()=>{Object.assign(m,{linkType:"",platform:"",url:"",extractCode:"",title:"",has_4k:!1,has_hdr:!1,has_dolby_atmos:!1,has_subtitles:!1})},Te=j(!1),oe=$t({linkId:"",reason:"",description:""}),Ne=j(!1),V=[{value:"链接失效",label:"链接失效"},{value:"内容不符",label:"内容不符"},{value:"重复链接",label:"重复链接"},{value:"恶意链接",label:"恶意链接"},{value:"版权问题",label:"版权问题"},{value:"其他",label:"其他"}],x=p=>{if(!H.value){l.value="请先登录";return}oe.linkId=p,oe.reason="链接失效",oe.description="",Te.value=!0},me=async()=>{if(!oe.reason){l.value="请选择反馈原因";return}Ne.value=!0,l.value="";try{const p=await xt.reportLink(oe.linkId,oe.reason,oe.description);p.success?(i.value=p.message,Te.value=!1,await I(),setTimeout(()=>{i.value=""},3e3)):l.value=p.error}catch(p){l.value="反馈提交失败",console.error("反馈错误:",p)}finally{Ne.value=!1}},O=()=>{Te.value=!1,oe.linkId="",oe.reason="",oe.description=""},Q=()=>{const p={linkType:m.linkType,platform:m.platform,url:m.url,extractCode:m.extractCode,title:m.title,language:m.language,has_4k:m.has_4k,has_hdr:m.has_hdr,has_dolby_atmos:m.has_dolby_atmos,has_subtitles:m.has_subtitles,timestamp:Date.now()};Object.values(p).some(f=>f&&f!==""&&typeof f!="number")&&localStorage.setItem(ls,JSON.stringify(p))},X=()=>{try{const p=localStorage.getItem(ls);if(p){const d=JSON.parse(p);if(Date.now()-d.timestamp>24*60*60*1e3)localStorage.removeItem(ls);else return Object.assign(m,{linkType:d.linkType||"",platform:d.platform||"",url:d.url||"",extractCode:d.extractCode||"",title:d.title||"",language:d.language||"",has_4k:d.has_4k||!1,has_hdr:d.has_hdr||!1,has_dolby_atmos:d.has_dolby_atmos||!1,has_subtitles:d.has_subtitles||!1}),!0}}catch(p){console.error("恢复草稿失败:",p),localStorage.removeItem(ls)}return!1},ot=()=>{localStorage.removeItem(ls)},Rt=()=>{a.value=!0,X()&&console.log("已恢复草稿内容")},Je=()=>{Q(),a.value=!1,nt()},Ee=p=>H.value&&z.userId.value===p.user_id,Ns=p=>({quark:"夸克",aliyun:"阿里",baidu:"百度",tianyi:"天翼",yidong:"移动",bilibili:"B站",iqiyi:"爱奇艺",youku:"优酷",tencent:"腾讯",bt:"磁力"})[p]||p,Er=p=>{const d={quark:"data:image/svg+xml;base64,"+btoa(''),aliyun:"data:image/svg+xml;base64,"+btoa(''),baidu:"data:image/svg+xml;base64,"+btoa(''),tianyi:"data:image/svg+xml;base64,"+btoa(''),yidong:"data:image/svg+xml;base64,"+btoa('')};return d[p]||d.quark},$r=p=>p.length>50?p.substring(0,47)+"...":p,kt=p=>{const d=new Date(p);return d.toLocaleDateString("zh-CN")+" "+d.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"})},Ct=async p=>{try{await navigator.clipboard.writeText(p),i.value="已复制到剪贴板",setTimeout(()=>{i.value=""},2e3)}catch(d){console.error("复制失败:",d),l.value="复制失败"}},is=p=>{v.value.has(p)?v.value.delete(p):v.value.add(p)},gt=p=>v.value.has(p),Be=()=>{v.value.clear()};Vt(()=>t.movieId,p=>{p&&(Be(),I(),te())},{immediate:!0}),Vt(()=>t.linkType,()=>{Be(),y.platform="",_.value.page=1,t.movieId&&I()});const Ar=p=>{p>=1&&p<=_.value.pages&&(Be(),I(p))},u=()=>{_.value.page>1&&Ar(_.value.page-1)},h=()=>{_.value.page<_.value.pages&&Ar(_.value.page+1)};return Dt(()=>{t.movieId&&(I(),te())}),(p,d)=>($(),P(we,null,[c("div",su,[a.value?($(),P("div",ru,[c("div",nu,[c("div",{class:"modal-header"},[d[18]||(d[18]=c("h4",null,"添加新链接",-1)),c("button",{class:"close-btn",onClick:Je},"×")]),c("div",ou,[c("form",{onSubmit:pt(Ue,["prevent"])},[c("div",lu,[c("div",iu,[d[19]||(d[19]=c("label",null,"链接类型 *",-1)),ie(os,{modelValue:m.linkType,"onUpdate:modelValue":d[0]||(d[0]=f=>m.linkType=f),options:E,placeholder:"请选择类型",onChange:d[1]||(d[1]=f=>m.platform="")},null,8,["modelValue"])]),m.linkType==="netdisk"?($(),P("div",au,[d[20]||(d[20]=c("label",null,"平台",-1)),ie(os,{modelValue:m.platform,"onUpdate:modelValue":d[2]||(d[2]=f=>m.platform=f),options:B.value,placeholder:"请选择平台"},null,8,["modelValue","options"])])):F("",!0)]),c("div",uu,[d[21]||(d[21]=c("label",null,"链接地址 *",-1)),c("div",cu,[le(c("input",{type:"url","onUpdate:modelValue":d[3]||(d[3]=f=>m.url=f),placeholder:"请输入完整的链接地址",required:""},null,512),[[de,m.url]])])]),c("div",fu,[m.linkType==="netdisk"?($(),P("div",du,[d[22]||(d[22]=c("label",null,"提取码",-1)),c("div",pu,[le(c("input",{type:"text","onUpdate:modelValue":d[4]||(d[4]=f=>m.extractCode=f),placeholder:"如有提取码请填写",maxlength:"10"},null,512),[[de,m.extractCode]])])])):F("",!0),c("div",hu,[d[23]||(d[23]=c("label",null,"标题描述",-1)),c("div",vu,[le(c("input",{type:"text","onUpdate:modelValue":d[5]||(d[5]=f=>m.title=f),placeholder:"简短描述这个链接"},null,512),[[de,m.title]])])])]),c("div",gu,[c("div",mu,[d[24]||(d[24]=c("label",null,"特性标签",-1)),c("div",_u,[ie(Fs,{modelValue:m.has_4k,"onUpdate:modelValue":d[6]||(d[6]=f=>m.has_4k=f),label:"4K画质",color:"blue"},null,8,["modelValue"]),ie(Fs,{modelValue:m.has_hdr,"onUpdate:modelValue":d[7]||(d[7]=f=>m.has_hdr=f),label:"HDR",color:"green"},null,8,["modelValue"]),ie(Fs,{modelValue:m.has_dolby_atmos,"onUpdate:modelValue":d[8]||(d[8]=f=>m.has_dolby_atmos=f),label:"杜比全景声",color:"purple"},null,8,["modelValue"]),ie(Fs,{modelValue:m.has_subtitles,"onUpdate:modelValue":d[9]||(d[9]=f=>m.has_subtitles=f),label:"包含字幕",color:"red"},null,8,["modelValue"])])])]),c("div",bu,[c("button",{type:"submit",disabled:g.value},N(g.value?"添加中...":"添加链接"),9,yu),c("button",{type:"button",onClick:Je},"取消")])],32)])])])):F("",!0),c("div",wu,[c("div",xu,[c("div",ku,[s.value==="netdisk"?($(),yr(os,{key:0,modelValue:y.platform,"onUpdate:modelValue":d[10]||(d[10]=f=>y.platform=f),options:K.value,placeholder:"所有平台",onChange:d[11]||(d[11]=()=>{Be(),I()})},null,8,["modelValue","options"])):F("",!0),ie(os,{modelValue:y.sortBy,"onUpdate:modelValue":d[12]||(d[12]=f=>y.sortBy=f),options:re,placeholder:"按时间排序",onChange:d[13]||(d[13]=()=>{Be(),I()})},null,8,["modelValue"])]),c("button",{class:"add-link-btn-compact",onClick:Rt,disabled:!H.value,title:"添加链接"},d[25]||(d[25]=[c("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"currentColor"},[c("path",{d:"M8 1a.5.5 0 0 1 .5.5v6h6a.5.5 0 0 1 0 1h-6v6a.5.5 0 0 1-1 0v-6h-6a.5.5 0 0 1 0-1h6v-6A.5.5 0 0 1 8 1z"})],-1)]),8,Cu)]),o.value?($(),P("div",Su,[($(),P(we,null,fr(3,f=>ie(Za,{key:"skeleton-"+f})),64))])):r.value.length>0?($(),P("div",Tu,[($(!0),P(we,null,fr(r.value,f=>($(),P("div",{class:"link-item",key:f.id},[c("div",Eu,[f.platform&&t.linkType!=="bt"&&t.linkType!=="online"?($(),P("div",$u,[c("img",{src:Er(f.platform),alt:Ns(f.platform),class:"platform-icon"},null,8,Au)])):F("",!0),c("div",Pu,[f.language?($(),P("span",Iu,N(f.language),1)):F("",!0),f.has_4k||f.has_hdr||f.has_dolby_atmos||f.has_subtitles?($(),P("div",Ou,[f.has_4k?($(),P("span",Du,"4K")):F("",!0),f.has_hdr?($(),P("span",Mu,"HDR")):F("",!0),f.has_dolby_atmos?($(),P("span",Vu,"杜比全景声")):F("",!0),f.has_subtitles?($(),P("span",Lu,"字幕")):F("",!0)])):F("",!0)])]),c("div",Uu,[c("div",{class:"link-title-row",onClick:b=>is(f.id)},[f.title?($(),P("div",{key:0,class:ce(["link-title",{expanded:gt(f.id)}])},N(f.title),3)):F("",!0),c("div",{class:ce(["expand-arrow",{expanded:gt(f.id)}])},d[26]||(d[26]=[c("svg",{viewBox:"0 0 1024 1024",width:"16",height:"16"},[c("path",{d:"M512 330.666667c14.933333 0 29.866667 4.266667 40.533333 14.933333l277.33333399 234.666667c27.733333 23.466667 29.866667 64 8.53333301 89.6-23.466667 27.733333-64 29.866667-89.6 8.53333299L512 477.866667l-236.8 200.53333299c-27.733333 23.466667-68.266667 19.19999999-89.6-8.53333299-23.466667-27.733333-19.19999999-68.266667 8.53333301-89.6l277.33333399-234.666667c10.666667-10.666667 25.6-14.933333 40.533333-14.933333z",fill:"currentColor"})],-1)]),2)],8,Ru),le(c("div",Fu,[f.password?($(),P("div",Nu,[d[27]||(d[27]=c("span",null,"提取码: ",-1)),c("code",null,N(f.password),1),c("button",{class:"copy-btn",onClick:b=>Ct(f.password),title:"复制提取码"}," 📋 ",8,Bu)])):F("",!0),c("div",ju,[c("a",{href:f.url,target:"_blank",rel:"noopener noreferrer"},N($r(f.url)),9,Hu),c("button",{class:"copy-btn",onClick:b=>Ct(f.url),title:"复制链接"}," 📋 ",8,qu)])],512),[[Ls,gt(f.id)]])]),le(c("div",Wu,[c("div",Ku,[c("button",{class:ce(["vote-btn up",{active:f.user_vote_type==="up"}]),onClick:b=>Ce(f.id,"up"),disabled:!H.value}," 👍 "+N(f.up_votes||0),11,Gu),c("button",{class:ce(["vote-btn down",{active:f.user_vote_type==="down"}]),onClick:b=>Ce(f.id,"down"),disabled:!H.value}," 👎 "+N(f.down_votes||0),11,zu),c("span",Ju,"评分: "+N(f.score||0),1)]),c("div",Yu,[Ee(f)?($(),P("button",{key:0,class:"edit-btn",onClick:b=>p.startEdit(f)}," 编辑 ",8,Qu)):F("",!0),Ee(f)?($(),P("button",{key:1,class:"delete-btn",onClick:b=>Re(f.id)}," 删除 ",8,Xu)):F("",!0),!Ee(f)&&H.value?($(),P("button",{key:2,class:"report-btn",onClick:b=>x(f.id)}," 反馈 ",8,Zu)):F("",!0)])],512),[[Ls,gt(f.id)]]),le(c("div",ec,[c("span",tc,"by "+N(f.user_display_name||"匿名用户"),1),c("span",sc,N(kt(f.created_at)),1),f.report_count>0?($(),P("span",rc," 被反馈 "+N(f.report_count)+" 次 ",1)):F("",!0)],512),[[Ls,gt(f.id)]])]))),128))])):!o.value&&r.value.length===0?($(),P("div",nc,d[28]||(d[28]=[c("p",null,"暂无链接,成为第一个添加链接的人吧!",-1)]))):F("",!0)]),_.value.pages>1&&!o.value?($(),P("div",oc,[c("button",{class:"pagination-btn",disabled:_.value.page<=1,onClick:u}," 上一页 ",8,lc),c("span",ic,N(_.value.page)+" / "+N(_.value.pages),1),c("button",{class:"pagination-btn",disabled:_.value.page>=_.value.pages,onClick:h}," 下一页 ",8,ac)])):F("",!0),c("div",uc,[l.value?($(),P("div",{key:0,class:"toast error-toast",onClick:d[14]||(d[14]=f=>l.value="")},[c("span",null,N(l.value),1),d[29]||(d[29]=c("button",{class:"toast-close"},"×",-1))])):F("",!0),i.value?($(),P("div",{key:1,class:"toast success-toast",onClick:d[15]||(d[15]=f=>i.value="")},[c("span",null,N(i.value),1),d[30]||(d[30]=c("button",{class:"toast-close"},"×",-1))])):F("",!0)])]),Te.value?($(),P("div",cc,[c("div",fc,[c("div",{class:"modal-header"},[d[31]||(d[31]=c("h4",null,"反馈链接",-1)),c("button",{class:"close-btn",onClick:O},"×")]),c("div",dc,[c("form",{onSubmit:pt(me,["prevent"])},[c("div",pc,[d[32]||(d[32]=c("label",{for:"report-reason"},"反馈原因 *",-1)),ie(os,{id:"report-reason",modelValue:oe.reason,"onUpdate:modelValue":d[16]||(d[16]=f=>oe.reason=f),options:V,placeholder:"请选择反馈原因",required:""},null,8,["modelValue"])]),c("div",hc,[d[33]||(d[33]=c("label",{for:"report-description"},"详细描述",-1)),c("div",vc,[le(c("input",{id:"report-description","onUpdate:modelValue":d[17]||(d[17]=f=>oe.description=f),placeholder:"请详细描述反馈原因(可选)",rows:"4"},null,512),[[de,oe.description]])])]),c("div",gc,[c("button",{type:"submit",disabled:Ne.value||!oe.reason},N(Ne.value?"提交中...":"提交反馈"),9,mc),c("button",{type:"button",onClick:O}," 取消 ")])],32)])])])):F("",!0)],64))}},[["__scopeId","data-v-adb0c426"]]),bc={class:"content-wrapper"},yc={class:"navigation-bar"},wc={class:"tab-content"},xc={key:0,class:"tab-panel"},kc={key:1,class:"no-subject"},Cc={key:1,class:"tab-panel"},Sc=vt({__name:"WindowContent",setup(e){const t=j("links"),s=j("netdisk"),r=j(""),n=j({title:"",year:"",rating:""}),o=(i,a=null)=>{t.value=i,i==="links"&&a&&(s.value=a)},l=()=>{try{const a=window.location.href.match(/\/subject\/(\d+)\/?/);a&&(r.value=a[1],console.log("检测到豆瓣电影ID:",r.value));const g=document.querySelector('h1 span[property="v:itemreviewed"]')||document.querySelector("h1 span")||document.querySelector("h1");g&&(n.value.title=g.textContent.trim());const v=document.querySelector(".year")||document.querySelector("span.year");if(v){const m=v.textContent.match(/(\d{4})/);m&&(n.value.year=m[1])}const _=document.querySelector(".rating_num")||document.querySelector('[property="v:average"]');_&&(n.value.rating=_.textContent.trim()),console.log("获取到的电影信息:",n.value)}catch(i){console.error("获取豆瓣电影信息失败:",i)}};return Dt(()=>{l(),new MutationObserver(()=>{window.location.href.includes("/subject/")&&setTimeout(l,500)}).observe(document.body,{childList:!0,subtree:!0})}),(i,a)=>($(),P("div",bc,[c("div",yc,[c("button",{class:ce(["nav-btn",{active:t.value==="links"&&s.value==="netdisk"}]),onClick:a[0]||(a[0]=g=>o("links","netdisk"))}," 💾 网盘 ",2),c("button",{class:ce(["nav-btn",{active:t.value==="links"&&s.value==="bt"}]),onClick:a[1]||(a[1]=g=>o("links","bt"))}," 🧲 BT ",2),c("button",{class:ce(["nav-btn",{active:t.value==="links"&&s.value==="online"}]),onClick:a[2]||(a[2]=g=>o("links","online"))}," 📺 在线 ",2),c("button",{class:ce(["nav-btn",{active:t.value==="user"}]),onClick:a[3]||(a[3]=g=>o("user"))}," 👤 用户 ",2)]),c("div",wc,[t.value==="links"?($(),P("div",xc,[r.value?($(),yr(_c,{key:0,"movie-id":r.value,"link-type":s.value},null,8,["movie-id","link-type"])):($(),P("div",kc,a[4]||(a[4]=[c("p",null,"未检测到豆瓣电影页面,请在豆瓣电影详情页使用此功能。",-1),c("p",{class:"hint"},"支持的页面格式:https://movie.douban.com/subject/[ID]/",-1)])))])):F("",!0),t.value==="user"?($(),P("div",Cc,[ie(Ha)])):F("",!0)])]))}},[["__scopeId","data-v-2fb0e09c"]]),Tc={key:0,class:"debug-panel"},Ec={class:"debug-content"},$c={class:"debug-section"},Ac={class:"status-item"},Pc={class:"status-item"},Ic={class:"value"},Oc={class:"status-item"},Dc={class:"value token"},Mc={class:"status-item"},Vc={class:"value token"},Lc={class:"status-item"},Uc={class:"debug-section"},Rc={key:0,class:"test-result"},Fc={class:"debug-section"},Nc={class:"headers-preview"},Bc=vt({__name:"DebugPanel",setup(e){const t=j(!1),s=j(""),r=j(""),n=Oe(()=>z.isAuthenticated.value),o=Oe(()=>z.token.value),l=Oe(()=>z.user.value?`${z.user.value.email} (ID: ${z.user.value.id})`:"无用户信息"),i=Oe(()=>{const y=o.value,E=s.value;return y&&E&&y===E}),a=Oe(()=>{const y=s.value;return JSON.stringify(y?{Authorization:`Bearer ${y.substring(0,20)}...`,"Content-Type":"application/json"}:{"Content-Type":"application/json"},null,2)}),g=()=>{t.value=!t.value,t.value&&v()},v=()=>{s.value=localStorage.getItem("auth_token")||"",console.log("Token状态刷新:",{memory:o.value,localStorage:s.value,match:i.value})},_=async()=>{try{r.value="测试中...";const y=await De.getLinks();r.value=JSON.stringify({success:!0,dataLength:(y==null?void 0:y.length)||0,message:"请求成功"},null,2)}catch(y){r.value=JSON.stringify({success:!1,error:y.message,status:y.status||"unknown"},null,2)}},m=()=>{localStorage.removeItem("auth_token"),z.token.value=null,z.user.value=null,v(),r.value="",console.log("所有Token已清除")};return Dt(()=>{v(),window.addEventListener("storage",y=>{y.key==="auth_token"&&v()})}),(y,E)=>($(),P(we,null,[t.value?($(),P("div",Tc,[c("div",{class:"debug-header"},[E[0]||(E[0]=c("h3",null,"🔧 调试面板",-1)),c("button",{onClick:g,class:"close-btn"},"×")]),c("div",Ec,[c("div",$c,[E[6]||(E[6]=c("h4",null,"认证状态",-1)),c("div",Ac,[E[1]||(E[1]=c("span",{class:"label"},"登录状态:",-1)),c("span",{class:ce(["status",n.value?"success":"error"])},N(n.value?"已登录":"未登录"),3)]),c("div",Pc,[E[2]||(E[2]=c("span",{class:"label"},"用户信息:",-1)),c("span",Ic,N(l.value),1)]),c("div",Oc,[E[3]||(E[3]=c("span",{class:"label"},"Token (内存):",-1)),c("span",Dc,N(o.value||"无"),1)]),c("div",Mc,[E[4]||(E[4]=c("span",{class:"label"},"Token (localStorage):",-1)),c("span",Vc,N(s.value||"无"),1)]),c("div",Lc,[E[5]||(E[5]=c("span",{class:"label"},"Token匹配:",-1)),c("span",{class:ce(["status",i.value?"success":"error"])},N(i.value?"匹配":"不匹配"),3)])]),c("div",Uc,[E[8]||(E[8]=c("h4",null,"测试操作",-1)),c("div",{class:"button-group"},[c("button",{onClick:v,class:"debug-btn"},"刷新Token状态"),c("button",{onClick:_,class:"debug-btn"},"测试API请求"),c("button",{onClick:m,class:"debug-btn danger"},"清除所有Token")]),r.value?($(),P("div",Rc,[E[7]||(E[7]=c("h5",null,"API测试结果:",-1)),c("pre",null,N(r.value),1)])):F("",!0)]),c("div",Fc,[E[9]||(E[9]=c("h4",null,"请求头预览",-1)),c("div",Nc,[c("code",null,N(a.value),1)])])])])):F("",!0),t.value?F("",!0):($(),P("div",{key:1,class:"debug-toggle",onClick:g}," 🔧 "))],64))}},[["__scopeId","data-v-7f68f54d"]]),jc={key:0,class:"custom-window"},Hc={class:"window-content"},qc={class:"window-header"},Wc={class:"window-title"},Kc=vt({__name:"App",setup(e){const t=j(!0),s=j("DoubanFlix"),r=()=>{t.value=!t.value,t.value&&ar(()=>{n()})},n=()=>{let i=document.querySelector(".aside")||document.querySelector("#aside")||document.querySelector(".sidebar")||document.querySelector("#sidebar")||document.querySelector(".right-col")||document.querySelector(".side-panel");i||(i=document.querySelector("#content .article")||document.querySelector(".grid-16-8 .aside")||document.querySelector('[class*="aside"]')||document.querySelector('[class*="side"]')),i||(i=document.createElement("div"),i.className="douban-movie-aside",i.style.cssText=` position: fixed; top: 100px; right: 20px; width: 400px; z-index: 9999; `,document.body.appendChild(i));const a=document.querySelector(".custom-window");a&&i&&a.parentNode!==i&&(i.firstChild?i.insertBefore(a,i.firstChild):i.appendChild(a),console.log("窗口已插入到第一个位置:",i.className||i.tagName))},o=()=>{t.value=!1},l=()=>{r()};return Dt(async()=>{await z.initAuth(),window.addEventListener("toggle-window",l),ar(()=>{n()})}),Ts(()=>{window.removeEventListener("toggle-window",l)}),(i,a)=>($(),P(we,null,[t.value?($(),P("div",jc,[c("div",Hc,[ie(Sc)]),c("div",qc,[c("span",Wc,N(s.value),1),c("button",{class:"close-btn",onClick:o},"×")])])):F("",!0),ie(Bc)],64))}},[["__scopeId","data-v-0af292b5"]]);function fo(){const e=document.querySelectorAll("h1"),t=document.querySelector(".article");t&&e.length>0&&e.forEach(n=>{t.insertBefore(n,t.firstChild)});const s=document.createElement("div");s.id="bilibili-custom-window",document.body.appendChild(s),Bi(Kc).mount("#bilibili-custom-window")}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",fo):fo()})()})();