Archived
chore: 提交 React 前端构建产物(app.js 330KB / auth.js 38KB / app.css 56KB)
为什么:部署不经 node 构建(dockerignore 排除了源码),服务端 直接读 dist/index.html 与 /assets,因此构建产物必须入库; 文件名经 vite 固定(无内容 hash),golden 契约才能跨构建成立。 gzip 后 app.js 97KB / auth.js 12KB / app.css 11KB。
This commit is contained in:
1 parent
8803444755
commit
58853abd3c
6 files changed
+88
No files matched your search
Vendored
+1
@@ -0,0 +1 @@
|
||||
:root{--color-primary: #1677ff;--color-primary-hover: #4096ff;--color-primary-active: #0958d9;--color-primary-bg: rgba(22, 119, 255, .1);--color-success: #52c41a;--color-warning: #faad14;--color-error: #ff4d4f;--color-text: rgba(0, 0, 0, .88);--color-text-secondary: rgba(0, 0, 0, .45);--color-text-tertiary: rgba(0, 0, 0, .25);--color-border: #d9d9d9;--color-border-split: rgba(5, 5, 5, .06);--color-bg-layout: #f0f2f5;--color-bg-container: #ffffff;--color-bg-elevated: #ffffff;--color-bg-subtle: #f5f6f8;--color-bg-hover: rgba(0, 0, 0, .03);--color-fill: rgba(0, 0, 0, .04);--ease-out: cubic-bezier(.22, 1, .36, 1);--color-shadow: 0 1px 2px rgba(15, 23, 42, .04), 0 2px 8px rgba(15, 23, 42, .04);--color-shadow-heavy: 0 2px 4px rgba(15, 23, 42, .03), 0 12px 32px -8px rgba(15, 23, 42, .12), 0 32px 64px -24px rgba(15, 23, 42, .1);--player-bg: linear-gradient(135deg, #2a2a35, #1c1c26);--player-text: #ffffff;--vip-green: #52c41a;--color-bg-header: rgba(255, 255, 255, .82)}html.dark{--color-primary: #1668dc;--color-primary-hover: #3c89e8;--color-primary-active: #1554ad;--color-primary-bg: rgba(22, 104, 220, .2);--color-text: rgba(255, 255, 255, .85);--color-text-secondary: rgba(255, 255, 255, .45);--color-text-tertiary: rgba(255, 255, 255, .25);--color-border: #424242;--color-border-split: rgba(253, 253, 253, .12);--color-bg-layout: #000000;--color-bg-container: #141414;--color-bg-elevated: #1f1f1f;--color-bg-subtle: #1c1c20;--color-bg-hover: rgba(255, 255, 255, .08);--color-fill: rgba(255, 255, 255, .12);--ease-out: cubic-bezier(.22, 1, .36, 1);--color-shadow: 0 1px 2px rgba(0, 0, 0, .4), 0 2px 8px rgba(0, 0, 0, .3);--color-shadow-heavy: 0 2px 4px rgba(0, 0, 0, .4), 0 12px 32px -8px rgba(0, 0, 0, .55), 0 32px 64px -24px rgba(0, 0, 0, .45);--color-bg-header: rgba(20, 20, 20, .82)}*{box-sizing:border-box}body{background-color:var(--color-bg-layout);color:var(--color-text);margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;font-size:14px;line-height:1.5715;-webkit-font-smoothing:antialiased;min-height:100vh;display:flex;flex-direction:column}a{color:var(--color-primary);text-decoration:none}a:hover{color:var(--color-primary-hover)}.app-header{background:var(--color-bg-container);background:var(--color-bg-header);backdrop-filter:blur(14px) saturate(1.6);-webkit-backdrop-filter:blur(14px) saturate(1.6);box-shadow:var(--color-shadow);position:sticky;top:0;z-index:100}.app-header-inner{max-width:1250px;margin:0 auto;padding:0 24px;height:64px;display:flex;align-items:center;justify-content:space-between}.brand{display:flex;align-items:center;gap:12px;cursor:pointer;-webkit-user-select:none;user-select:none}.brand-logo{width:36px;height:36px;border-radius:10px;background:linear-gradient(135deg,#f5576c,#ec4141);color:#fff;font-size:20px;display:flex;align-items:center;justify-content:center;flex:none;box-shadow:0 2px 6px #ec414159}.brand-title{font-size:17px;font-weight:600;color:var(--color-text)}.brand-sub{font-size:12px;color:var(--color-text-secondary)}.header-actions{display:flex;align-items:center;gap:10px}.icon-btn{border:1px solid var(--color-border);background:var(--color-bg-container);color:var(--color-text);border-radius:8px;height:34px;padding:0 12px;font-size:14px;cursor:pointer;display:inline-flex;align-items:center;gap:6px;transition:all .2s}.icon-btn:hover{border-color:var(--color-primary);color:var(--color-primary)}.main-container{width:100%;max-width:1250px;margin:0 auto;padding:24px;flex:1}.card{background:var(--color-bg-container);border-radius:12px;box-shadow:var(--color-shadow);padding:24px;margin-bottom:24px}.card-title{font-size:16px;font-weight:600;margin-bottom:16px;display:flex;align-items:center;justify-content:space-between}.card-title .count{font-size:13px;font-weight:400;color:var(--color-text-secondary)}.tabs{display:flex;border-bottom:1px solid var(--color-border-split);margin-bottom:20px;overflow-x:auto}.tab{padding:12px 0;margin-right:32px;font-size:15px;color:var(--color-text-secondary);cursor:pointer;white-space:nowrap;position:relative;transition:color .2s}.tab:hover{color:var(--color-primary)}.tab.active{color:var(--color-primary);font-weight:500}.tab:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--color-primary);border-radius:2px;transform:scaleX(0);opacity:0;transition:transform .28s cubic-bezier(.4,0,.2,1),opacity .2s}.tab.active:after{transform:scaleX(1);opacity:1}.panel{display:none}.panel.active{display:block}.global-quality-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding-bottom:16px;border-bottom:1px solid var(--color-border-split)}.gq-label{font-size:14px;font-weight:500;display:inline-flex;align-items:center;gap:6px;color:var(--color-text)}.gq-hint{font-size:12px;color:var(--color-text-tertiary)}.input-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.input-row>.input{flex:1;min-width:220px}.inLine truncated
|
||||
Vendored
+54
@@ -0,0 +1,54 @@
|
||||
(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))r(a);new MutationObserver(a=>{for(const o of a)if(o.type==="childList")for(const f of o.addedNodes)f.tagName==="LINK"&&f.rel==="modulepreload"&&r(f)}).observe(document,{childList:!0,subtree:!0});function n(a){const o={};return a.integrity&&(o.integrity=a.integrity),a.referrerPolicy&&(o.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?o.credentials="include":a.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(a){if(a.ep)return;a.ep=!0;const o=n(a);fetch(a.href,o)}})();var Uu={exports:{}},gs={},Hu={exports:{}},Q={};/**
|
||||
* @license React
|
||||
* react.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/var Xr=Symbol.for("react.element"),Yp=Symbol.for("react.portal"),Xp=Symbol.for("react.fragment"),Zp=Symbol.for("react.strict_mode"),Jp=Symbol.for("react.profiler"),em=Symbol.for("react.provider"),tm=Symbol.for("react.context"),nm=Symbol.for("react.forward_ref"),rm=Symbol.for("react.suspense"),im=Symbol.for("react.memo"),sm=Symbol.for("react.lazy"),Lc=Symbol.iterator;function am(e){return e===null||typeof e!="object"?null:(e=Lc&&e[Lc]||e["@@iterator"],typeof e=="function"?e:null)}var Bu={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},qu=Object.assign,$u={};function Jn(e,t,n){this.props=e,this.context=t,this.refs=$u,this.updater=n||Bu}Jn.prototype.isReactComponent={};Jn.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};Jn.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Vu(){}Vu.prototype=Jn.prototype;function Ml(e,t,n){this.props=e,this.context=t,this.refs=$u,this.updater=n||Bu}var zl=Ml.prototype=new Vu;zl.constructor=Ml;qu(zl,Jn.prototype);zl.isPureReactComponent=!0;var Tc=Array.isArray,Qu=Object.prototype.hasOwnProperty,Al={current:null},Wu={key:!0,ref:!0,__self:!0,__source:!0};function Gu(e,t,n){var r,a={},o=null,f=null;if(t!=null)for(r in t.ref!==void 0&&(f=t.ref),t.key!==void 0&&(o=""+t.key),t)Qu.call(t,r)&&!Wu.hasOwnProperty(r)&&(a[r]=t[r]);var p=arguments.length-2;if(p===1)a.children=n;else if(1<p){for(var h=Array(p),g=0;g<p;g++)h[g]=arguments[g+2];a.children=h}if(e&&e.defaultProps)for(r in p=e.defaultProps,p)a[r]===void 0&&(a[r]=p[r]);return{$$typeof:Xr,type:e,key:o,ref:f,props:a,_owner:Al.current}}function lm(e,t){return{$$typeof:Xr,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}function Rl(e){return typeof e=="object"&&e!==null&&e.$$typeof===Xr}function om(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(n){return t[n]})}var Pc=/\/+/g;function ca(e,t){return typeof e=="object"&&e!==null&&e.key!=null?om(""+e.key):t.toString(36)}function zi(e,t,n,r,a){var o=typeof e;(o==="undefined"||o==="boolean")&&(e=null);var f=!1;if(e===null)f=!0;else switch(o){case"string":case"number":f=!0;break;case"object":switch(e.$$typeof){case Xr:case Yp:f=!0}}if(f)return f=e,a=a(f),e=r===""?"."+ca(f,0):r,Tc(a)?(n="",e!=null&&(n=e.replace(Pc,"$&/")+"/"),zi(a,t,n,"",function(g){return g})):a!=null&&(Rl(a)&&(a=lm(a,n+(!a.key||f&&f.key===a.key?"":(""+a.key).replace(Pc,"$&/")+"/")+e)),t.push(a)),1;if(f=0,r=r===""?".":r+":",Tc(e))for(var p=0;p<e.length;p++){o=e[p];var h=r+ca(o,p);f+=zi(o,t,n,h,a)}else if(h=am(e),typeof h=="function")for(e=h.call(e),p=0;!(o=e.next()).done;)o=o.value,h=r+ca(o,p++),f+=zi(o,t,n,h,a);else if(o==="object")throw t=String(e),Error("Objects are not valid as a React child (found: "+(t==="[object Object]"?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return f}function gi(e,t,n){if(e==null)return e;var r=[],a=0;return zi(e,r,"","",function(o){return t.call(n,o,a++)}),r}function cm(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(n){(e._status===0||e._status===-1)&&(e._status=1,e._result=n)},function(n){(e._status===0||e._status===-1)&&(e._status=2,e._result=n)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var _e={current:null},Ai={transition:null},um={ReactCurrentDispatcher:_e,ReactCurrentBatchConfig:Ai,ReactCurrentOwner:Al};function Ku(){throw Error("act(...) is not supported in production builds of React.")}Q.Children={map:gi,forEach:function(e,t,n){gi(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return gi(e,function(){t++}),t},toArray:function(e){return gi(e,function(t){return t})||[]},only:function(e){if(!Rl(e))throw Error("React.Children.only expected to receive a single React element child.");return e}};Q.Component=Jn;Q.Fragment=Xp;Q.Profiler=Jp;Q.PureComponent=Ml;Q.StrictMode=Zp;Q.Suspense=rm;Q.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=um;Q.act=Ku;Q.cloneElement=function(e,t,n){if(e==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var r=qu({},e.props),a=e.key,o=e.ref,f=e._owner;if(t!=null){if(t.ref!==void 0&&(o=t.ref,f=Al.current),t.key!==void 0&&(a=""+t.key),e.type&&e.type.defaultProps)var p=e.type.defaultProps;for(h in t)Qu.call(t,h)&&!Wu.hasOwnProperty(h)&&(r[h]=t[h]===void 0&&p!==void 0?p[h]:t[h])}var h=arguments.length-2;if(h===1)r.children=n;else if(1<h){p=Array(h);for(var g=0;g<h;g++)p[g]=arguments[g+2];r.children=p}return{$$typeof:Xr,type:e.type,key:a,ref:o,props:r,_owner:f}};Q.createContext=function(e){return e={$$typeof:tm,_currentValue:e,_currentValue2:e,_threadCount:0,ProviderLine truncated
|
||||
* @license React
|
||||
* react-jsx-runtime.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/var dm=Mr,fm=Symbol.for("react.element"),pm=Symbol.for("react.fragment"),mm=Object.prototype.hasOwnProperty,hm=dm.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,vm={key:!0,ref:!0,__self:!0,__source:!0};function Yu(e,t,n){var r,a={},o=null,f=null;n!==void 0&&(o=""+n),t.key!==void 0&&(o=""+t.key),t.ref!==void 0&&(f=t.ref);for(r in t)mm.call(t,r)&&!vm.hasOwnProperty(r)&&(a[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps,t)a[r]===void 0&&(a[r]=t[r]);return{$$typeof:fm,type:e,key:o,ref:f,props:a,_owner:hm.current}}gs.Fragment=pm;gs.jsx=Yu;gs.jsxs=Yu;Uu.exports=gs;var i=Uu.exports,Oa={},Xu={exports:{}},Be={},Zu={exports:{}},Ju={};/**
|
||||
* @license React
|
||||
* scheduler.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/(function(e){function t(A,H){var q=A.length;A.push(H);e:for(;0<q;){var Z=q-1>>>1,G=A[Z];if(0<a(G,H))A[Z]=H,A[q]=G,q=Z;else break e}}function n(A){return A.length===0?null:A[0]}function r(A){if(A.length===0)return null;var H=A[0],q=A.pop();if(q!==H){A[0]=q;e:for(var Z=0,G=A.length,we=G>>>1;Z<we;){var Ze=2*(Z+1)-1,j=A[Ze],at=Ze+1,je=A[at];if(0>a(j,q))at<G&&0>a(je,j)?(A[Z]=je,A[at]=q,Z=at):(A[Z]=j,A[Ze]=q,Z=Ze);else if(at<G&&0>a(je,q))A[Z]=je,A[at]=q,Z=at;else break e}}return H}function a(A,H){var q=A.sortIndex-H.sortIndex;return q!==0?q:A.id-H.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var f=Date,p=f.now();e.unstable_now=function(){return f.now()-p}}var h=[],g=[],E=1,N=null,b=3,P=!1,I=!1,M=!1,Y=typeof setTimeout=="function"?setTimeout:null,x=typeof clearTimeout=="function"?clearTimeout:null,v=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function w(A){for(var H=n(g);H!==null;){if(H.callback===null)r(g);else if(H.startTime<=A)r(g),H.sortIndex=H.expirationTime,t(h,H);else break;H=n(g)}}function _(A){if(M=!1,w(A),!I)if(n(h)!==null)I=!0,tn(z);else{var H=n(g);H!==null&&Tt(_,H.startTime-A)}}function z(A,H){I=!1,M&&(M=!1,x(F),F=-1),P=!0;var q=b;try{for(w(H),N=n(h);N!==null&&(!(N.expirationTime>H)||A&&!fe());){var Z=N.callback;if(typeof Z=="function"){N.callback=null,b=N.priorityLevel;var G=Z(N.expirationTime<=H);H=e.unstable_now(),typeof G=="function"?N.callback=G:N===n(h)&&r(h),w(H)}else r(h);N=n(h)}if(N!==null)var we=!0;else{var Ze=n(g);Ze!==null&&Tt(_,Ze.startTime-H),we=!1}return we}finally{N=null,b=q,P=!1}}var D=!1,O=null,F=-1,te=5,$=-1;function fe(){return!(e.unstable_now()-$<te)}function _t(){if(O!==null){var A=e.unstable_now();$=A;var H=!0;try{H=O(!0,A)}finally{H?Te():(D=!1,O=null)}}else D=!1}var Te;if(typeof v=="function")Te=function(){v(_t)};else if(typeof MessageChannel<"u"){var Lt=new MessageChannel,Ms=Lt.port2;Lt.port1.onmessage=_t,Te=function(){Ms.postMessage(null)}}else Te=function(){Y(_t,0)};function tn(A){O=A,D||(D=!0,Te())}function Tt(A,H){F=Y(function(){A(e.unstable_now())},H)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(A){A.callback=null},e.unstable_continueExecution=function(){I||P||(I=!0,tn(z))},e.unstable_forceFrameRate=function(A){0>A||125<A?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):te=0<A?Math.floor(1e3/A):5},e.unstable_getCurrentPriorityLevel=function(){return b},e.unstable_getFirstCallbackNode=function(){return n(h)},e.unstable_next=function(A){switch(b){case 1:case 2:case 3:var H=3;break;default:H=b}var q=b;b=H;try{return A()}finally{b=q}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=function(){},e.unstable_runWithPriority=function(A,H){switch(A){case 1:case 2:case 3:case 4:case 5:break;default:A=3}var q=b;b=A;try{return H()}finally{b=q}},e.unstable_scheduleCallback=function(A,H,q){var Z=e.unstable_now();switch(typeof q=="object"&&q!==null?(q=q.delay,q=typeof q=="number"&&0<q?Z+q:Z):q=Z,A){case 1:var G=-1;break;case 2:G=250;break;case 5:G=1073741823;break;case 4:G=1e4;break;default:G=5e3}return G=q+G,A={id:E++,callback:H,priorityLevel:A,startTime:q,expirationTime:G,sortIndex:-1},q>Z?(A.sortIndex=q,t(g,A),n(h)===null&&A===n(g)&&(M?(x(F),F=-1):M=!0,Tt(_,q-Z))):(A.sortIndex=G,t(h,A),I||P||(I=!0,tn(z))),A},e.unstable_shouldYield=fe,e.unstable_wrapCallback=function(A){var H=b;return function(){var q=b;b=H;try{return A.apply(this,arguments)}finally{b=q}}}})(Ju);Zu.exports=Ju;var gm=Zu.exports;/**
|
||||
* @license React
|
||||
* react-dom.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/var ym=Mr,He=gm;function L(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var ed=new Set,zr={};function wn(e,t){Qn(e,t),Qn(e+"Capture",t)}function Qn(e,t){for(zr[e]=t,e=0;e<t.length;e++)ed.add(t[e])}var bt=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Da=Object.prototype.hasOwnProperty,xm=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Ic={},Mc={};function wm(e){return Da.call(Mc,e)?!0:Da.call(Ic,e)?!1:xm.test(e)?Mc[e]=!0:(Ic[e]=!0,!1)}function jm(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function km(e,t,n,r){if(t===null||typeof t>"u"||jm(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Le(e,t,n,r,a,o,f){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=a,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=f}var xe={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){xe[e]=new Le(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];xe[t]=new Le(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){xe[e]=new Le(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){xe[e]=new Le(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){xe[e]=new Le(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){xe[e]=new Le(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){xe[e]=new Le(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){xe[e]=new Le(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){xe[e]=new Le(e,5,!1,e.toLowerCase(),null,!1,!1)});var Ol=/[\-:]([a-z])/g;function Dl(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Ol,Dl);xe[t]=new Le(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Ol,Dl);xe[t]=new Le(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Ol,Dl);xe[t]=new Le(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){xe[e]=new Le(e,1,!1,e.toLowerCase(),null,!1,!1)});xe.xlinkHref=new Le("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){xe[e]=new Le(e,1,!1,e.toLowerCase(),null,!0,!0)});function Fl(e,t,n,r){var a=xe.hasOwnProperty(t)?xe[t]:null;(a!==null?a.type!==0:r||!(2<t.length)||t[0]!=="o"&&t[0]!==
Line truncated
|
||||
`+ua+e}var da=!1;function fa(e,t){if(!e||da)return"";da=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(t,[])}catch(g){var r=g}Reflect.construct(e,[],t)}else{try{t.call()}catch(g){r=g}e.call(t.prototype)}else{try{throw Error()}catch(g){r=g}e()}}catch(g){if(g&&r&&typeof g.stack=="string"){for(var a=g.stack.split(`
|
||||
`),o=r.stack.split(`
|
||||
`),f=a.length-1,p=o.length-1;1<=f&&0<=p&&a[f]!==o[p];)p--;for(;1<=f&&0<=p;f--,p--)if(a[f]!==o[p]){if(f!==1||p!==1)do if(f--,p--,0>p||a[f]!==o[p]){var h=`
|
||||
`+a[f].replace(" at new "," at ");return e.displayName&&h.includes("<anonymous>")&&(h=h.replace("<anonymous>",e.displayName)),h}while(1<=f&&0<=p);break}}}finally{da=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?wr(e):""}function bm(e){switch(e.tag){case 5:return wr(e.type);case 16:return wr("Lazy");case 13:return wr("Suspense");case 19:return wr("SuspenseList");case 0:case 2:case 15:return e=fa(e.type,!1),e;case 11:return e=fa(e.type.render,!1),e;case 1:return e=fa(e.type,!0),e;default:return""}}function Ba(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case _n:return"Fragment";case Cn:return"Portal";case Fa:return"Profiler";case Ul:return"StrictMode";case Ua:return"Suspense";case Ha:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case nd:return(e.displayName||"Context")+".Consumer";case td:return(e._context.displayName||"Context")+".Provider";case Hl:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Bl:return t=e.displayName||null,t!==null?t:Ba(e.type)||"Memo";case zt:t=e._payload,e=e._init;try{return Ba(e(t))}catch{}}return null}function Nm(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Ba(t);case 8:return t===Ul?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function Yt(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function id(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Sm(e){var t=id(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var a=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return a.call(this)},set:function(f){r=""+f,o.call(this,f)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(f){r=""+f},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function xi(e){e._valueTracker||(e._valueTracker=Sm(e))}function sd(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=id(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Wi(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function qa(e,t){var n=t.checked;return se({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Ac(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=Yt(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function ad(e,t){t=t.checked,t!=null&&Fl(e,"checked",t,!1)}function $a(e,t){ad(e,t);var n=Yt(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Va(e,t.type,n):t.hasOwnProperty("defaultValue")&&Va(e,t.type,Yt(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Rc(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function Va(e,t,n){(t!=="number"||Wi(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var jr=Array.isArray;function Fn(e,t,n,r){if(e=e.options,t){t={};for(var a=0;a<n.length;a++)t["$"+n[a]]=!0;for(n=0;n<e.length;n++)a=t.hasOwnProperty("$"+e[n].value),e[n].selected!==a&&(e[n].selected=a),a&&r&&(e[n].defaultSelected=!0)}else{for(n=""+Yt(n),t=null,a=0;a<e.length;a++){if(e[a].value===n){e[a].selected=!0,r&&(e[a].defaultSelected=!0);return}t!==null||e[a].disabled||(t=e[a])}t!==null&&(t.selected=!0)}}function Qa(e,t){if(t.dan
Line truncated
|
||||
`).replace(Ah,"")}function Ci(e,t,n){if(t=su(t),su(e)!==t&&n)throw Error(L(425))}function ts(){}var sl=null,al=null;function ll(e,t){return e==="textarea"||e==="noscript"||typeof t.children=="string"||typeof t.children=="number"||typeof t.dangerouslySetInnerHTML=="object"&&t.dangerouslySetInnerHTML!==null&&t.dangerouslySetInnerHTML.__html!=null}var ol=typeof setTimeout=="function"?setTimeout:void 0,Rh=typeof clearTimeout=="function"?clearTimeout:void 0,au=typeof Promise=="function"?Promise:void 0,Oh=typeof queueMicrotask=="function"?queueMicrotask:typeof au<"u"?function(e){return au.resolve(null).then(e).catch(Dh)}:ol;function Dh(e){setTimeout(function(){throw e})}function Sa(e,t){var n=t,r=0;do{var a=n.nextSibling;if(e.removeChild(n),a&&a.nodeType===8)if(n=a.data,n==="/$"){if(r===0){e.removeChild(a),Fr(t);return}r--}else n!=="$"&&n!=="$?"&&n!=="$!"||r++;n=a}while(n);Fr(t)}function $t(e){for(;e!=null;e=e.nextSibling){var t=e.nodeType;if(t===1||t===3)break;if(t===8){if(t=e.data,t==="$"||t==="$!"||t==="$?")break;if(t==="/$")return null}}return e}function lu(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="$"||n==="$!"||n==="$?"){if(t===0)return e;t--}else n==="/$"&&t++}e=e.previousSibling}return null}var tr=Math.random().toString(36).slice(2),ut="__reactFiber$"+tr,$r="__reactProps$"+tr,Nt="__reactContainer$"+tr,cl="__reactEvents$"+tr,Fh="__reactListeners$"+tr,Uh="__reactHandles$"+tr;function cn(e){var t=e[ut];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Nt]||n[ut]){if(n=t.alternate,t.child!==null||n!==null&&n.child!==null)for(e=lu(e);e!==null;){if(n=e[ut])return n;e=lu(e)}return t}e=n,n=e.parentNode}return null}function ei(e){return e=e[ut]||e[Nt],!e||e.tag!==5&&e.tag!==6&&e.tag!==13&&e.tag!==3?null:e}function In(e){if(e.tag===5||e.tag===6)return e.stateNode;throw Error(L(33))}function ks(e){return e[$r]||null}var ul=[],Mn=-1;function Jt(e){return{current:e}}function ee(e){0>Mn||(e.current=ul[Mn],ul[Mn]=null,Mn--)}function X(e,t){Mn++,ul[Mn]=e.current,e.current=t}var Xt={},Se=Jt(Xt),Ae=Jt(!1),mn=Xt;function Wn(e,t){var n=e.type.contextTypes;if(!n)return Xt;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var a={},o;for(o in n)a[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function Re(e){return e=e.childContextTypes,e!=null}function ns(){ee(Ae),ee(Se)}function ou(e,t,n){if(Se.current!==Xt)throw Error(L(168));X(Se,t),X(Ae,n)}function Gd(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var a in r)if(!(a in t))throw Error(L(108,Nm(e)||"Unknown",a));return se({},n,r)}function rs(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Xt,mn=Se.current,X(Se,e),X(Ae,Ae.current),!0}function cu(e,t,n){var r=e.stateNode;if(!r)throw Error(L(169));n?(e=Gd(e,t,mn),r.__reactInternalMemoizedMergedChildContext=e,ee(Ae),ee(Se),X(Se,e)):ee(Ae),X(Ae,n)}var xt=null,bs=!1,Ea=!1;function Kd(e){xt===null?xt=[e]:xt.push(e)}function Hh(e){bs=!0,Kd(e)}function en(){if(!Ea&&xt!==null){Ea=!0;var e=0,t=K;try{var n=xt;for(K=1;e<n.length;e++){var r=n[e];do r=r(!0);while(r!==null)}xt=null,bs=!1}catch(a){throw xt!==null&&(xt=xt.slice(e+1)),wd($l,en),a}finally{K=t,Ea=!1}}return null}var zn=[],An=0,is=null,ss=0,Qe=[],We=0,hn=null,wt=1,jt="";function ln(e,t){zn[An++]=ss,zn[An++]=is,is=e,ss=t}function Yd(e,t,n){Qe[We++]=wt,Qe[We++]=jt,Qe[We++]=hn,hn=e;var r=wt;e=jt;var a=32-rt(r)-1;r&=~(1<<a),n+=1;var o=32-rt(t)+a;if(30<o){var f=a-a%5;o=(r&(1<<f)-1).toString(32),r>>=f,a-=f,wt=1<<32-rt(t)+a|n<<a|r,jt=o+e}else wt=1<<o|n<<a|r,jt=e}function Jl(e){e.return!==null&&(ln(e,1),Yd(e,1,0))}function eo(e){for(;e===is;)is=zn[--An],zn[An]=null,ss=zn[--An],zn[An]=null;for(;e===hn;)hn=Qe[--We],Qe[We]=null,jt=Qe[--We],Qe[We]=null,wt=Qe[--We],Qe[We]=null}var Ue=null,Fe=null,ne=!1,nt=null;function Xd(e,t){var n=Ge(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,t=e.deletions,t===null?(e.deletions=[n],e.flags|=16):t.push(n)}function uu(e,t){switch(e.tag){case 5:var n=e.type;return t=t.nodeType!==1||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,Ue=e,Fe=$t(t.firstChild),!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,Ue=e,Fe=null,!0):!1;case 13:return t=t.nodeType!==8?null:t,t!==null?(n=hn!==null?{id:wt,overflow:jt}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},n=Ge(18,null,null,0),n.stateNode=t,n.return=e,e.child=n,Ue=e,Fe=null,!0):!1;default:return!1}}function dl(e){return(e.mode&1)!==0&&(e.flags&128)===0}function fl(e){if(ne){var t=Fe;if(t){var n=t;if(!uu(e,t)){if(dl(e))throw Error(L(418));t=$t(n.nextSibling);var r=Ue;t&&uu(e,t)?Xd(r,n):(e.flags=e.flags&-4097|2,ne=!1,Ue=e)}}else{if(dl(e))throw Error(L(418));e.flags=e.flags&-4097|2,ne=!1,Ue=e}}}function du(e){for(e=e.return;e!
Line truncated
|
||||
Error generating stack: `+o.message+`
|
||||
`+o.stack}return{value:e,source:t,stack:a,digest:null}}function Pa(e,t,n){return{value:e,source:null,stack:n??null,digest:t??null}}function vl(e,t){try{console.error(t.value)}catch(n){setTimeout(function(){throw n})}}var Yh=typeof WeakMap=="function"?WeakMap:Map;function Sf(e,t,n){n=kt(-1,n),n.tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){ps||(ps=!0,El=r),vl(e,t)},n}function Ef(e,t,n){n=kt(-1,n),n.tag=3;var r=e.type.getDerivedStateFromError;if(typeof r=="function"){var a=t.value;n.payload=function(){return r(a)},n.callback=function(){vl(e,t)}}var o=e.stateNode;return o!==null&&typeof o.componentDidCatch=="function"&&(n.callback=function(){vl(e,t),typeof r!="function"&&(Qt===null?Qt=new Set([this]):Qt.add(this));var f=t.stack;this.componentDidCatch(t.value,{componentStack:f!==null?f:""})}),n}function xu(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new Yh;var a=new Set;r.set(t,a)}else a=r.get(t),a===void 0&&(a=new Set,r.set(t,a));a.has(n)||(a.add(n),e=uv.bind(null,e,t,n),t.then(e,e))}function wu(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t!==null?t.dehydrated!==null:!0),t)return e;e=e.return}while(e!==null);return null}function ju(e,t,n,r,a){return e.mode&1?(e.flags|=65536,e.lanes=a,e):(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,n.tag===1&&(n.alternate===null?n.tag=17:(t=kt(-1,1),t.tag=2,Vt(n,t,1))),n.lanes|=1),e)}var Xh=Ct.ReactCurrentOwner,ze=!1;function Ee(e,t,n,r){t.child=e===null?ef(t,null,n,r):Kn(t,e.child,n,r)}function ku(e,t,n,r,a){n=n.render;var o=t.ref;return qn(t,a),r=fo(e,t,n,r,o,a),n=po(),e!==null&&!ze?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~a,Et(e,t,a)):(ne&&n&&Jl(t),t.flags|=1,Ee(e,t,r,a),t.child)}function bu(e,t,n,r,a){if(e===null){var o=n.type;return typeof o=="function"&&!bo(o)&&o.defaultProps===void 0&&n.compare===null&&n.defaultProps===void 0?(t.tag=15,t.type=o,Cf(e,t,o,r,a)):(e=Vi(n.type,null,r,t,t.mode,a),e.ref=t.ref,e.return=t,t.child=e)}if(o=e.child,!(e.lanes&a)){var f=o.memoizedProps;if(n=n.compare,n=n!==null?n:Hr,n(f,r)&&e.ref===t.ref)return Et(e,t,a)}return t.flags|=1,e=Gt(o,r),e.ref=t.ref,e.return=t,t.child=e}function Cf(e,t,n,r,a){if(e!==null){var o=e.memoizedProps;if(Hr(o,r)&&e.ref===t.ref)if(ze=!1,t.pendingProps=r=o,(e.lanes&a)!==0)e.flags&131072&&(ze=!0);else return t.lanes=e.lanes,Et(e,t,a)}return gl(e,t,n,r,a)}function _f(e,t,n){var r=t.pendingProps,a=r.children,o=e!==null?e.memoizedState:null;if(r.mode==="hidden")if(!(t.mode&1))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},X(Dn,De),De|=n;else{if(!(n&1073741824))return e=o!==null?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,X(Dn,De),De|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=o!==null?o.baseLanes:n,X(Dn,De),De|=r}else o!==null?(r=o.baseLanes|n,t.memoizedState=null):r=n,X(Dn,De),De|=r;return Ee(e,t,a,n),t.child}function Lf(e,t){var n=t.ref;(e===null&&n!==null||e!==null&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function gl(e,t,n,r,a){var o=Re(n)?mn:Se.current;return o=Wn(t,o),qn(t,a),n=fo(e,t,n,r,o,a),r=po(),e!==null&&!ze?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~a,Et(e,t,a)):(ne&&r&&Jl(t),t.flags|=1,Ee(e,t,n,a),t.child)}function Nu(e,t,n,r,a){if(Re(n)){var o=!0;rs(t)}else o=!1;if(qn(t,a),t.stateNode===null)Bi(e,t),Nf(t,n,r),hl(t,n,r,a),r=!0;else if(e===null){var f=t.stateNode,p=t.memoizedProps;f.props=p;var h=f.context,g=n.contextType;typeof g=="object"&&g!==null?g=Ye(g):(g=Re(n)?mn:Se.current,g=Wn(t,g));var E=n.getDerivedStateFromProps,N=typeof E=="function"||typeof f.getSnapshotBeforeUpdate=="function";N||typeof f.UNSAFE_componentWillReceiveProps!="function"&&typeof f.componentWillReceiveProps!="function"||(p!==r||h!==g)&&yu(t,f,r,g),At=!1;var b=t.memoizedState;f.state=b,os(t,r,f,a),h=t.memoizedState,p!==r||b!==h||Ae.current||At?(typeof E=="function"&&(ml(t,n,E,r),h=t.memoizedState),(p=At||gu(t,n,p,r,b,h,g))?(N||typeof f.UNSAFE_componentWillMount!="function"&&typeof f.componentWillMount!="function"||(typeof f.componentWillMount=="function"&&f.componentWillMount(),typeof f.UNSAFE_componentWillMount=="function"&&f.UNSAFE_componentWillMount()),typeof f.componentDidMount=="function"&&(t.flags|=4194308)):(typeof f.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=h),f.props=r,f.state=h,f.context=g,r=p):(typeof f.componentDidMount=="function"&&(t.flags|=4194308),r=!1)}else{f=t.stateNode,nf(e,t),p=t.memoizedProps,g=t.type===t.elementType?p:et(t.type,p),f.props=g,N=t.pendingProps,b=f.context,h=n.contextType,typeof h=="object"&&h!==null?h=Ye(h):(h=Re(n)?mn:Se.current,h=Wn(t,h));var P=n.getDerivedStateFromProps;(E=typeof P=="function"||typeof f.getSnapshotBeforeUpdate=="function")||typeof f.UNSAFE_componentWillReceiveProps!="function"&&typeof f.componentWillReceiveProps!="function"||(p!==N||b!==h)&&yu(t,f,r,h),At=!1,b=t.memoizedState,f.state=b,os(t,r,f,a);var I=t.memoizedState
Line truncated
|
||||
`),u=[];return l.forEach(function(d,m){var y=d.match(/\[(\d{1,3}):(\d{1,2}[.:]?\d*)]/);if(y){var C=parseInt(y[1],10),S=parseFloat(y[2].replace(":","."))||0,T=C*60+S,B=d.replace(/\[\d{1,3}:\d{1,2}[.:]?\d*]/g,"").trim();B=B.replace(/\s\s+/g," "),B&&u.push({time:T,text:B,index:m})}}),u.sort(function(d,m){return d.time-m.time}),u}function lp(s,l){var u=Po(l);if(!u.length)return s;var d={};return s.map(function(m){for(var y=null,C=1/0,S=-1,T=0;T<u.length;T++)if(!d[T]){var B=Math.abs(u[T].time-m.time);if(B>.5){if(u[T].time>m.time+.5)break;continue}if(B<C-1e-9&&(C=B,y=u[T],S=T),B===0)break}if(y&&y.text){d[S]=!0;var Pe={time:m.time,end:m.end,words:m.words,trans:y.text,index:m.index,orig:m.text};return c.settings.lyric2line?Pe.text=m.text+`
|
||||
`+y.text:Pe.text=m.text+" (翻译:"+y.text+")",Pe}return m})}function op(s){var l=[];return String(s||"").split(`
|
||||
`).forEach(function(u){var d=u.match(/^\[(\d+),(\d+)\]/);if(d){var m=parseInt(d[1],10)/1e3,y=parseInt(d[2],10)/1e3;if(!(y<=0)){for(var C=u.slice(d[0].length),S=[],T=/\((\d+),(\d+)(?:,\d+)?\)/g,B;(B=T.exec(C))!==null;)S.push({s:parseInt(B[1],10)/1e3,d:parseInt(B[2],10)/1e3,start:B.index,end:B.index+B[0].length});for(var Pe=[],$e="",Ve=0;Ve<S.length;Ve++){var It=Ve+1<S.length?S[Ve+1].start:C.length,vt=C.slice(S[Ve].end,It);vt&&(Pe.push({c:vt,s:S[Ve].s,d:S[Ve].d}),$e+=vt)}$e=$e.replace(/\s\s+/g," ").trim(),!(!Pe.length||!$e)&&l.push({time:m,end:m+y,text:$e,words:Pe,index:l.length})}}}),l.sort(function(u,d){return u.time-d.time}),l.forEach(function(u,d){u.index=d}),l}function Io(){var s=Po(c.rawLyric||""),l=op(c.rawYrc||"");if(l.length&&l.length>=Math.max(1,Math.ceil(s.length*.5))){var u=l.slice();s.forEach(function(d){var m=l.some(function(y){return Math.abs(y.time-d.time)<=1});m||u.push(d)}),u.sort(function(d,m){return d.time-m.time}),u.forEach(function(d,m){d.index=m}),s=u}return c.rawTlyric&&(s=lp(s,c.rawTlyric)),s}function cp(s,l,u){c.rawLyric=s||"",c.rawTlyric=l||"",c.rawYrc=u||"",c.lyrics=Io(),Fs();var d=e("#lyric-panel");d.hidden=!1,c.lyrics.length||(e("#lyric-box").innerHTML='<div class="lyric-empty">暂无歌词</div>')}function Fs(){var s=e("#lyric-box");if(!c.lyrics.length){s.innerHTML='<div class="lyric-empty">暂无歌词</div>';return}var l=c.settings.lyric2line;s.innerHTML=c.lyrics.map(function(u,d){var m=u.text||"♪",y=c.settings.ktv?"lyric-line ktv":"lyric-line",C;if(c.settings.ktv&&u.words&&u.words.length)y+=" kw-line",C=u.words.map(function(B){return'<span class="kw">'+j(B.c)+"</span>"}).join(""),l&&u.trans?C+='<br><span class="ktr">'+j(u.trans)+"</span>":u.trans&&(C+='<span class="ktr"> (翻译:'+j(u.trans)+")</span>");else if(u.trans){var S=u.orig||m,T=l?S.split(`
|
||||
`)[0]:S.replace(/ \(翻译:.*\)$/,"");C=j(T),l?C+='<br><span class="ktr">'+j(u.trans)+"</span>":C+='<span class="ktr"> (翻译:'+j(u.trans)+")</span>"}else C=l?j(m).replace(/\n/g,"<br>"):j(m);return'<div class="'+y+'" data-i="'+d+'">'+C+"</div>"}).join(""),s.scrollTop=0,c.lastActiveLine=-1,c.ktvFillIdx=-1,c.ktvWordEls=null,c.ktvLineEls=Array.prototype.slice.call(s.children)}e("#lyric-box").addEventListener("click",function(s){var l=s.target.closest(".lyric-line");if(l){var u=parseInt(l.getAttribute("data-i"),10),d=e("#player audio");d&&d.src&&c.lyrics[u]&&(d.currentTime=Math.max(0,c.lyrics[u].time-c.lyricOffset),d.paused&&d.play().catch(function(){}))}});function Mo(s){c.lyricOffset=Math.max(-30,Math.min(30,Math.round((c.lyricOffset+s)*100)/100)),e("#lyric-offset-label").textContent="偏移 "+(c.lyricOffset>0?"+":"")+c.lyricOffset.toFixed(2)+"s",k("歌词偏移:"+(c.lyricOffset>0?"+":"")+c.lyricOffset.toFixed(2)+" 秒","info");var l=e("#player audio");l&&!l.paused&&Uo(l.currentTime)}e("#lyric-delay").addEventListener("click",function(){Mo(.25)}),e("#lyric-advance").addEventListener("click",function(){Mo(-.25)});var zo=.7,Ao=1.6,up=.05;function Ro(s){return typeof s!="number"||!isFinite(s)?1:Math.max(zo,Math.min(Ao,Math.round(s*20)/20))}function nr(){c.settings.lyricFont=Ro(c.settings.lyricFont),e("#lyric-box").style.setProperty("--lyric-fs",String(c.settings.lyricFont)),e("#lyric-fs-val").textContent=Math.round(c.settings.lyricFont*100)+"%",e("#lyric-fs-dec").disabled=c.settings.lyricFont<=zo,e("#lyric-fs-inc").disabled=c.settings.lyricFont>=Ao}function Us(){return!e("#lyric-fs-pop").hidden}function rr(s){e("#lyric-fs-pop").hidden=!s,e("#lyric-fontsize").setAttribute("aria-expanded",s?"true":"false"),document.documentElement.classList.toggle("fs-pop-open",s),s&&nr()}function Oo(s){c.settings.lyricFont=Ro(c.settings.lyricFont+s*up),nr(),f()}e("#lyric-fontsize").addEventListener("click",function(){rr(!Us())}),e("#lyric-fs-inc").addEventListener("click",function(){Oo(1)}),e("#lyric-fs-dec").addEventListener("click",function(){Oo(-1)}),e("#lyric-fs-reset").addEventListener("click",function(){c.settings.lyricFont=1,nr(),f(),k("歌词字号已恢复默认","info")}),document.addEventListener("click",function(s){Us()&&(s.target.closest("#lyric-fs-pop")||s.target.closest("#lyric-fontsize")||rr(!1))},!0),document.addEventListener("keydown",function(s){if(s.key==="Escape"&&Us()){if(document.querySelector(".drawer.show, .modal-mask.show"))return;rr(!1),e("#lyric-fontsize").focus()}},!0);function Do(s){for(var l=-1,u=0;u<c.lyrics.length&&c.lyrics[u].time<=s+.2;u++)l=u;return l}function dp(s,l,u){var d=c.lyrics[l];if(!(!s||!d)&&d.words&&d.words.length){c.ktvFillIdx!==l&&(c.ktvFillIdx=l,c.ktvWordEls=s.querySelectorAll(".kw"));for(var m=c.ktvWordEls,y=0;y<d.words.length;y++){var C=d.words[y],S=m[y];if(!S)break;u>=C.s+C.d?S.classList.contains("on")||(S.classList.add("on"),S.classList.remove("cur")):u>=C.s?(S.classList.contains("cur")||(S.classList.add("cur"),S.classList.remove("on")),S.style.setProperty("--pw",Math.min(100,(u-C.s)/C.d*100)+"%")):(S.classList.contains("on")||S.classList.contains("cur"))&&(S.classList.remove("on"),S.classList.remove("cur"))}}}function Fo(s,l){for(var u=c.ktvLineEls&&c.ktvLineEls.length?c.ktvLineEls:Array.prototype.slice.call(e("#lyric-box").children),d=0;d<u.length;d++)u[d].classList.toggle("active",d===s);if(s>=0&&c.settings.ktv&&dp(u[s],s,l),s>=0&&s!==c.lastActiveLine){c.lastActiveLine=s;var m=e("#lyric-box"),y=u[s];if(y){var C=y.offsetTop-m.clientHeight/2+y.clientHeight/2;m.scrollTo({top:Math.max(0,C),behavior:"smooth"})}}}function Uo(s){var l=s+c.lyricOffset;Fo(Do(l),l)}function Ho(){if(c.ktvRunning){var s=e("#player audio");if(!s||s.paused){c.ktvRunning=!1;return}var l=s.currentTime+c.lyricOffset;Fo(Do(l),l),requestAnimationFrame(Ho)}}function Bo(){!c.ktvRunning&&c.settings.ktv&&(c.ktvRunning=!0,requestAnimationFrame(Ho))}function ir(s,l,u){u&&(l=1,c.commentPage=1,c.commentTotal=0);var d=(l-1)*10;c._commentsLoading=!0,c._commentGen=(c._commentGen||0)+1;var m=c._commentGen;U("/comments",{id:s,limit:10,offset:d}).then(function(y){if(m===c._commentGen){if(y.status!==200)throw new Error(y.message||"获取评论失败");if(!(c.currentSong&&String(c.currentSong.id)!==String(s))){var C=y.data;if(c.commentTotal=C.total||0,e("#comment-count").textContent=c.commentTotal?"("+je(c.commentTotal)+")":"",l===1){var S=C.hotComments||[];e("#comment-hot-title").hidden=!S.length,e("#comment-hot-list").innerHTML=S.length?S.map(qo).join(""):'<div class="comment-empty">暂无热门评论</div>'}var T=C.comments||[];e("#comment-all-list").innerHTML=T.length?T.map(qo).join(""):'<div class="comment-empty">暂无评论</div>',c.commentPage=l,fp()}}}).catch(function(y){m===c._commentGen&&k(y.message||"获取评论失败","error")}).then(function(){m===c._commentGen&&(c._commentsLoading=!1)},function(){m===c._commentGen&&(c._commentsLoading=!1)})}function fp(){var s=Math.max(1,Math.ceil(c.commentTotal/10)),
Line truncated
|
||||
`+u(d.time)+" --> "+u(y)+`
|
||||
`+d.text+`
|
||||
`}).join(`
|
||||
`)}return s.map(function(u){var d=Math.floor(u.time/60),m=u.time-d*60,y=Math.round((m-Math.floor(m))*1e3);return"["+String(d).padStart(2,"0")+":"+String(Math.floor(m)).padStart(2,"0")+"."+String(Math.min(y,999)).padStart(3,"0")+"]"+u.text.replace(/\n/g," / ")}).join(`
|
||||
`)}e("#detail-lyric-download").addEventListener("click",function(){if(!c.currentSong||!c.lyrics.length){k("暂无歌词可下载","warning");return}var s=c.settings.lyricFormat==="srt"?"srt":"lrc",l=hp(c.lyrics,s),u=new Blob([l],{type:"text/plain;charset=utf-8"}),d=URL.createObjectURL(u),m=document.createElement("a");m.href=d,m.download=(c.currentSong.name||"lyric")+"."+s,document.body.appendChild(m),m.click(),document.body.removeChild(m),setTimeout(function(){URL.revokeObjectURL(d)},3e3),k("歌词已下载("+s.toUpperCase()+")","success")});function Wo(s){var l=document.createElement("textarea");l.value=s,document.body.appendChild(l),l.select();try{var u=document.execCommand("copy");u?k("已复制到剪贴板","success"):k("复制失败,请手动复制","error")}catch{k("复制失败,请手动复制","error")}document.body.removeChild(l)}function sr(s){return c.collGen=c.collGen||{},c.collGen[s]=(c.collGen[s]||0)+1,c.collGen[s]}function lt(s,l){return c.collGen[s]!==l}function si(){if(pt()){var s=e("#playlist-input").value.trim(),l=Ze(s);if(!l){k("请输入歌单ID或链接","warning"),e("#playlist-input").focus();return}var u=e("#playlist-btn"),d=sr("playlist");V(u,!0,"解析中..."),U("/playlist",{id:l}).then(function(m){if(!lt("playlist",d)){if(m.status!==200)throw new Error(m.data&&m.data.msg||m.message||"歌单解析失败");Go("playlist",m.data.playlist)}}).catch(function(m){lt("playlist",d)||k(m.message||"歌单解析失败","error")}).then(function(){V(u,!1)},function(){V(u,!1)})}}function vp(s,l){e("#playlist-input").value=s,we("playlist"),e("#playlist-input").focus(),l&&k("正在解析歌单:"+l,"info"),si()}function qs(){if(pt()){var s=e("#album-input").value.trim(),l=Ze(s);if(!l){k("请输入专辑ID或链接","warning"),e("#album-input").focus();return}var u=e("#album-btn"),d=sr("album");V(u,!0,"解析中..."),U("/album",{id:l}).then(function(m){if(!lt("album",d)){if(m.status!==200)throw new Error(m.data&&m.data.msg||m.message||"专辑解析失败");Go("album",m.data.album)}}).catch(function(m){lt("album",d)||k(m.message||"专辑解析失败","error")}).then(function(){V(u,!1)},function(){V(u,!1)})}}function gp(s,l){e("#album-input").value=s,we("album"),e("#album-input").focus(),l&&k("正在解析专辑:"+l,"info"),qs()}function yp(s,l){return'<div class="song-row"><span class="song-meta" style="width:32px;text-align:right;">'+l+'</span><img class="song-cover" src="'+j(s.picUrl||"")+'" loading="lazy" alt="" /><div class="song-info"><div class="song-name"><span class="n">'+j(s.name)+'</span><span class="tag">'+j(s.album||"")+'</span></div><div class="song-meta">'+j(s.artists||"")+'</div></div><div class="song-actions"><button class="btn btn-sm btn-link act-parse" data-id="'+j(s.id)+'" data-name="'+j(s.name)+'" type="button">解析</button><button class="btn btn-sm act-download" data-id="'+j(s.id)+'" data-name="'+j(s.name)+'" type="button">下载</button></div></div>'}var ai=10;function Nn(s,l,u){l=l||[];var d=l.length,m=Math.max(1,Math.ceil(d/ai));u=Math.max(1,Math.min(u||1,m));var y=(u-1)*ai,C=l.slice(y,y+ai),S=e("#"+s+"-tracks");C.length?S.innerHTML=C.map(function(Pe,$e){return yp(Pe,y+$e+1)}).join(""):S.innerHTML='<div class="empty-state"><div class="empty-icon">📄</div>暂无歌曲(可能为受版权保护的歌曲)</div>';var T=e("#"+s+"-pager");T&&(T.hidden=d<=ai,e("#"+s+"-page-info").textContent="第 "+u+" / "+m+" 页",e("#"+s+"-prev").disabled=u<=1,e("#"+s+"-next").disabled=u>=m);var B=e("#"+s+"-download-all");return B&&d&&(B.textContent="⬇ 批量下载全部(共 "+d+" 首)"),c["page_"+s]=u,c["tracks_"+s]=l,u}["playlist","album","artist","personal","global"].forEach(function(s){e("#"+s+"-prev").addEventListener("click",function(){Nn(s,c["tracks_"+s],c["page_"+s]-1)}),e("#"+s+"-next").addEventListener("click",function(){Nn(s,c["tracks_"+s],c["page_"+s]+1)})});function Go(s,l){if(!l){k("解析结果为空","error");return}var u=s;["playlist","album","artist"].forEach(function(C){e("#"+C+"-result").hidden=!0});var d=e("#"+u+"-result");d.hidden=!1;var m=l.tracks||l.songs||[],y=u==="playlist";l.incomplete&&l.missing&&k("注意:该歌单不完整,缺少 "+l.missing+" 首(可能版权受限或接口失败)","warning"),c.currentCollection={type:u,id:l.id,name:l.name},e("#"+u+"-cover").src=l.coverImgUrl||"",e("#"+u+"-name").textContent=l.name||"未知",y?(e("#playlist-creator").textContent="by "+(l.creator||"未知"),e("#playlist-count").textContent=l.trackCount!=null?l.trackCount:m.length,e("#playlist-desc").hidden=!(l.description&&l.description.trim()),e("#playlist-desc").hidden||(e("#playlist-desc").textContent=l.description)):(e("#album-artist").textContent=l.artist?"歌手:"+l.artist:"",e("#album-count").textContent=m.length,e("#album-desc").hidden=!(l.description&&l.description.trim()),e("#album-desc").hidden||(e("#album-desc").textContent=l.description)),Nn(u,m,1),hi(),window.scrollTo({top:d.offsetTop-80,behavior:"smooth"})}e("#playlist-btn").addEventLis
Line truncated
|
||||
确定后将仅打包前 `+l+" 集,是否继续?"))return;u=l}}if(window.confirm("将下载「"+s+"」的单集(最多 "+u+" 集)并打包为 ZIP,大电台耗时较长,确认开始?")){var d=or();U("/podcast/download/batch_zip",{radio_id:c.podcast.radioId,limit:u,quality:e("#podcast-quality").value,task_id:d,device_id:ht()}).then(function(m){if(m.status!==200)throw new Error(m.message||"提交失败");cr({id:d,type:"batch",label:"播客打包 · "+s,total:0,done:0,status:"queued"}),k("打包任务已提交,可在进度悬浮窗查看","success")}).catch(function(m){k(m.message||"打包提交失败","error")})}}}),e("#podcast-episodes").addEventListener("click",function(s){var l=s.target.closest("button[data-act]");if(l){var u=l.getAttribute("data-act"),d=l.getAttribute("data-id"),m=l.getAttribute("data-name");u==="detail"?Zo(d,m,!0,l):u==="direct"?Ep(d,m,l):u==="download"&&Jo(d,m)}});function Xo(s,l){c.podcast.program=s,e("#podcast-program-cover").src=s.cover_url||"",e("#podcast-program-name").textContent=s.name||"",e("#podcast-program-radio").textContent=s.radio_name||"-",e("#podcast-program-dj").textContent=s.dj_name||"-";var u=[];s.duration_text&&u.push("时长 "+s.duration_text),s.create_date&&u.push("发布 "+s.create_date),s.serial_num&&u.push("第 "+s.serial_num+" 集"),e("#podcast-program-meta").textContent=u.join(" · ")||"-";var d=s.audio,m=e("#podcast-program-badges"),y=e("#podcast-program-open"),C=d&&d.url;m.innerHTML=C?'<span class="badge">'+j(d.level_name||d.level||"标准")+'</span><span class="badge badge-green">'+j((d.type||"mp3").toUpperCase())+" · "+j(d.size_formatted||"")+"</span>"+(d.br?'<span class="badge">'+Math.round(d.br/1e3)+" kbps</span>":""):'<span class="badge" style="border-color:var(--color-warning);color:var(--color-warning);">未获取到音频直链</span>';var S=e("#podcast-audio");if(C){try{var T=e("#player audio");T&&!T.paused&&T.pause()}catch{}S.src=d.url,S.hidden=!1;try{typeof pe.volume=="number"&&(S.volume=pe.volume,S.muted=!!pe.muted)}catch{}y.href=d.url,y.hidden=!1,S.onerror=function(){k("试听链接已过期或失效,请重新点击「试听」刷新","warning")},S.play().catch(function(){})}else S.removeAttribute("src"),S.hidden=!0,y.hidden=!0;e("#podcast-program-tip").hidden=!!C,e("#podcast-program-tip").textContent="该单集暂无可用音频(可能已下架或受版权限制)",e("#podcast-program-result").hidden=!1,e("#podcast-radio-result").hidden=!0}function Zo(s,l,u,d){var m=function(){d&&V(d,!1)};d&&V(d,!0,"..."),ui(!0),U("/podcast/parse",{id:s,quality:e("#podcast-quality").value}).then(function(y){if(y.status!==200)throw new Error(y.message||"解析失败");Xo((y.data||{}).program)}).catch(function(y){k(y.message||"解析失败","error")}).finally(function(){ui(!1),m()})}function Ep(s,l,u){var d=function(){u&&V(u,!1)};u&&V(u,!0,"..."),U("/podcast/parse",{id:s,quality:e("#podcast-quality").value}).then(function(m){if(m.status!==200)throw new Error(m.message||"解析失败");var y=((m.data||{}).program||{}).audio;if(!y||!y.url)throw new Error("未获取到音频直链");try{navigator.clipboard.writeText(y.url).then(function(){k("直链已复制:"+l,"success")}).catch(function(){Wo(y.url)})}catch{Wo(y.url)}}).catch(function(m){k(m.message||"获取直链失败","error")}).finally(d)}function Jo(s,l){if(pt()&&Te()){var u=or();U("/podcast/download",{id:s,quality:e("#podcast-quality").value,task_id:u,device_id:ht()}).then(function(d){if(d.status!==200)throw new Error(d.message||"提交失败");cr({id:u,type:"single",label:"播客 · "+(l||s),total:1,done:0,status:"queued"}),k("下载任务已提交:"+l,"success")}).catch(function(d){k(d.message||"下载提交失败","error")})}}e("#podcast-program-download").addEventListener("click",function(){var s=c.podcast.program;s&&Jo(s.id,s.name)});function ec(){if(pt()){var s=e("#podcast-search-input").value.trim();if(!s){k("请输入搜索关键词","warning");return}var l=e("#podcast-search-btn");V(l,!0,"搜索中..."),U("/podcast/search",{keyword:s,limit:20,type:"all"}).then(function(u){if(u.status!==200)throw new Error(u.message||"搜索失败");var d=u.data||{},m=d.radios||[],y=d.voices||[],C=m.map(function(T){var B=[];return T.dj_name&&B.push("主播 "+T.dj_name),T.program_count&&B.push(T.program_count+" 集"),T.sub_count_text&&T.sub_count_text!=="0"&&B.push("订阅 "+T.sub_count_text),'<div class="song-row"><img class="song-cover" src="'+j(T.pic_url||"")+'" loading="lazy" alt="" /><div class="song-info"><div class="song-name"><span class="n">'+j(T.name)+'</span></div><div class="song-meta">'+j(B.join(" · "))+'</div></div><div class="song-actions"><button class="btn btn-primary btn-sm" data-search-radio="'+j(T.id)+'" data-radio-name="'+j(T.name)+'">解析电台</button></div></div>'}).join("");C+=y.map(function(T){var B=[];return T.radio_name&&B.push("来自「"+T.radio_name+"」"),T.duration_text&&B.push(T.duration_text),T.create_date&&B.push(T.create_date),'<div class="song-row"><img
Line truncated
|
||||
删除后将需要重新扫码登录。`)&&(V(e("#admin-cookie-delete"),!0,"删除中..."),U("/admin/cookie/delete",{}).then(function(s){if(s.status!==200)throw new Error(s.message||"删除失败");Pt(),c.adminQrGen=(c.adminQrGen||0)+1,e("#admin-qr-area").hidden=!0,c.adminUnikey="",k("Cookie 已删除,可重新扫码登录","success"),fi(),G()}).catch(function(s){k(s.message||"删除 Cookie 失败","error")}).finally(function(){V(e("#admin-cookie-delete"),!1)}))}e("#admin-enter").addEventListener("click",tc),e("#admin-password").addEventListener("keydown",function(s){s.key==="Enter"&&tc()}),e("#admin-qr-btn").addEventListener("click",_p),e("#admin-cookie-delete").addEventListener("click",Tp),e("#admin-status-refresh").addEventListener("click",fi);var pi=1;function mi(){c.adminAuthed&&U("/admin/logs",{page:pi,page_size:10}).then(function(s){if(s.status!==200)throw new Error(s.message||"获取记录失败");var l=s.data,u=e("#admin-logs-list");!l.items||!l.items.length?u.innerHTML='<div class="comment-empty">暂无解析/下载记录</div>':u.innerHTML=l.items.map(function(m){var y=m.action==="下载"?' style="border-color:var(--color-success);color:var(--color-success);background:rgba(82,196,26,0.1);"':' style="border-color:var(--color-primary);color:var(--color-primary);background:var(--color-primary-bg);"';return'<div class="stat-list-item"><span class="badge" '+y+">"+j(m.action||"-")+'</span><span style="font-family:monospace;color:var(--color-text-secondary);flex:none;">'+j(m.ip||"-")+'</span><span style="flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">'+j(m.song||"")+'</span><span style="flex:none;color:var(--color-text-tertiary);font-size:12px;">'+j(m.time||"")+"</span></div>"}).join("");var d=Math.max(1,l.pages||1);e("#admin-logs-info").textContent="第 "+l.page+" / "+d+" 页",e("#admin-logs-prev").disabled=l.page<=1,e("#admin-logs-next").disabled=l.page>=d,e("#admin-logs-pager").hidden=l.total<=10}).catch(function(s){k(s.message||"获取记录失败","error")})}e("#admin-logs-refresh").addEventListener("click",mi),e("#admin-logs-prev").addEventListener("click",function(){pi>1&&(pi--,mi())}),e("#admin-logs-next").addEventListener("click",function(){pi++,mi()});function Ws(){U("/user/status",{user_cookie:c.personal.cookie}).then(function(s){if(s.status!==200)throw new Error(s.message||"获取登录状态失败");var l=s.data||{},u=l.cookie||{};u.is_valid&&l.user?(c.personal.authed=!0,c.personal.user=l.user,e("#personal-gate").hidden=!0,e("#personal-content").hidden=!1,rc(),Gs(),G(),hi(),nn()):ar(u.is_valid)}).catch(function(s){k(s.message||"获取登录状态失败","error"),ar(!1)})}function ar(s){c.personal.authed=!1,e("#personal-content").hidden=!0,e("#personal-gate").hidden=!1,e("#personal-qr-area").hidden=!0,e("#personal-refresh").hidden=!s,hi(),nn(),s?(e("#personal-gate-hint").textContent="检测到登录信息已失效(或未关联有效账号),请重新扫码登录。",e("#personal-refresh").hidden=!1):(e("#personal-gate-hint").innerHTML="扫码登录你自己的网易云账号,即可查看收藏的歌单(包括「我喜欢的音乐」)。个人登录仅用于获取你的歌单,<b>解析与下载音乐仍使用管理员全局账号</b>。",e("#personal-refresh").hidden=!0)}function nc(s){return s===11||s===100?'<span class="vip-badge vip-vip">黑胶VIP</span>':s===10||s===110?'<span class="vip-badge vip-svip">黑胶SVIP</span>':s===1?'<span class="vip-badge vip-pkg">音乐包</span>':'<span class="vip-badge" style="background:var(--color-fill);color:var(--color-text-secondary);border:1px solid var(--color-border);">普通用户</span>'}function rc(){var s=c.personal.user||{};e("#personal-avatar").src=s.avatarUrl||"",e("#personal-nickname").innerHTML=j(s.nickname||"未命名用户")+" "+nc(s.vipType),e("#personal-signature").textContent=s.signature||"",rn()}function rn(){var s=e("#personal-toggle-account");c.parseAccount==="user"?(s.textContent="切换为全局账号解析",s.className="btn btn-sm btn-primary"):(s.textContent="切换为个人账号解析",s.className="btn btn-sm")}e("#personal-toggle-account").addEventListener("click",function(){if(c.parseAccount==="admin"){if(!c.personal.authed){k("请先在「个人歌单」扫码登录你自己的账号","warning");return}c.parseAccount="user",k("已切换为个人账号解析与下载(全局菜单均生效)","success")}else c.parseAccount="admin",k("已切换为全局账号解析与下载","success");try{localStorage.setItem("netease_parse_account",c.parseAccount)}catch{}rn(),G()});function Gs(){U("/user/playlists",{user_cookie:c.personal.cookie}).then(function(s){if(s.status!==200)throw new Error(s.message||"获取歌单失败");c.personal.user=s.data.user,rc(),Pp(s.data.playlists||[])}).catch(function(s){s.message&&s.message.indexOf("请先扫码")!==-1?(k(s.message,"warning"),ar(!1)):k(s.message||"获取歌单失败","error")})}function Pp(s){c.personal.playlists=s;var l=e("#personal-pla
Line truncated
|
||||
退出后需要重新扫码才能查看个人歌单。`)&&U("/user/logout",{}).then(function(s){if(s.status!==200)throw new Error(s.message||"退出失败");mt(),c.personal.qrGen=(c.personal.qrGen||0)+1,c.personal.authed=!1,c.personal.user=null,c.personal.playlists=[],c.personal.current=null,c.personal.cookie="";try{localStorage.removeItem("netease_user_cookie")}catch{}if(e("#personal-tracks-wrap").hidden=!0,c.parseAccount==="user"){c.parseAccount="admin";try{localStorage.setItem("netease_parse_account","admin")}catch{}k("已退出个人账号,解析账号已切换为全局账号","warning")}else k("已退出登录","success");rn(),G(),ar(!1)}).catch(function(s){k(s.message||"退出登录失败","error")})}e("#personal-qr-btn").addEventListener("click",Mp),e("#personal-refresh").addEventListener("click",Ws),e("#personal-logout").addEventListener("click",Ap),e("#personal-playlists-refresh").addEventListener("click",Gs),e("#personal-playlists").addEventListener("click",function(s){if(!s.target.closest(".act-uncollect")){var l=s.target.closest(".act-personal-open"),u=s.target.closest(".personal-pl");l?ic(l.getAttribute("data-id"),l.getAttribute("data-name")):u&&ic(u.getAttribute("data-id"),u.getAttribute("data-name"))}}),e("#personal-download-all").addEventListener("click",function(){lr(this,"personal")});function sc(){U("/global/playlists",{}).then(function(s){if(s.status===401){ac();return}if(s.status!==200)throw new Error(s.message||"获取全局账号歌单失败");var l=s.data||{};c.global.user=l.user||null,c.global.playlists=l.playlists||[],e("#global-gate").hidden=!0,e("#global-content").hidden=!1,lc(),cc()}).catch(function(s){k(s.message||"获取全局账号歌单失败","error"),ac()})}function ac(s){e("#global-content").hidden=!0,e("#global-gate").hidden=!1,e("#global-refresh").hidden=!0}function lc(){var s=c.global.user||{};e("#global-avatar").src=s.avatarUrl||"",e("#global-nickname").innerHTML=j(s.nickname||"未命名用户")+" "+nc(s.vipType),e("#global-signature").textContent=s.signature||""}function Rp(){U("/global/playlists",{}).then(function(s){if(s.status!==200)throw new Error(s.message||"获取全局账号歌单失败");c.global.user=s.data.user||null,c.global.playlists=s.data.playlists||[],lc(),cc()}).catch(function(s){k(s.message||"获取全局账号歌单失败","error")})}function oc(s){var l="";return s.specialType===5?l='<span class="badge" style="border-color:var(--color-error);color:var(--color-error);background:rgba(255,77,79,0.1);">❤️ 我喜欢的音乐</span>':s.is_own?l='<span class="badge" style="border-color:var(--color-primary);color:var(--color-primary);">我创建的</span>':l='<span class="badge badge-green">收藏的</span>','<div class="song-row global-pl" data-id="'+j(s.id)+'" data-name="'+j(s.name)+'" style="cursor:pointer;"><img class="song-cover" src="'+j(s.coverImgUrl||"")+'" loading="lazy" alt="" style="border-radius:12px;" /><div class="song-info"><div class="song-name"><span class="n">'+j(s.name)+"</span> "+l+'</div><div class="song-meta">'+je(s.trackCount)+" 首 · 播放 "+je(s.playCount)+(s.creator?" · by "+j(s.creator):"")+'</div></div><div class="song-actions"><button class="btn btn-sm btn-primary act-global-play" data-id="'+j(s.id)+'" data-name="'+j(s.name)+'" type="button">▶ 播放</button><button class="btn btn-sm act-global-api" data-id="'+j(s.id)+'" data-name="'+j(s.name)+'" type="button">🔗 API</button><button class="btn btn-sm btn-link act-global-open" data-id="'+j(s.id)+'" data-name="'+j(s.name)+'" type="button">查看歌曲</button></div></div>'}function cc(){var s=c.global.playlists,l=s.filter(function(d){return d.specialType===5}),u=s.filter(function(d){return d.specialType!==5});e("#global-fav-count").textContent="共 "+l.length+" 个",e("#global-collect-count").textContent="共 "+u.length+" 个",e("#global-fav-playlists").innerHTML=l.length?l.map(oc).join(""):'<div class="empty-state"><div class="empty-icon">📂</div>暂无「我喜欢的音乐」</div>',e("#global-collect-playlists").innerHTML=u.length?u.map(oc).join(""):'<div class="empty-state"><div class="empty-icon">📂</div>暂无收藏的歌单</div>'}function Op(s,l){if(s){c.global.current={id:s,name:l};var u=sr("global");e("#global-tracks-wrap").hidden=!1,e("#global-tracks-title").textContent="歌单歌曲:"+(l||s),e("#global-tracks").innerHTML='<div class="empty-state"><div class="empty-icon">⏳</div><div>加载中...</div></div>',e("#global-play-playlist").hidden=!1,e("#global-play-playlist").setAttribute("data-id",s),e("#global-play-playlist").setAttribute("data-name",l||s),window.scrollTo({top:e("#global-tracks-wrap").offsetTop-80,behavior:"smooth"}),U("/global/playlist",{id:s}).then(function(d){if(!lt("global",u)){if(d.status!==200)throw new Error(d.data&&d.data.msg||d.message||"获取歌单失败");Dp(d.data.playlist||{})}}).catch(function(d){lt("global",u)||(e("#global-tracks").innerHTML='<div class="empty-state"><div class="empty-icon">❌</div><div>'+j(d.message
Line truncated
|
||||
// POST 表单:id=`+(s||"")+"&level=lossless&limit=100&key="+C}}).catch(function(){m===c._apiModalGen&&(e("#api-url").textContent=d)}),xr("api-modal")}function dc(){Rt("api-modal")}function fc(s,l){if(!s)return;function u(){var d=document.createElement("textarea");d.value=s,d.style.position="fixed",d.style.opacity="0",document.body.appendChild(d),d.select();try{var m=document.execCommand("copy");m?k(l||"已复制","success"):k("复制失败,请手动选择文本复制","error")}catch{k("复制失败,请手动选择文本复制","error")}document.body.removeChild(d)}navigator.clipboard&&navigator.clipboard.writeText?navigator.clipboard.writeText(s).then(function(){k(l||"已复制","success")}).catch(u):u()}e("#global-goto-admin").addEventListener("click",function(){we("admin")}),e("#global-refresh").addEventListener("click",sc),e("#global-playlists-refresh").addEventListener("click",Rp),e("#global-api-open").addEventListener("click",function(){Ks("")}),e("#global-play-playlist").addEventListener("click",function(){uc(this.getAttribute("data-id"),this.getAttribute("data-name"),this)}),e("#global-download-all").addEventListener("click",function(){lr(this,"global")});function pc(s){var l=s.target.closest(".act-global-play, .act-global-open, .act-global-api"),u=s.target.closest(".global-pl"),d=l?l.getAttribute("data-id"):u?u.getAttribute("data-id"):"",m=l?l.getAttribute("data-name"):u?u.getAttribute("data-name"):"";d&&(l&&l.classList.contains("act-global-play")?uc(d,m,l):l&&l.classList.contains("act-global-api")?Ks(d):Op(d,m))}e("#global-fav-playlists").addEventListener("click",pc),e("#global-collect-playlists").addEventListener("click",pc),e("#playlist-api-btn").addEventListener("click",function(){var s=c.currentCollection;Ks(s&&s.type==="playlist"?s.id:"")}),e("#api-close").addEventListener("click",dc),e("#api-modal").addEventListener("click",function(s){s.target===this&&dc()}),e("#api-copy-url").addEventListener("click",function(){fc(e("#api-url").textContent,"接口地址已复制")}),e("#api-copy-example").addEventListener("click",function(){fc(e("#api-example").textContent,"请求示例已复制")});function hi(){var s=c.personal.authed,l=e("#collect-playlist-btn"),u=e("#collect-album-btn");if(l&&(l.hidden=!s),u&&(u.hidden=!s),s&&c.currentCollection){var d=c.currentCollection,m=d.type==="playlist"&&(c.personal.playlists||[]).some(function(y){return String(y.id)===String(d.id)});d.type==="album"?d.albumCollected?(e("#collect-album-btn").textContent="✓ 已收藏专辑",e("#collect-album-btn").classList.add("btn-success")):(e("#collect-album-btn").textContent="♡ 收藏专辑",e("#collect-album-btn").classList.remove("btn-success")):m?(e("#collect-playlist-btn").textContent="✓ 已收藏",e("#collect-playlist-btn").classList.add("btn-success")):(e("#collect-playlist-btn").textContent="♡ 收藏歌单",e("#collect-playlist-btn").classList.remove("btn-success"))}}function Ys(s,l,u){if(!c.personal.authed||!c.personal.cookie){k("请先在「个人歌单」扫码登录你的账号","warning"),we("personal");return}var d=u===1?"收藏":"取消收藏";U("/user/collect",{id:l,type:s,action:u,user_cookie:c.personal.cookie}).then(function(m){if(m.status!==200)throw new Error(m.message||d+"失败");k(u===1?"✅ 已收藏到你的个人歌单":"已取消收藏","success"),c.currentCollection&&String(c.currentCollection.id)===String(l)&&(c.currentCollection.albumCollected=s==="album"&&u===1);var y=e(s==="album"?"#collect-album-btn":"#collect-playlist-btn");y&&(u===1?(y.textContent=s==="album"?"✓ 已收藏专辑":"✓ 已收藏",y.classList.add("btn-success")):(y.textContent=s==="album"?"♡ 收藏专辑":"♡ 收藏歌单",y.classList.remove("btn-success"))),c.personal.authed&&Gs(),hi()}).catch(function(m){k(m.message||d+"失败","error")})}e("#collect-playlist-btn").addEventListener("click",function(){if(c.currentCollection){var s=(c.personal.playlists||[]).some(function(l){return String(l.id)===String(c.currentCollection.id)});Ys("playlist",c.currentCollection.id,s?2:1)}}),e("#collect-album-btn").addEventListener("click",function(){c.currentCollection&&Ys("album",c.currentCollection.id,1)}),document.addEventListener("click",function(s){var l=s.target.closest(".act-parse");if(l){sp(l.getAttribute("data-id"),l.getAttribute("data-name"));return}var u=s.target.closest(".act-download");if(u){Vo(u.getAttribute("data-id"),u.getAttribute("data-name"));return}var d=s.target.closest(".act-goto-playlist");if(d){vp(d.getAttribute("data-id"),d.getAttribute("data-name"));return}var m=s.target.closest(".act-goto-album");if(m){gp(m.getAttribute("data-id"),m.getAttribute("data-name"));return}var y=s.target.closest(".act-goto-artist");if(y){xp(y.getAttribute("data-id"),y.getAttribute("data-name"));return}var C=s.target.closest(".act-uncollect");if(C){Ys("playlist",C.getAttribute("data-id"),2);return}});function Fp(s,l,u){var d=document.querySelector('.modal-mask[data-dynamic="1"].show');d&&d.remove();var m=document.createEl
Line truncated
|
||||
//# sourceMappingURL=app.js.map
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"mappings":"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 truncated
|
||||
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
import{c as Et,o as kt}from"./app.js";function _t(){Promise.prototype.finally||(Promise.prototype.finally=function(e){var t=this.constructor||Promise;return this.then(function(a){return t.resolve(e()).then(function(){return a})},function(a){return t.resolve(e()).then(function(){throw a})})});var je="2.4.0",ze=[{v:"2.4.0",date:"2026-09-21",items:["修复:老内核浏览器(Chrome 57-62)操作按钮卡加载的问题","安全:登录失败次数过多临时锁定;公网错误信息不再暴露内部细节","优化:用户列表不再携带明文网易云 Cookie(按需单独查看)"]},{v:"2.1.0",date:"2026-08-28",items:["计费改为按次计费:一首歌 1 次,歌单打包按歌曲数量扣减","免费试用改为 3 次(3 首歌),注册页领取,每设备限一次","卡密系统升级为次数卡,后台可管理用户次数"]},{v:"2.0.0",date:"2026-08-28",items:["新增站点账号系统:强制登录、邮箱验证码注册","新增管理后台:用户管理、全局Cookie、SMTP、日志、卡密、公告、数据库备份","新增个人中心:剩余次数、卡密充值、公告查看"]},{v:"1.2.0",date:"2026-03-29",items:["修复部分歌曲解析失败的问题","优化界面交互体验"]}];function n(e,t){return document.querySelector(e)}function b(e,t){return Array.prototype.slice.call((t||document).querySelectorAll(e))}var q=null;function d(e,t){q||(q=document.createElement("div"),q.style.cssText="position:fixed;top:18px;left:50%;transform:translateX(-50%);z-index:99999;display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none;",document.body.appendChild(q));var a=document.createElement("div");a.textContent=e,a.style.cssText="padding:10px 18px;border-radius:10px;font-size:13px;color:#fff;background:"+(t==="error"?"linear-gradient(135deg,#ff5f57,#e0483f)":t==="success"?"linear-gradient(135deg,#34c759,#2aa64c)":"rgba(30,30,30,.92)")+";box-shadow:0 6px 24px rgba(0,0,0,.25);opacity:0;transform:translateY(-8px);transition:all .25s;max-width:80vw;",q.appendChild(a),requestAnimationFrame(function(){a.style.opacity="1",a.style.transform="translateY(0)"}),setTimeout(function(){a.style.opacity="0",a.style.transform="translateY(-8px)",setTimeout(function(){a.remove()},300)},2600)}function l(e,t){var a=Object.keys(t||{}).map(function(o){return encodeURIComponent(o)+"="+encodeURIComponent(t[o]==null?"":t[o])}).join("&"),i=typeof AbortController<"u"?new AbortController:null,r=null;return i&&(r=setTimeout(function(){try{i.abort()}catch{}},3e4)),fetch(e,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded;charset=UTF-8"},body:a,credentials:"same-origin",signal:i?i.signal:void 0}).then(function(o){return o.json().then(function(s){return r&&clearTimeout(r),s},function(s){throw r&&clearTimeout(r),s})}).catch(function(){return r&&clearTimeout(r),{status:0,success:!1,message:"网络异常,请检查连接后重试"}})}function Ne(e){var t=typeof AbortController<"u"?new AbortController:null,a=null;return t&&(a=setTimeout(function(){try{t.abort()}catch{}},15e3)),fetch(e,{credentials:"same-origin",signal:t?t.signal:void 0}).then(function(i){return i.json().then(function(r){return a&&clearTimeout(a),r},function(r){throw a&&clearTimeout(a),r})})}function Fe(){if(window.__siteDeviceIdCache)return window.__siteDeviceIdCache;var e="netease_device_id",t="";try{t=localStorage.getItem(e)||""}catch{}if(!t){t="dev-"+Date.now().toString(36)+"-"+Math.random().toString(36).slice(2,10);try{localStorage.setItem(e,t)}catch{}}return window.__siteDeviceIdCache=t,t}var c=null,_="",h=null,re=!1,ie=3,oe=["changelog-modal","stats-modal","api-modal","cookie-modal","login-modal","register-modal","announce-modal"];function B(e){if(oe.indexOf(e)!==-1){kt(e);return}var t=n("#"+e);t&&t.classList.add("show")}function p(e){if(oe.indexOf(e)!==-1){Et(e);return}var t=n("#"+e);t&&t.classList.remove("show")}function D(){window.SITE_LOGGED_IN=!!c;var e=!c&&re,t=n("#btn-open-register");t&&(t.hidden=!e),["goto-register","goto-register2"].forEach(function(g){var k=n("#"+g);k&&(k.hidden=!e)}),b(".auth-trial-box").forEach(function(g){g.hidden=!e}),b(".reg-gift-num").forEach(function(g){g.textContent=ie});var a=n("#auth-guest-area"),i=n("#auth-user-area");if(a&&i)if(c){a.hidden=!0,i.hidden=!1;var r=n("#auth-duration-pill");r&&(r.textContent="⏳ "+(_||"0 次"));var o=n("#user-avatar");o&&(o.textContent=(c.username||"U").charAt(0).toUpperCase(),o.title=c.username+(c.role==="admin"?"(管理员)":""))}else a.hidden=!1,i.hidden=!0;var s=n("#tab-usercenter"),u=n("#tab-useradmin");s&&(s.hidden=!c),u&&(u.hidden=!(c&&c.role==="admin"));var f=n("#tab-global");f&&(f.hidden=!(c&&c.role==="admin"))}function X(){return Ne("/auth/me").then(function(e){var t=e.data||{};if(c=t.user||null,_=t.duration_text||"",h=t.announcement||null,re=!!t.smtp_configured,typeof t.register_credits=="number"&&(ie=t.register_credits),D(),S(),ge(),c&&typeof window.SITE_TASKS_BOOTSTRAP=="function")try{window.SITE_TASKS_BLine truncated
|
||||
`).map(function(o){return v(o)}).join("<br>"));var r=document.getElementById("cookie-modal");if(!(r&&r.classList.contains("show")))if(B("announce-modal"),c)l("/auth/ann_seen",{});else try{localStorage.setItem("netease_ann_once_seen",String(h.updated_at))}catch{}}}function v(e){return String(e??"").replace(/[&<>"']/g,function(t){return{"&":"&","<":"<",">":">",'"':""","'":"'"}[t]})}var pe=!1,G="success";function nt(){var e=n("#ua-gate"),t=n("#ua-content");if(!(!e||!t)){var a=!!(c&&c.role==="admin");e.hidden=a,t.hidden=!a,a&&!pe&&(pe=!0,C(),$(),dt(),A(),V(),gt(),Q())}}function at(){b("#admin-side .admin-side-item[data-view]").forEach(function(u){u.setAttribute("tabindex","0"),u.setAttribute("role","button"),u.addEventListener("click",function(){b("#admin-side .admin-side-item").forEach(function(f){f.classList.remove("active")}),u.classList.add("active"),b(".admin-view").forEach(function(f){f.classList.toggle("active",f.getAttribute("data-aview")===u.getAttribute("data-view"))})}),u.addEventListener("keydown",function(f){(f.key==="Enter"||f.key===" ")&&(f.preventDefault(),u.click())})});var e=n("#ua-back");e&&e.addEventListener("click",function(){var u=n("#tab-useradmin");u&&u.classList.remove("active");var f=document.querySelector('.tab[data-tab="search"]');f&&f.click()});var t=n("#ua-logout");t&&t.addEventListener("click",ve),[e,t].forEach(function(u){u&&(u.setAttribute("tabindex","0"),u.setAttribute("role","button"),u.addEventListener("keydown",function(f){(f.key==="Enter"||f.key===" ")&&(f.preventDefault(),u.click())}))});var a=n("#ua-playkey-show"),i=n("#ua-playkey-value");function r(u){navigator.clipboard&&navigator.clipboard.writeText?navigator.clipboard.writeText(u).then(function(){d("密钥已复制","success")},function(){d("复制失败,请手动选择文本复制","error")}):d("复制失败,请点击「显示密钥」后手动复制","error")}a&&a.addEventListener("click",function(){if(a.dataset.state==="shown"){i.value="",i.placeholder="点击「显示密钥」查看",a.textContent="显示密钥",a.dataset.state="";return}l("/admin/site/play_key/get",{}).then(function(u){if(u.status!==200){d(u.message||"获取失败","error");return}i.value=u.data.key,a.textContent="隐藏",a.dataset.state="shown"})});var o=n("#ua-playkey-copy");o&&o.addEventListener("click",function(){l("/admin/site/play_key/get",{}).then(function(u){if(u.status!==200){d(u.message||"获取失败","error");return}r(u.data.key)})});var s=n("#ua-playkey-rotate");s&&s.addEventListener("click",function(){confirm("刷新后旧密钥立即全部失效(外部旧地址将打不开),确定继续?")&&l("/admin/site/play_key/rotate",{}).then(function(u){if(u.status!==200){d(u.message||"刷新失败","error");return}i.value=u.data.key,a.textContent="隐藏",a.dataset.state="shown",d("密钥已刷新,旧密钥已全部失效","success")})})}function rt(){var e=n("#ua-users-refresh");if(!(!e||n("#ua-user-create"))){var t=document.createElement("button");t.className="btn btn-sm btn-primary",t.id="ua-user-create",t.type="button",t.textContent="➕ 添加用户",t.addEventListener("click",it),e.parentNode.insertBefore(t,e)}}function it(){var e=n("#site-create-user-modal");e&&e.remove();var t=document.createElement("div");t.className="modal-mask show",t.id="site-create-user-modal",t.setAttribute("data-dynamic","1"),t.innerHTML='<div class="modal" style="width:400px;"> <div class="modal-header"><div class="modal-title">➕ 添加用户</div></div> <div class="modal-body"> <input class="input" id="cnu-username" placeholder="用户名(3-20位)" style="width:100%;margin-bottom:10px;"/> <input class="input" id="cnu-password" placeholder="初始密码(至少8位)" style="width:100%;margin-bottom:10px;"/> <input class="input" id="cnu-email" placeholder="邮箱(可选)" style="width:100%;margin-bottom:10px;"/> <input class="input" id="cnu-count" type="number" min="0" value="10" placeholder="下载次数" style="width:100%;"/> </div> <div style="display:flex;gap:10px;padding:0 22px 20px;"> <button class="btn btn-primary" id="cnu-submit" type="button" style="flex:1;">创 建</button> <button class="btn" id="cnu-cancel" type="button" style="flex:1;">取消</button> </div></div>',document.body.appendChild(t),t.addEventListener("click",function(r){r.target===t&&t.remove()});var a=n("#cnu-cancel");a&&a.addEventListener("click",function(){t.remove()});var i=n("#cnu-submit");i&&i.addEventListener("click",function(){var r={username:(n("#cnu-username")||{}).value||"",password:(n("#cnu-password")||{}).value||"",email:(n("#cnu-email")||{}).value||"",count:(n("#cnu-count")||{}).value||0};if(!r.username||r.password.length<8){d("请填写用户名和至少 8 位密码","error");return}i.disabled=!0,l("/admin/site/user/create",r).then(function(o){d(o.message||(o.status===200?"创建成功":"创建失败"),o.status===200?"success":"error"),o.status===200&&(t.remove(),C())}).finally(function(){i.disabled=!1
Line truncated
|
||||
请输入封禁原因(将展示给用户):`,"违规使用,封禁处理");if(s===null)return;l("/admin/site/user/ban",{id:r.getAttribute("data-uban"),action:"ban",reason:s}).then(function(u){d(u.message||(u.status===200?"已封禁":"操作失败"),u.status===200?"success":"error"),u.status===200&&C()})}else{if(!window.confirm("解封用户「"+o+"」?解封后可正常登录使用。"))return;l("/admin/site/user/ban",{id:r.getAttribute("data-uban"),action:"unban"}).then(function(u){d(u.message||(u.status===200?"已解封":"操作失败"),u.status===200?"success":"error"),u.status===200&&C()})}})}),b("[data-udel]",t).forEach(function(r){r.addEventListener("click",function(){window.confirm("确定删除用户「"+r.getAttribute("data-name")+"」?")&&l("/admin/site/user/delete",{id:r.getAttribute("data-udel")}).then(function(o){d(o.message||"已删除",o.status===200?"success":"error"),C()})})}),b("[data-ucookie]",t).forEach(function(r){r.addEventListener("click",function(){l("/admin/site/user/cookie",{username:r.getAttribute("data-ucookie")}).then(function(o){if(o.status!==200){d(o.message||"获取失败","error");return}var s=o.data&&o.data.cookie||"";if(!s){d("该用户未登录过网易云账号","info");return}prompt("用户网易云 Cookie(Ctrl+C 复制):",s)})})})}})}var w=null,F="",K=0;function $(){l("/admin/cookie/status",{}).then(function(e){var t=n("#ua-cookie-status");if(t){if(e.status!==200){t.textContent=e.message||"获取失败";return}var a=e.data||{};t.textContent=(a.is_valid?"✅ 有效":"❌ 未登录")+(a.cookie_count!=null?" · Cookie "+a.cookie_count+" 个":"")}})}function ot(){l("/admin/qr/create",{}).then(function(e){if(e.status!==200){d(e.message||"生成二维码失败","error");return}var t=e.data||{};F=t.unikey||"";var a=n("#ua-qr-box"),i=n("#ua-qr-tip");if(t.qr_svg){var r="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(t.qr_svg)));a.innerHTML='<img src="'+r+'" style="width:180px;height:180px;" alt="二维码"/>'}i&&(i.textContent="请使用网易云音乐手机 APP 扫码"),w&&clearInterval(w),K++,w=setInterval(st,3e3)})}function st(){if(!F){w&&clearInterval(w);return}var e=K;l("/admin/qr/check",{unikey:F}).then(function(t){if(e===K){var a=n("#ua-qr-tip");if(t.status!==200){w&&clearInterval(w),a&&(a.textContent=t.message||"检查失败");return}var i=t.data&&t.data.status;i==="waiting"?a&&(a.textContent="等待扫码..."):i==="scanned"?a&&(a.textContent="✅ 已扫码,请在手机上确认"):i==="success"?(w&&clearInterval(w),a&&(a.textContent="🎉 登录成功,Cookie 已保存"),d("全局账号登录成功","success"),$()):(w&&clearInterval(w),a&&(a.textContent="二维码已过期,请重新生成"))}})}function ut(){window.confirm("确定删除全局 Cookie?删除后需重新扫码登录。")&&l("/admin/cookie/delete",{}).then(function(e){w&&clearInterval(w),F="",K++,d(e.message||"已删除",e.status===200?"success":"error");var t=n("#ua-qr-box"),a=n("#ua-qr-tip");t&&(t.innerHTML=""),a&&(a.textContent="点击下方按钮生成二维码"),$()})}function dt(){l("/admin/site/smtp/get",{}).then(function(e){if(e.status===200){var t=e.data||{};n("#ua-smtp-host")&&(n("#ua-smtp-host").value=t.host||""),n("#ua-smtp-port")&&(n("#ua-smtp-port").value=t.port||587),n("#ua-smtp-sender")&&(n("#ua-smtp-sender").value=t.sender||"")}})}function ct(){l("/admin/site/smtp/save",{host:(n("#ua-smtp-host")||{}).value||"",port:(n("#ua-smtp-port")||{}).value||587,sender:(n("#ua-smtp-sender")||{}).value||"",password:(n("#ua-smtp-pass")||{}).value||""}).then(function(e){d(e.message||"已保存",e.status===200?"success":"error");var t=n("#ua-smtp-pass");t&&(t.value="")})}function lt(){var e=(n("#ua-smtp-test-to")||{}).value||"";if(!e){d("请填写测试收件邮箱","error");return}var t=n("#ua-smtp-test");t.disabled=!0,l("/admin/site/smtp/test",{to:e}).then(function(a){d(a.message||"已发送",a.status===200?"success":"error")}).finally(function(){t.disabled=!1})}var E=1;function A(){l("/admin/site/logs",{type:G,page:E}).then(function(e){var t=n("#ua-log-list");if(t){if(e.status!==200){t.textContent=e.message||"加载失败";return}var a=e.data&&e.data.logs||[],i=e.data&&e.data.total||0,r=e.data&&e.data.pages||1;E=e.data&&e.data.page||1,window._uaLogPages=r;var o;if((o=n("#ua-log-page"))&&(o.textContent=E),(o=n("#ua-log-pages"))&&(o.textContent=r),(o=n("#ua-log-total"))&&(o.textContent=i),!a.length){t.textContent="暂无日志";return}t.innerHTML=a.map(function(s){return"<div>["+v(s.time)+"] "+v(s.username||"-")+" · "+v(s.action)+" · IP "+v(s.ip)+(s.detail?" · "+v(s.detail):"")+"</div>"}).join("")}})}function ft(){var e=G==="fail"?"失败":"成功";window.confirm("确定清除全部「"+e+"」日志?该操作不可恢复。")&&l("/admin/site/logs/clear",{type:G}).then(function(t){d(t.message||(t.status===200?"已清除":"清除失败"),t.status===200?"success":"error"),E=1,A()})}function mt(){var e=(n("#ua-card-minutes")||{}).value||"10";if(e==="custom"&&(e=(n("#
Line truncated
|
||||
`)),d("已生成 "+(t.data.count||0)+" 张卡密("+(t.data.credits||0)+" 次/张),已复制到文本框,请及时保存","success"),V(0)})}var I=0,Y=0,ae=100;function vt(e,t){if(t&&!(e==="delete"&&!window.confirm("确定删除卡密 "+t.slice(0,4)+"**** 吗?删除后不可恢复。"))){var a=e==="delete"?"/admin/site/cards/delete":"/admin/site/cards/disable",i={code:t,disabled:e==="enable"?"0":"1"};l(a,i).then(function(r){d(r.message||(r.status===200?"操作成功":"操作失败"),r.status===200?"success":"error"),r.status===200&&V()})}}function be(){var e=n("#ua-cards-pager");if(e){if(Y<=0){e.hidden=!0;return}var t=Math.max(1,Math.ceil(Y/ae));e.hidden=!1,e.textContent="";var a=document.createElement("button");a.className="btn btn-sm",a.type="button",a.textContent="上一页",a.disabled=I<=0,a.addEventListener("click",function(){V(I-1)});var i=document.createElement("button");i.className="btn btn-sm",i.type="button",i.textContent="下一页",i.disabled=I>=t-1,i.addEventListener("click",function(){V(I+1)});var r=document.createElement("span");r.className="hint",r.textContent="第 "+(I+1)+" / "+t+" 页 · 共 "+Y+" 张",e.appendChild(a),e.appendChild(r),e.appendChild(i)}}function V(e){typeof e=="number"&&(I=Math.max(0,e)),l("/admin/site/cards/list",{limit:ae,offset:I*ae}).then(function(t){var a=n("#ua-cards-body");if(a){if(t.status!==200){a.innerHTML='<tr><td colspan="8">加载失败</td></tr>';return}var i=t.data&&t.data.cards||[];if(Y=t.data&&t.data.total||0,!i.length){a.innerHTML='<tr><td colspan="8">暂无卡密</td></tr>',be();return}a.innerHTML=i.map(function(r){var o,s;return r.used_by?(o="已使用",s='<span class="hint">—</span>'):r.disabled?(o="已禁用",s='<button class="btn btn-sm" data-card-act="enable" data-card-code="'+v(r.code)+'" type="button">启用</button> <button class="btn btn-danger btn-sm" data-card-act="delete" data-card-code="'+v(r.code)+'" type="button">删除</button>'):(o=r.expired?"已过期":"未使用",s='<button class="btn btn-sm" data-card-act="disable" data-card-code="'+v(r.code)+'" type="button">禁用</button> <button class="btn btn-danger btn-sm" data-card-act="delete" data-card-code="'+v(r.code)+'" type="button">删除</button>'),"<tr><td>"+v(r.code)+"</td><td>"+v(String(r.minutes))+" 次</td><td>"+o+"</td><td>"+v(r.used_by||"-")+"</td><td>"+v(r.note||"-")+"</td><td>"+(r.expire_at?new Date(r.expire_at*1e3).toLocaleDateString():"永久")+"</td><td>"+v(r.created_at?new Date(r.created_at*1e3).toLocaleDateString():"-")+"</td><td>"+s+"</td></tr>"}).join(""),be(),Array.prototype.forEach.call(a.querySelectorAll("button[data-card-act]"),function(r){r.addEventListener("click",function(){vt(r.getAttribute("data-card-act"),r.getAttribute("data-card-code"))})})}})}function gt(){l("/admin/site/ann/get",{}).then(function(e){if(e.status===200){var t=e.data||{};n("#ua-ann-title")&&(n("#ua-ann-title").value=t.title||""),n("#ua-ann-content")&&(n("#ua-ann-content").value=t.content||""),n("#ua-ann-mode")&&(n("#ua-ann-mode").value=t.popup_mode||"off")}})}function pt(){l("/admin/site/ann/save",{title:(n("#ua-ann-title")||{}).value||"",content:(n("#ua-ann-content")||{}).value||"",popup_mode:(n("#ua-ann-mode")||{}).value||"off"}).then(function(e){d(e.message||"已保存",e.status===200?"success":"error")})}function he(e){return!e&&e!==0?"-":e>1048576?(e/1048576).toFixed(2)+" MB":e>1024?(e/1024).toFixed(1)+" KB":e+" B"}function Q(){l("/admin/site/backup/list",{}).then(function(e){var t=n("#ua-db-body");if(t){if(e.status!==200){t.innerHTML='<tr><td colspan="4">加载失败</td></tr>';return}var a=e.data||{},i=n("#ua-db-size");i&&(i.textContent=he(a.db_size||0));var r=n("#ua-db-hours");r&&a.interval_hours!=null&&(r.value=a.interval_hours);var o=a.backups||[];if(!o.length){t.innerHTML='<tr><td colspan="4">暂无备份</td></tr>';return}t.innerHTML=o.map(function(s){return"<tr><td>"+v(s.name)+"</td><td>"+he(s.size)+"</td><td>"+v(s.time)+'</td><td><a class="btn btn-sm" href="/admin/site/backup/download?name='+encodeURIComponent(s.name)+'">下载</a> <button class="btn btn-sm" data-restore="'+v(s.name)+'">恢复</button> <button class="btn btn-sm" data-bdel="'+v(s.name)+'" style="color:var(--color-error);">删除</button></td></tr>'}).join(""),b("[data-restore]",t).forEach(function(s){s.addEventListener("click",function(){window.confirm("确定用该备份覆盖当前数据库?")&&l("/admin/site/backup/restore",{name:s.getAttribute("data-restore")}).then(function(u){d(u.message||"已恢复",u.status===200?"success":"error"),u.status===200&&setTimeout(function(){location.reload()},1200)})})}),b("[data-bdel]",t).forEach(function(s){s.addEventListener("click",function(){window.confirm("确定删除该备份?")&&l("/admin/site/backup/delete",{name:s.getAttribute("data-bdel")}).then(function(u){d(u.message||"已删除",u.status===200?"success":"error"),Q()})})})}})}function bt(){l("/admin/site/backup/create",{}).then(function(e){d(e.message||"备份完成",e.status===200?"success":"error"
Line truncated
|
||||
//# sourceMappingURL=auth.js.map
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"auth.js","sources":["../../src/controllers/auth.ts"],"sourcesContent":["// @ts-nocheck\n/* 站点账号系统(由旧版 static/site_auth.js 逐字移植)。\n * 与主逻辑通过 window.* 钩子双向协作——与旧版一致,暂不模块化。\n * 全部副作用包在 __authBoot() 中——React 挂载骨架后由 App 调用。 */\nimport { openModal as busOpen, closeModal as busClose, isModalOpen } from '../ui/modalBus'\nexport function __authBoot() {\n/* ============================================================\n * 云村小助手 - 站点账号系统前端逻辑(按次计费版)\n * 未经授权不得复制、修改或用于商业用途\n * ============================================================ */\n/* Promise.finally 老内核 polyfill(与 index.html 同一份标准实现——\n index.html 的脚本先加载,这里再兜底一次确保独立引用时也安全) */\n if (!Promise.prototype.finally) {\n Promise.prototype.finally = function (cb) {\n var P = this.constructor || Promise;\n return this.then(\n function (v) { return P.resolve(cb()).then(function () { return v; }); },\n function (e) { return P.resolve(cb()).then(function () { throw e; }); }\n );\n };\n }\n\n var SITE_VERSION = '2.4.0'; // 与后端 APP_VERSION、index.html CHANGELOG 对齐\n var CHANGELOG = [\n { v: '2.4.0', date: '2026-09-21', items: ['修复:老内核浏览器(Chrome 57-62)操作按钮卡加载的问题', '安全:登录失败次数过多临时锁定;公网错误信息不再暴露内部细节', '优化:用户列表不再携带明文网易云 Cookie(按需单独查看)'] },\n { v: '2.1.0', date: '2026-08-28', items: ['计费改为按次计费:一首歌 1 次,歌单打包按歌曲数量扣减', '免费试用改为 3 次(3 首歌),注册页领取,每设备限一次', '卡密系统升级为次数卡,后台可管理用户次数'] },\n { v: '2.0.0', date: '2026-08-28', items: ['新增站点账号系统:强制登录、邮箱验证码注册', '新增管理后台:用户管理、全局Cookie、SMTP、日志、卡密、公告、数据库备份', '新增个人中心:剩余次数、卡密充值、公告查看'] },\n { v: '1.2.0', date: '2026-03-29', items: ['修复部分歌曲解析失败的问题', '优化界面交互体验'] }\n ];\n\n function $(s, root) { return (root || document).querySelector(s); }\n function $$(s, root) { return Array.prototype.slice.call((root || document).querySelectorAll(s)); }\n\n /* ---------------- toast ---------------- */\n var toastWrap = null;\n function toast(msg, type?: any) {\n if (!toastWrap) {\n toastWrap = document.createElement('div');\n toastWrap.style.cssText = 'position:fixed;top:18px;left:50%;transform:translateX(-50%);z-index:99999;display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none;';\n document.body.appendChild(toastWrap);\n }\n var t = document.createElement('div');\n t.textContent = msg;\n t.style.cssText = 'padding:10px 18px;border-radius:10px;font-size:13px;color:#fff;background:' +\n (type === 'error' ? 'linear-gradient(135deg,#ff5f57,#e0483f)' :\n type === 'success' ? 'linear-gradient(135deg,#34c759,#2aa64c)' : 'rgba(30,30,30,.92)') +\n ';box-shadow:0 6px 24px rgba(0,0,0,.25);opacity:0;transform:translateY(-8px);transition:all .25s;max-width:80vw;';\n toastWrap.appendChild(t);\n requestAnimationFrame(function () { t.style.opacity = '1'; t.style.transform = 'translateY(0)'; });\n setTimeout(function () {\n t.style.opacity = '0'; t.style.transform = 'translateY(-8px)';\n setTimeout(function () { t.remove(); }, 300);\n }, 2600);\n }\n\n /* ---------------- 请求 ---------------- */\n function api(url, params) {\n var body = Object.keys(params || {}).map(function (k) {\n return encodeURIComponent(k) + '=' + encodeURIComponent(params[k] == null ? '' : params[k]);\n }).join('&');\n // 30 秒超时:服务端挂起时不再无限等待(登录含省份查询约 5s 上限,留足余量;\n // 无 AbortController 的老内核优雅降级为无超时)\n var ctl = (typeof AbortController !== 'undefined') ? new AbortController() : null;\n var timer = null;\n if (ctl) timer = setTimeout(function () { try { ctl.abort(); } catch (e) {} }, 30000);\n return fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' },\n body: body,\n credentials: 'same-origin',\n signal: ctl ? ctl.signal : undefined\n }).then(function (r) {\n // 双回调解包(不用 Promise.finally:兼容 Chromium 57+ Line truncated
|
||||
Reference in new issue
Block a user