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