mirror of
https://git-qiuchenly.yltfspace.com/QiuChenly/corepatch
synced 2025-11-25 04:35:07 +08:00
*核心功能* • 预破解包发布功能:开发者可上传预破解包到云存储,一键绑定到应用并自定义版本号和 Beta 状态 • 用户个人信息更新和密码修改:支持编辑个人信息、修改密码,新增设备配置管理功能 • 标签页组件和分页组件:新增通用组件,提升界面一致性和用户体验 *管理员功能* • 讨论区管理增强:支持批量管理、状态筛选、一键批准申请 • 管理员面板扩展:新增文件管理、App管理、系统设置等模块 *讨论区功能* • 讨论区权限批量查询优化:减少多次请求,提升页面加载速度 • 讨论区申请开通功能:用户可申请开放讨论区,管理员审核通过后自动开放 *通信与通知* • 私信系统:支持一对一私信,可发送文本、图片和文件 • 系统通知中心:集中管理所有重要通知,支持展开查看详情和标记已读 *性能优化* • 网络请求性能大幅提升:支持多请求并发处理 • 可自定义网络请求并发数:根据网络环境和设备性能灵活调整
32 lines
586 KiB
JavaScript
32 lines
586 KiB
JavaScript
(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))o(a);new MutationObserver(a=>{for(const l of a)if(l.type==="childList")for(const i of l.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&o(i)}).observe(document,{childList:!0,subtree:!0});function s(a){const l={};return a.integrity&&(l.integrity=a.integrity),a.referrerPolicy&&(l.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?l.credentials="include":a.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function o(a){if(a.ep)return;a.ep=!0;const l=s(a);fetch(a.href,l)}})();/**
|
||
* @vue/shared v3.5.22
|
||
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
||
* @license MIT
|
||
**/function xl(e){const t=Object.create(null);for(const s of e.split(","))t[s]=1;return s=>s in t}const mt={},cn=[],ns=()=>{},Br=()=>!1,ia=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Al=e=>e.startsWith("onUpdate:"),xt=Object.assign,Tl=(e,t)=>{const s=e.indexOf(t);s>-1&&e.splice(s,1)},Td=Object.prototype.hasOwnProperty,ut=(e,t)=>Td.call(e,t),Je=Array.isArray,un=e=>vo(e)==="[object Map]",$n=e=>vo(e)==="[object Set]",si=e=>vo(e)==="[object Date]",et=e=>typeof e=="function",$t=e=>typeof e=="string",rs=e=>typeof e=="symbol",vt=e=>e!==null&&typeof e=="object",jr=e=>(vt(e)||et(e))&&et(e.then)&&et(e.catch),qr=Object.prototype.toString,vo=e=>qr.call(e),Ed=e=>vo(e).slice(8,-1),Hr=e=>vo(e)==="[object Object]",El=e=>$t(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,qn=xl(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),ra=e=>{const t=Object.create(null);return s=>t[s]||(t[s]=e(s))},Rd=/-\w/g,Zt=ra(e=>e.replace(Rd,t=>t.slice(1).toUpperCase())),Ud=/\B([A-Z])/g,Bs=ra(e=>e.replace(Ud,"-$1").toLowerCase()),ca=ra(e=>e.charAt(0).toUpperCase()+e.slice(1)),Ma=ra(e=>e?`on${ca(e)}`:""),Ns=(e,t)=>!Object.is(e,t),Mo=(e,...t)=>{for(let s=0;s<e.length;s++)e[s](...t)},zr=(e,t,s,o=!1)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:o,value:s})},Wo=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Pd=e=>{const t=$t(e)?Number(e):NaN;return isNaN(t)?e:t};let ni;const ua=()=>ni||(ni=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function St(e){if(Je(e)){const t={};for(let s=0;s<e.length;s++){const o=e[s],a=$t(o)?Nd(o):St(o);if(a)for(const l in a)t[l]=a[l]}return t}else if($t(e)||vt(e))return e}const Md=/;(?![^(]*\))/g,Dd=/:([^]+)/,Ld=/\/\*[^]*?\*\//g;function Nd(e){const t={};return e.replace(Ld,"").split(Md).forEach(s=>{if(s){const o=s.split(Dd);o.length>1&&(t[o[0].trim()]=o[1].trim())}}),t}function Te(e){let t="";if($t(e))t=e;else if(Je(e))for(let s=0;s<e.length;s++){const o=Te(e[s]);o&&(t+=o+" ")}else if(vt(e))for(const s in e)e[s]&&(t+=s+" ");return t.trim()}const Od="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",Fd=xl(Od);function Wr(e){return!!e||e===""}function Vd(e,t){if(e.length!==t.length)return!1;let s=!0;for(let o=0;s&&o<e.length;o++)s=sn(e[o],t[o]);return s}function sn(e,t){if(e===t)return!0;let s=si(e),o=si(t);if(s||o)return s&&o?e.getTime()===t.getTime():!1;if(s=rs(e),o=rs(t),s||o)return e===t;if(s=Je(e),o=Je(t),s||o)return s&&o?Vd(e,t):!1;if(s=vt(e),o=vt(t),s||o){if(!s||!o)return!1;const a=Object.keys(e).length,l=Object.keys(t).length;if(a!==l)return!1;for(const i in e){const r=e.hasOwnProperty(i),c=t.hasOwnProperty(i);if(r&&!c||!r&&c||!sn(e[i],t[i]))return!1}}return String(e)===String(t)}function Rl(e,t){return e.findIndex(s=>sn(s,t))}const Kr=e=>!!(e&&e.__v_isRef===!0),h=e=>$t(e)?e:e==null?"":Je(e)||vt(e)&&(e.toString===qr||!et(e.toString))?Kr(e)?h(e.value):JSON.stringify(e,Gr,2):String(e),Gr=(e,t)=>Kr(t)?Gr(e,t.value):un(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((s,[o,a],l)=>(s[Da(o,l)+" =>"]=a,s),{})}:$n(t)?{[`Set(${t.size})`]:[...t.values()].map(s=>Da(s))}:rs(t)?Da(t):vt(t)&&!Je(t)&&!Hr(t)?String(t):t,Da=(e,t="")=>{var s;return rs(e)?`Symbol(${(s=e.description)!=null?s:t})`:e};function Bd(e){return e==null?"initial":typeof e=="string"?e===""?" ":e:String(e)}/**
|
||
* @vue/reactivity v3.5.22
|
||
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
||
* @license MIT
|
||
**/let Ht;class Qr{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=Ht,!t&&Ht&&(this.index=(Ht.scopes||(Ht.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;t<s;t++)this.scopes[t].pause();for(t=0,s=this.effects.length;t<s;t++)this.effects[t].pause()}}resume(){if(this._active&&this._isPaused){this._isPaused=!1;let t,s;if(this.scopes)for(t=0,s=this.scopes.length;t<s;t++)this.scopes[t].resume();for(t=0,s=this.effects.length;t<s;t++)this.effects[t].resume()}}run(t){if(this._active){const s=Ht;try{return Ht=this,t()}finally{Ht=s}}}on(){++this._on===1&&(this.prevScope=Ht,Ht=this)}off(){this._on>0&&--this._on===0&&(Ht=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let s,o;for(s=0,o=this.effects.length;s<o;s++)this.effects[s].stop();for(this.effects.length=0,s=0,o=this.cleanups.length;s<o;s++)this.cleanups[s]();if(this.cleanups.length=0,this.scopes){for(s=0,o=this.scopes.length;s<o;s++)this.scopes[s].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!t){const a=this.parent.scopes.pop();a&&a!==this&&(this.parent.scopes[this.index]=a,a.index=this.index)}this.parent=void 0}}}function jd(e){return new Qr(e)}function qd(){return Ht}let ht;const La=new WeakSet;class Jr{constructor(t){this.fn=t,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,Ht&&Ht.active&&Ht.effects.push(this)}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,La.has(this)&&(La.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||Zr(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,oi(this),Yr(this);const t=ht,s=os;ht=this,os=!0;try{return this.fn()}finally{ec(this),ht=t,os=s,this.flags&=-3}}stop(){if(this.flags&1){for(let t=this.deps;t;t=t.nextDep)Ml(t);this.deps=this.depsTail=void 0,oi(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?La.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){tl(this)&&this.run()}get dirty(){return tl(this)}}let Xr=0,Hn,zn;function Zr(e,t=!1){if(e.flags|=8,t){e.next=zn,zn=e;return}e.next=Hn,Hn=e}function Ul(){Xr++}function Pl(){if(--Xr>0)return;if(zn){let t=zn;for(zn=void 0;t;){const s=t.next;t.next=void 0,t.flags&=-9,t=s}}let e;for(;Hn;){let t=Hn;for(Hn=void 0;t;){const s=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(o){e||(e=o)}t=s}}if(e)throw e}function Yr(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function ec(e){let t,s=e.depsTail,o=s;for(;o;){const a=o.prevDep;o.version===-1?(o===s&&(s=a),Ml(o),Hd(o)):t=o,o.dep.activeLink=o.prevActiveLink,o.prevActiveLink=void 0,o=a}e.deps=t,e.depsTail=s}function tl(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(tc(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function tc(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===eo)||(e.globalVersion=eo,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!tl(e))))return;e.flags|=2;const t=e.dep,s=ht,o=os;ht=e,os=!0;try{Yr(e);const a=e.fn(e._value);(t.version===0||Ns(a,e._value))&&(e.flags|=128,e._value=a,t.version++)}catch(a){throw t.version++,a}finally{ht=s,os=o,ec(e),e.flags&=-3}}function Ml(e,t=!1){const{dep:s,prevSub:o,nextSub:a}=e;if(o&&(o.nextSub=a,e.prevSub=void 0),a&&(a.prevSub=o,e.nextSub=void 0),s.subs===e&&(s.subs=o,!o&&s.computed)){s.computed.flags&=-5;for(let l=s.computed.deps;l;l=l.nextDep)Ml(l,!0)}!t&&!--s.sc&&s.map&&s.map.delete(s.key)}function Hd(e){const{prevDep:t,nextDep:s}=e;t&&(t.nextDep=s,e.prevDep=void 0),s&&(s.prevDep=t,e.nextDep=void 0)}let os=!0;const sc=[];function Ss(){sc.push(os),os=!1}function xs(){const e=sc.pop();os=e===void 0?!0:e}function oi(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const s=ht;ht=void 0;try{t()}finally{ht=s}}}let eo=0;class zd{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 Dl{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(!ht||!os||ht===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==ht)s=this.activeLink=new zd(ht,this),ht.deps?(s.prevDep=ht.depsTail,ht.depsTail.nextDep=s,ht.depsTail=s):ht.deps=ht.depsTail=s,nc(s);else if(s.version===-1&&(s.version=this.version,s.nextDep)){const o=s.nextDep;o.prevDep=s.prevDep,s.prevDep&&(s.prevDep.nextDep=o),s.prevDep=ht.depsTail,s.nextDep=void 0,ht.depsTail.nextDep=s,ht.depsTail=s,ht.deps===s&&(ht.deps=o)}return s}trigger(t){this.version++,eo++,this.notify(t)}notify(t){Ul();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{Pl()}}}function nc(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let o=t.deps;o;o=o.nextDep)nc(o)}const s=e.dep.subs;s!==e&&(e.prevSub=s,s&&(s.nextSub=e)),e.dep.subs=e}}const sl=new WeakMap,Ys=Symbol(""),nl=Symbol(""),to=Symbol("");function Pt(e,t,s){if(os&&ht){let o=sl.get(e);o||sl.set(e,o=new Map);let a=o.get(s);a||(o.set(s,a=new Dl),a.map=o,a.key=s),a.track()}}function $s(e,t,s,o,a,l){const i=sl.get(e);if(!i){eo++;return}const r=c=>{c&&c.trigger()};if(Ul(),t==="clear")i.forEach(r);else{const c=Je(e),p=c&&El(s);if(c&&s==="length"){const d=Number(o);i.forEach((v,b)=>{(b==="length"||b===to||!rs(b)&&b>=d)&&r(v)})}else switch((s!==void 0||i.has(void 0))&&r(i.get(s)),p&&r(i.get(to)),t){case"add":c?p&&r(i.get("length")):(r(i.get(Ys)),un(e)&&r(i.get(nl)));break;case"delete":c||(r(i.get(Ys)),un(e)&&r(i.get(nl)));break;case"set":un(e)&&r(i.get(Ys));break}}Pl()}function an(e){const t=it(e);return t===e?t:(Pt(t,"iterate",to),Jt(e)?t:t.map(Rt))}function da(e){return Pt(e=it(e),"iterate",to),e}const Wd={__proto__:null,[Symbol.iterator](){return Na(this,Symbol.iterator,Rt)},concat(...e){return an(this).concat(...e.map(t=>Je(t)?an(t):t))},entries(){return Na(this,"entries",e=>(e[1]=Rt(e[1]),e))},every(e,t){return bs(this,"every",e,t,void 0,arguments)},filter(e,t){return bs(this,"filter",e,t,s=>s.map(Rt),arguments)},find(e,t){return bs(this,"find",e,t,Rt,arguments)},findIndex(e,t){return bs(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return bs(this,"findLast",e,t,Rt,arguments)},findLastIndex(e,t){return bs(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return bs(this,"forEach",e,t,void 0,arguments)},includes(...e){return Oa(this,"includes",e)},indexOf(...e){return Oa(this,"indexOf",e)},join(e){return an(this).join(e)},lastIndexOf(...e){return Oa(this,"lastIndexOf",e)},map(e,t){return bs(this,"map",e,t,void 0,arguments)},pop(){return Un(this,"pop")},push(...e){return Un(this,"push",e)},reduce(e,...t){return ai(this,"reduce",e,t)},reduceRight(e,...t){return ai(this,"reduceRight",e,t)},shift(){return Un(this,"shift")},some(e,t){return bs(this,"some",e,t,void 0,arguments)},splice(...e){return Un(this,"splice",e)},toReversed(){return an(this).toReversed()},toSorted(e){return an(this).toSorted(e)},toSpliced(...e){return an(this).toSpliced(...e)},unshift(...e){return Un(this,"unshift",e)},values(){return Na(this,"values",Rt)}};function Na(e,t,s){const o=da(e),a=o[t]();return o!==e&&!Jt(e)&&(a._next=a.next,a.next=()=>{const l=a._next();return l.done||(l.value=s(l.value)),l}),a}const Kd=Array.prototype;function bs(e,t,s,o,a,l){const i=da(e),r=i!==e&&!Jt(e),c=i[t];if(c!==Kd[t]){const v=c.apply(e,l);return r?Rt(v):v}let p=s;i!==e&&(r?p=function(v,b){return s.call(this,Rt(v),b,e)}:s.length>2&&(p=function(v,b){return s.call(this,v,b,e)}));const d=c.call(i,p,o);return r&&a?a(d):d}function ai(e,t,s,o){const a=da(e);let l=s;return a!==e&&(Jt(e)?s.length>3&&(l=function(i,r,c){return s.call(this,i,r,c,e)}):l=function(i,r,c){return s.call(this,i,Rt(r),c,e)}),a[t](l,...o)}function Oa(e,t,s){const o=it(e);Pt(o,"iterate",to);const a=o[t](...s);return(a===-1||a===!1)&&Ol(s[0])?(s[0]=it(s[0]),o[t](...s)):a}function Un(e,t,s=[]){Ss(),Ul();const o=it(e)[t].apply(e,s);return Pl(),xs(),o}const Gd=xl("__proto__,__v_isRef,__isVue"),oc=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(rs));function Qd(e){rs(e)||(e=String(e));const t=it(this);return Pt(t,"has",e),t.hasOwnProperty(e)}class ac{constructor(t=!1,s=!1){this._isReadonly=t,this._isShallow=s}get(t,s,o){if(s==="__v_skip")return t.__v_skip;const a=this._isReadonly,l=this._isShallow;if(s==="__v_isReactive")return!a;if(s==="__v_isReadonly")return a;if(s==="__v_isShallow")return l;if(s==="__v_raw")return o===(a?l?af:cc:l?rc:ic).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(o)?t:void 0;const i=Je(t);if(!a){let c;if(i&&(c=Wd[s]))return c;if(s==="hasOwnProperty")return Qd}const r=Reflect.get(t,s,Nt(t)?t:o);if((rs(s)?oc.has(s):Gd(s))||(a||Pt(t,"get",s),l))return r;if(Nt(r)){const c=i&&El(s)?r:r.value;return a&&vt(c)?al(c):c}return vt(r)?a?al(r):fa(r):r}}class lc extends ac{constructor(t=!1){super(!1,t)}set(t,s,o,a){let l=t[s];if(!this._isShallow){const c=Os(l);if(!Jt(o)&&!Os(o)&&(l=it(l),o=it(o)),!Je(t)&&Nt(l)&&!Nt(o))return c||(l.value=o),!0}const i=Je(t)&&El(s)?Number(s)<t.length:ut(t,s),r=Reflect.set(t,s,o,Nt(t)?t:a);return t===it(a)&&(i?Ns(o,l)&&$s(t,"set",s,o):$s(t,"add",s,o)),r}deleteProperty(t,s){const o=ut(t,s);t[s];const a=Reflect.deleteProperty(t,s);return a&&o&&$s(t,"delete",s,void 0),a}has(t,s){const o=Reflect.has(t,s);return(!rs(s)||!oc.has(s))&&Pt(t,"has",s),o}ownKeys(t){return Pt(t,"iterate",Je(t)?"length":Ys),Reflect.ownKeys(t)}}class Jd extends ac{constructor(t=!1){super(!0,t)}set(t,s){return!0}deleteProperty(t,s){return!0}}const Xd=new lc,Zd=new Jd,Yd=new lc(!0);const ol=e=>e,So=e=>Reflect.getPrototypeOf(e);function ef(e,t,s){return function(...o){const a=this.__v_raw,l=it(a),i=un(l),r=e==="entries"||e===Symbol.iterator&&i,c=e==="keys"&&i,p=a[e](...o),d=s?ol:t?Ko:Rt;return!t&&Pt(l,"iterate",c?nl:Ys),{next(){const{value:v,done:b}=p.next();return b?{value:v,done:b}:{value:r?[d(v[0]),d(v[1])]:d(v),done:b}},[Symbol.iterator](){return this}}}}function xo(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function tf(e,t){const s={get(a){const l=this.__v_raw,i=it(l),r=it(a);e||(Ns(a,r)&&Pt(i,"get",a),Pt(i,"get",r));const{has:c}=So(i),p=t?ol:e?Ko:Rt;if(c.call(i,a))return p(l.get(a));if(c.call(i,r))return p(l.get(r));l!==i&&l.get(a)},get size(){const a=this.__v_raw;return!e&&Pt(it(a),"iterate",Ys),a.size},has(a){const l=this.__v_raw,i=it(l),r=it(a);return e||(Ns(a,r)&&Pt(i,"has",a),Pt(i,"has",r)),a===r?l.has(a):l.has(a)||l.has(r)},forEach(a,l){const i=this,r=i.__v_raw,c=it(r),p=t?ol:e?Ko:Rt;return!e&&Pt(c,"iterate",Ys),r.forEach((d,v)=>a.call(l,p(d),p(v),i))}};return xt(s,e?{add:xo("add"),set:xo("set"),delete:xo("delete"),clear:xo("clear")}:{add(a){!t&&!Jt(a)&&!Os(a)&&(a=it(a));const l=it(this);return So(l).has.call(l,a)||(l.add(a),$s(l,"add",a,a)),this},set(a,l){!t&&!Jt(l)&&!Os(l)&&(l=it(l));const i=it(this),{has:r,get:c}=So(i);let p=r.call(i,a);p||(a=it(a),p=r.call(i,a));const d=c.call(i,a);return i.set(a,l),p?Ns(l,d)&&$s(i,"set",a,l):$s(i,"add",a,l),this},delete(a){const l=it(this),{has:i,get:r}=So(l);let c=i.call(l,a);c||(a=it(a),c=i.call(l,a)),r&&r.call(l,a);const p=l.delete(a);return c&&$s(l,"delete",a,void 0),p},clear(){const a=it(this),l=a.size!==0,i=a.clear();return l&&$s(a,"clear",void 0,void 0),i}}),["keys","values","entries",Symbol.iterator].forEach(a=>{s[a]=ef(a,e,t)}),s}function Ll(e,t){const s=tf(e,t);return(o,a,l)=>a==="__v_isReactive"?!e:a==="__v_isReadonly"?e:a==="__v_raw"?o:Reflect.get(ut(s,a)&&a in o?s:o,a,l)}const sf={get:Ll(!1,!1)},nf={get:Ll(!1,!0)},of={get:Ll(!0,!1)};const ic=new WeakMap,rc=new WeakMap,cc=new WeakMap,af=new WeakMap;function lf(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function rf(e){return e.__v_skip||!Object.isExtensible(e)?0:lf(Ed(e))}function fa(e){return Os(e)?e:Nl(e,!1,Xd,sf,ic)}function uc(e){return Nl(e,!1,Yd,nf,rc)}function al(e){return Nl(e,!0,Zd,of,cc)}function Nl(e,t,s,o,a){if(!vt(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const l=rf(e);if(l===0)return e;const i=a.get(e);if(i)return i;const r=new Proxy(e,l===2?o:s);return a.set(e,r),r}function dn(e){return Os(e)?dn(e.__v_raw):!!(e&&e.__v_isReactive)}function Os(e){return!!(e&&e.__v_isReadonly)}function Jt(e){return!!(e&&e.__v_isShallow)}function Ol(e){return e?!!e.__v_raw:!1}function it(e){const t=e&&e.__v_raw;return t?it(t):e}function dc(e){return!ut(e,"__v_skip")&&Object.isExtensible(e)&&zr(e,"__v_skip",!0),e}const Rt=e=>vt(e)?fa(e):e,Ko=e=>vt(e)?al(e):e;function Nt(e){return e?e.__v_isRef===!0:!1}function w(e){return fc(e,!1)}function so(e){return fc(e,!0)}function fc(e,t){return Nt(e)?e:new cf(e,t)}class cf{constructor(t,s){this.dep=new Dl,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=s?t:it(t),this._value=s?t:Rt(t),this.__v_isShallow=s}get value(){return this.dep.track(),this._value}set value(t){const s=this._rawValue,o=this.__v_isShallow||Jt(t)||Os(t);t=o?t:it(t),Ns(t,s)&&(this._rawValue=t,this._value=o?t:Rt(t),this.dep.trigger())}}function se(e){return Nt(e)?e.value:e}const uf={get:(e,t,s)=>t==="__v_raw"?e:se(Reflect.get(e,t,s)),set:(e,t,s,o)=>{const a=e[t];return Nt(a)&&!Nt(s)?(a.value=s,!0):Reflect.set(e,t,s,o)}};function pc(e){return dn(e)?e:new Proxy(e,uf)}class df{constructor(t,s,o){this.fn=t,this.setter=s,this._value=void 0,this.dep=new Dl(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=eo-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!s,this.isSSR=o}notify(){if(this.flags|=16,!(this.flags&8)&&ht!==this)return Zr(this,!0),!0}get value(){const t=this.dep.track();return tc(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function ff(e,t,s=!1){let o,a;return et(e)?o=e:(o=e.get,a=e.set),new df(o,a,s)}const Ao={},Go=new WeakMap;let Qs;function pf(e,t=!1,s=Qs){if(s){let o=Go.get(s);o||Go.set(s,o=[]),o.push(e)}}function vf(e,t,s=mt){const{immediate:o,deep:a,once:l,scheduler:i,augmentJob:r,call:c}=s,p=F=>a?F:Jt(F)||a===!1||a===0?Cs(F,1):Cs(F);let d,v,b,_,y=!1,S=!1;if(Nt(e)?(v=()=>e.value,y=Jt(e)):dn(e)?(v=()=>p(e),y=!0):Je(e)?(S=!0,y=e.some(F=>dn(F)||Jt(F)),v=()=>e.map(F=>{if(Nt(F))return F.value;if(dn(F))return p(F);if(et(F))return c?c(F,2):F()})):et(e)?t?v=c?()=>c(e,2):e:v=()=>{if(b){Ss();try{b()}finally{xs()}}const F=Qs;Qs=d;try{return c?c(e,3,[_]):e(_)}finally{Qs=F}}:v=ns,t&&a){const F=v,W=a===!0?1/0:a;v=()=>Cs(F(),W)}const C=qd(),I=()=>{d.stop(),C&&C.active&&Tl(C.effects,d)};if(l&&t){const F=t;t=(...W)=>{F(...W),I()}}let x=S?new Array(e.length).fill(Ao):Ao;const E=F=>{if(!(!(d.flags&1)||!d.dirty&&!F))if(t){const W=d.run();if(a||y||(S?W.some((G,re)=>Ns(G,x[re])):Ns(W,x))){b&&b();const G=Qs;Qs=d;try{const re=[W,x===Ao?void 0:S&&x[0]===Ao?[]:x,_];x=W,c?c(t,3,re):t(...re)}finally{Qs=G}}}else d.run()};return r&&r(E),d=new Jr(v),d.scheduler=i?()=>i(E,!1):E,_=F=>pf(F,!1,d),b=d.onStop=()=>{const F=Go.get(d);if(F){if(c)c(F,4);else for(const W of F)W();Go.delete(d)}},t?o?E(!0):x=d.run():i?i(E.bind(null,!0),!0):d.run(),I.pause=d.pause.bind(d),I.resume=d.resume.bind(d),I.stop=I,I}function Cs(e,t=1/0,s){if(t<=0||!vt(e)||e.__v_skip||(s=s||new Map,(s.get(e)||0)>=t))return e;if(s.set(e,t),t--,Nt(e))Cs(e.value,t,s);else if(Je(e))for(let o=0;o<e.length;o++)Cs(e[o],t,s);else if($n(e)||un(e))e.forEach(o=>{Cs(o,t,s)});else if(Hr(e)){for(const o in e)Cs(e[o],t,s);for(const o of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,o)&&Cs(e[o],t,s)}return e}/**
|
||
* @vue/runtime-core v3.5.22
|
||
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
||
* @license MIT
|
||
**/function mo(e,t,s,o){try{return o?e(...o):e()}catch(a){pa(a,t,s)}}function cs(e,t,s,o){if(et(e)){const a=mo(e,t,s,o);return a&&jr(a)&&a.catch(l=>{pa(l,t,s)}),a}if(Je(e)){const a=[];for(let l=0;l<e.length;l++)a.push(cs(e[l],t,s,o));return a}}function pa(e,t,s,o=!0){const a=t?t.vnode:null,{errorHandler:l,throwUnhandledErrorInProduction:i}=t&&t.appContext.config||mt;if(t){let r=t.parent;const c=t.proxy,p=`https://vuejs.org/error-reference/#runtime-${s}`;for(;r;){const d=r.ec;if(d){for(let v=0;v<d.length;v++)if(d[v](e,c,p)===!1)return}r=r.parent}if(l){Ss(),mo(l,null,10,[e,c,p]),xs();return}}mf(e,s,a,o,i)}function mf(e,t,s,o=!0,a=!1){if(a)throw e;console.error(e)}const Bt=[];let ms=-1;const fn=[];let Ms=null,ln=0;const vc=Promise.resolve();let Qo=null;function pt(e){const t=Qo||vc;return e?t.then(this?e.bind(this):e):t}function hf(e){let t=ms+1,s=Bt.length;for(;t<s;){const o=t+s>>>1,a=Bt[o],l=no(a);l<e||l===e&&a.flags&2?t=o+1:s=o}return t}function Fl(e){if(!(e.flags&1)){const t=no(e),s=Bt[Bt.length-1];!s||!(e.flags&2)&&t>=no(s)?Bt.push(e):Bt.splice(hf(t),0,e),e.flags|=1,mc()}}function mc(){Qo||(Qo=vc.then(yc))}function hc(e){Je(e)?fn.push(...e):Ms&&e.id===-1?Ms.splice(ln+1,0,e):e.flags&1||(fn.push(e),e.flags|=1),mc()}function li(e,t,s=ms+1){for(;s<Bt.length;s++){const o=Bt[s];if(o&&o.flags&2){if(e&&o.id!==e.uid)continue;Bt.splice(s,1),s--,o.flags&4&&(o.flags&=-2),o(),o.flags&4||(o.flags&=-2)}}}function gc(e){if(fn.length){const t=[...new Set(fn)].sort((s,o)=>no(s)-no(o));if(fn.length=0,Ms){Ms.push(...t);return}for(Ms=t,ln=0;ln<Ms.length;ln++){const s=Ms[ln];s.flags&4&&(s.flags&=-2),s.flags&8||s(),s.flags&=-2}Ms=null,ln=0}}const no=e=>e.id==null?e.flags&2?-1:1/0:e.id;function yc(e){try{for(ms=0;ms<Bt.length;ms++){const t=Bt[ms];t&&!(t.flags&8)&&(t.flags&4&&(t.flags&=-2),mo(t,t.i,t.i?15:14),t.flags&4||(t.flags&=-2))}}finally{for(;ms<Bt.length;ms++){const t=Bt[ms];t&&(t.flags&=-2)}ms=-1,Bt.length=0,gc(),Qo=null,(Bt.length||fn.length)&&yc()}}let Ut=null,bc=null;function Jo(e){const t=Ut;return Ut=e,bc=e&&e.type.__scopeId||null,t}function lt(e,t=Ut,s){if(!t||e._n)return e;const o=(...a)=>{o._d&&Yo(-1);const l=Jo(t);let i;try{i=e(...a)}finally{Jo(l),o._d&&Yo(1)}return i};return o._n=!0,o._c=!0,o._d=!0,o}function Ve(e,t){if(Ut===null)return e;const s=ba(Ut),o=e.dirs||(e.dirs=[]);for(let a=0;a<t.length;a++){let[l,i,r,c=mt]=t[a];l&&(et(l)&&(l={mounted:l,updated:l}),l.deep&&Cs(i),o.push({dir:l,instance:s,value:i,oldValue:void 0,arg:r,modifiers:c}))}return e}function Hs(e,t,s,o){const a=e.dirs,l=t&&t.dirs;for(let i=0;i<a.length;i++){const r=a[i];l&&(r.oldValue=l[i].value);let c=r.dir[o];c&&(Ss(),cs(c,s,8,[e.el,r,e,t]),xs())}}const _c=Symbol("_vte"),wc=e=>e.__isTeleport,Wn=e=>e&&(e.disabled||e.disabled===""),ii=e=>e&&(e.defer||e.defer===""),ri=e=>typeof SVGElement<"u"&&e instanceof SVGElement,ci=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,ll=(e,t)=>{const s=e&&e.to;return $t(s)?t?t(s):null:s},kc={name:"Teleport",__isTeleport:!0,process(e,t,s,o,a,l,i,r,c,p){const{mc:d,pc:v,pbc:b,o:{insert:_,querySelector:y,createText:S,createComment:C}}=p,I=Wn(t.props);let{shapeFlag:x,children:E,dynamicChildren:F}=t;if(e==null){const W=t.el=S(""),G=t.anchor=S("");_(W,s,o),_(G,s,o);const re=(U,O)=>{x&16&&d(E,U,O,a,l,i,r,c)},D=()=>{const U=t.target=ll(t.props,y),O=$c(U,t,S,_);U&&(i!=="svg"&&ri(U)?i="svg":i!=="mathml"&&ci(U)&&(i="mathml"),a&&a.isCE&&(a.ce._teleportTargets||(a.ce._teleportTargets=new Set)).add(U),I||(re(U,O),Do(t,!1)))};I&&(re(s,G),Do(t,!0)),ii(t.props)?(t.el.__isMounted=!1,Vt(()=>{D(),delete t.el.__isMounted},l)):D()}else{if(ii(t.props)&&e.el.__isMounted===!1){Vt(()=>{kc.process(e,t,s,o,a,l,i,r,c,p)},l);return}t.el=e.el,t.targetStart=e.targetStart;const W=t.anchor=e.anchor,G=t.target=e.target,re=t.targetAnchor=e.targetAnchor,D=Wn(e.props),U=D?s:G,O=D?W:re;if(i==="svg"||ri(G)?i="svg":(i==="mathml"||ci(G))&&(i="mathml"),F?(b(e.dynamicChildren,F,U,a,l,i,r),ql(e,t,!0)):c||v(e,t,U,O,a,l,i,r,!1),I)D?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):To(t,s,W,p,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const $=t.target=ll(t.props,y);$&&To(t,$,null,p,0)}else D&&To(t,G,re,p,1);Do(t,I)}},remove(e,t,s,{um:o,o:{remove:a}},l){const{shapeFlag:i,children:r,anchor:c,targetStart:p,targetAnchor:d,target:v,props:b}=e;if(v&&(a(p),a(d)),l&&a(c),i&16){const _=l||!Wn(b);for(let y=0;y<r.length;y++){const S=r[y];o(S,t,s,_,!!S.dynamicChildren)}}},move:To,hydrate:gf};function To(e,t,s,{o:{insert:o},m:a},l=2){l===0&&o(e.targetAnchor,t,s);const{el:i,anchor:r,shapeFlag:c,children:p,props:d}=e,v=l===2;if(v&&o(i,t,s),(!v||Wn(d))&&c&16)for(let b=0;b<p.length;b++)a(p[b],t,s,2);v&&o(r,t,s)}function gf(e,t,s,o,a,l,{o:{nextSibling:i,parentNode:r,querySelector:c,insert:p,createText:d}},v){function b(S,C,I,x){C.anchor=v(i(S),C,r(S),s,o,a,l),C.targetStart=I,C.targetAnchor=x}const _=t.target=ll(t.props,c),y=Wn(t.props);if(_){const S=_._lpa||_.firstChild;if(t.shapeFlag&16)if(y)b(e,t,S,S&&i(S));else{t.anchor=i(e);let C=S;for(;C;){if(C&&C.nodeType===8){if(C.data==="teleport start anchor")t.targetStart=C;else if(C.data==="teleport anchor"){t.targetAnchor=C,_._lpa=t.targetAnchor&&i(t.targetAnchor);break}}C=i(C)}t.targetAnchor||$c(_,t,d,p),v(S&&i(S),t,_,s,o,a,l)}Do(t,y)}else y&&t.shapeFlag&16&&b(e,t,e,i(e));return t.anchor&&i(t.anchor)}const Ot=kc;function Do(e,t){const s=e.ctx;if(s&&s.ut){let o,a;for(t?(o=e.el,a=e.anchor):(o=e.targetStart,a=e.targetAnchor);o&&o!==a;)o.nodeType===1&&o.setAttribute("data-v-owner",s.uid),o=o.nextSibling;s.ut()}}function $c(e,t,s,o){const a=t.targetStart=s(""),l=t.targetAnchor=s("");return a[_c]=l,e&&(o(a,e),o(l,e)),l}const ks=Symbol("_leaveCb"),Eo=Symbol("_enterCb");function Cc(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return nt(()=>{e.isMounted=!0}),ho(()=>{e.isUnmounting=!0}),e}const Qt=[Function,Array],Ic={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Qt,onEnter:Qt,onAfterEnter:Qt,onEnterCancelled:Qt,onBeforeLeave:Qt,onLeave:Qt,onAfterLeave:Qt,onLeaveCancelled:Qt,onBeforeAppear:Qt,onAppear:Qt,onAfterAppear:Qt,onAppearCancelled:Qt},Sc=e=>{const t=e.subTree;return t.component?Sc(t.component):t},yf={name:"BaseTransition",props:Ic,setup(e,{slots:t}){const s=ya(),o=Cc();return()=>{const a=t.default&&Vl(t.default(),!0);if(!a||!a.length)return;const l=xc(a),i=it(e),{mode:r}=i;if(o.isLeaving)return Fa(l);const c=ui(l);if(!c)return Fa(l);let p=oo(c,i,o,s,v=>p=v);c.type!==Mt&&nn(c,p);let d=s.subTree&&ui(s.subTree);if(d&&d.type!==Mt&&!Xs(d,c)&&Sc(s).type!==Mt){let v=oo(d,i,o,s);if(nn(d,v),r==="out-in"&&c.type!==Mt)return o.isLeaving=!0,v.afterLeave=()=>{o.isLeaving=!1,s.job.flags&8||s.update(),delete v.afterLeave,d=void 0},Fa(l);r==="in-out"&&c.type!==Mt?v.delayLeave=(b,_,y)=>{const S=Ac(o,d);S[String(d.key)]=d,b[ks]=()=>{_(),b[ks]=void 0,delete p.delayedLeave,d=void 0},p.delayedLeave=()=>{y(),delete p.delayedLeave,d=void 0}}:d=void 0}else d&&(d=void 0);return l}}};function xc(e){let t=e[0];if(e.length>1){for(const s of e)if(s.type!==Mt){t=s;break}}return t}const bf=yf;function Ac(e,t){const{leavingVNodes:s}=e;let o=s.get(t.type);return o||(o=Object.create(null),s.set(t.type,o)),o}function oo(e,t,s,o,a){const{appear:l,mode:i,persisted:r=!1,onBeforeEnter:c,onEnter:p,onAfterEnter:d,onEnterCancelled:v,onBeforeLeave:b,onLeave:_,onAfterLeave:y,onLeaveCancelled:S,onBeforeAppear:C,onAppear:I,onAfterAppear:x,onAppearCancelled:E}=t,F=String(e.key),W=Ac(s,e),G=(U,O)=>{U&&cs(U,o,9,O)},re=(U,O)=>{const $=O[1];G(U,O),Je(U)?U.every(R=>R.length<=1)&&$():U.length<=1&&$()},D={mode:i,persisted:r,beforeEnter(U){let O=c;if(!s.isMounted)if(l)O=C||c;else return;U[ks]&&U[ks](!0);const $=W[F];$&&Xs(e,$)&&$.el[ks]&&$.el[ks](),G(O,[U])},enter(U){let O=p,$=d,R=v;if(!s.isMounted)if(l)O=I||p,$=x||d,R=E||v;else return;let M=!1;const N=U[Eo]=L=>{M||(M=!0,L?G(R,[U]):G($,[U]),D.delayedLeave&&D.delayedLeave(),U[Eo]=void 0)};O?re(O,[U,N]):N()},leave(U,O){const $=String(e.key);if(U[Eo]&&U[Eo](!0),s.isUnmounting)return O();G(b,[U]);let R=!1;const M=U[ks]=N=>{R||(R=!0,O(),N?G(S,[U]):G(y,[U]),U[ks]=void 0,W[$]===e&&delete W[$])};W[$]=e,_?re(_,[U,M]):M()},clone(U){const O=oo(U,t,s,o,a);return a&&a(O),O}};return D}function Fa(e){if(va(e))return e=Fs(e),e.children=null,e}function ui(e){if(!va(e))return wc(e.type)&&e.children?xc(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:s}=e;if(s){if(t&16)return s[0];if(t&32&&et(s.default))return s.default()}}function nn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,nn(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 Vl(e,t=!1,s){let o=[],a=0;for(let l=0;l<e.length;l++){let i=e[l];const r=s==null?i.key:String(s)+String(i.key!=null?i.key:l);i.type===ye?(i.patchFlag&128&&a++,o=o.concat(Vl(i.children,t,r))):(t||i.type!==Mt)&&o.push(r!=null?Fs(i,{key:r}):i)}if(a>1)for(let l=0;l<o.length;l++)o[l].patchFlag=-2;return o}function ze(e,t){return et(e)?xt({name:e.name},t,{setup:e}):e}function Tc(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}const Xo=new WeakMap;function Kn(e,t,s,o,a=!1){if(Je(e)){e.forEach((y,S)=>Kn(y,t&&(Je(t)?t[S]:t),s,o,a));return}if(pn(o)&&!a){o.shapeFlag&512&&o.type.__asyncResolved&&o.component.subTree.component&&Kn(e,t,s,o.component.subTree);return}const l=o.shapeFlag&4?ba(o.component):o.el,i=a?null:l,{i:r,r:c}=e,p=t&&t.r,d=r.refs===mt?r.refs={}:r.refs,v=r.setupState,b=it(v),_=v===mt?Br:y=>ut(b,y);if(p!=null&&p!==c){if(di(t),$t(p))d[p]=null,_(p)&&(v[p]=null);else if(Nt(p)){p.value=null;const y=t;y.k&&(d[y.k]=null)}}if(et(c))mo(c,r,12,[i,d]);else{const y=$t(c),S=Nt(c);if(y||S){const C=()=>{if(e.f){const I=y?_(c)?v[c]:d[c]:c.value;if(a)Je(I)&&Tl(I,l);else if(Je(I))I.includes(l)||I.push(l);else if(y)d[c]=[l],_(c)&&(v[c]=d[c]);else{const x=[l];c.value=x,e.k&&(d[e.k]=x)}}else y?(d[c]=i,_(c)&&(v[c]=i)):S&&(c.value=i,e.k&&(d[e.k]=i))};if(i){const I=()=>{C(),Xo.delete(e)};I.id=-1,Xo.set(e,I),Vt(I,s)}else di(e),C()}}}function di(e){const t=Xo.get(e);t&&(t.flags|=8,Xo.delete(e))}ua().requestIdleCallback;ua().cancelIdleCallback;const pn=e=>!!e.type.__asyncLoader,va=e=>e.type.__isKeepAlive;function _f(e,t){Ec(e,"a",t)}function wf(e,t){Ec(e,"da",t)}function Ec(e,t,s=Dt){const o=e.__wdc||(e.__wdc=()=>{let a=s;for(;a;){if(a.isDeactivated)return;a=a.parent}return e()});if(ma(t,o,s),s){let a=s.parent;for(;a&&a.parent;)va(a.parent.vnode)&&kf(o,t,s,a),a=a.parent}}function kf(e,t,s,o){const a=ma(t,e,o,!0);At(()=>{Tl(o[t],a)},s)}function ma(e,t,s=Dt,o=!1){if(s){const a=s[e]||(s[e]=[]),l=t.__weh||(t.__weh=(...i)=>{Ss();const r=go(s),c=cs(t,s,e,i);return r(),xs(),c});return o?a.unshift(l):a.push(l),l}}const As=e=>(t,s=Dt)=>{(!io||e==="sp")&&ma(e,(...o)=>t(...o),s)},$f=As("bm"),nt=As("m"),Rc=As("bu"),Uc=As("u"),ho=As("bum"),At=As("um"),Cf=As("sp"),If=As("rtg"),Sf=As("rtc");function xf(e,t=Dt){ma("ec",e,t)}const Af="components";function Pc(e,t){return Ef(Af,e,!0,t)||e}const Tf=Symbol.for("v-ndc");function Ef(e,t,s=!0,o=!1){const a=Ut||Dt;if(a){const l=a.type;{const r=gp(l,!1);if(r&&(r===t||r===Zt(t)||r===ca(Zt(t))))return l}const i=fi(a[e]||l[e],t)||fi(a.appContext[e],t);return!i&&o?l:i}}function fi(e,t){return e&&(e[t]||e[Zt(t)]||e[ca(Zt(t))])}function Ee(e,t,s,o){let a;const l=s,i=Je(e);if(i||$t(e)){const r=i&&dn(e);let c=!1,p=!1;r&&(c=!Jt(e),p=Os(e),e=da(e)),a=new Array(e.length);for(let d=0,v=e.length;d<v;d++)a[d]=t(c?p?Ko(Rt(e[d])):Rt(e[d]):e[d],d,void 0,l)}else if(typeof e=="number"){a=new Array(e);for(let r=0;r<e;r++)a[r]=t(r+1,r,void 0,l)}else if(vt(e))if(e[Symbol.iterator])a=Array.from(e,(r,c)=>t(r,c,void 0,l));else{const r=Object.keys(e);a=new Array(r.length);for(let c=0,p=r.length;c<p;c++){const d=r[c];a[c]=t(e[d],d,c,l)}}else a=[];return a}function hn(e,t,s={},o,a){if(Ut.ce||Ut.parent&&pn(Ut.parent)&&Ut.parent.ce){const p=Object.keys(s).length>0;return t!=="default"&&(s.name=t),u(),Ne(ye,null,[m("slot",s,o&&o())],p?-2:64)}let l=e[t];l&&l._c&&(l._d=!1),u();const i=l&&Mc(l(s)),r=s.key||i&&i.key,c=Ne(ye,{key:(r&&!rs(r)?r:`_${t}`)+(!i&&o?"_fb":"")},i||(o?o():[]),i&&e._===1?64:-2);return l&&l._c&&(l._d=!0),c}function Mc(e){return e.some(t=>lo(t)?!(t.type===Mt||t.type===ye&&!Mc(t.children)):!0)?e:null}const il=e=>e?Yc(e)?ba(e):il(e.parent):null,Gn=xt(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=>il(e.parent),$root:e=>il(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Lc(e),$forceUpdate:e=>e.f||(e.f=()=>{Fl(e.update)}),$nextTick:e=>e.n||(e.n=pt.bind(e.proxy)),$watch:e=>Xf.bind(e)}),Va=(e,t)=>e!==mt&&!e.__isScriptSetup&&ut(e,t),Rf={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:s,setupState:o,data:a,props:l,accessCache:i,type:r,appContext:c}=e;let p;if(t[0]!=="$"){const _=i[t];if(_!==void 0)switch(_){case 1:return o[t];case 2:return a[t];case 4:return s[t];case 3:return l[t]}else{if(Va(o,t))return i[t]=1,o[t];if(a!==mt&&ut(a,t))return i[t]=2,a[t];if((p=e.propsOptions[0])&&ut(p,t))return i[t]=3,l[t];if(s!==mt&&ut(s,t))return i[t]=4,s[t];rl&&(i[t]=0)}}const d=Gn[t];let v,b;if(d)return t==="$attrs"&&Pt(e.attrs,"get",""),d(e);if((v=r.__cssModules)&&(v=v[t]))return v;if(s!==mt&&ut(s,t))return i[t]=4,s[t];if(b=c.config.globalProperties,ut(b,t))return b[t]},set({_:e},t,s){const{data:o,setupState:a,ctx:l}=e;return Va(a,t)?(a[t]=s,!0):o!==mt&&ut(o,t)?(o[t]=s,!0):ut(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(l[t]=s,!0)},has({_:{data:e,setupState:t,accessCache:s,ctx:o,appContext:a,propsOptions:l,type:i}},r){let c,p;return!!(s[r]||e!==mt&&r[0]!=="$"&&ut(e,r)||Va(t,r)||(c=l[0])&&ut(c,r)||ut(o,r)||ut(Gn,r)||ut(a.config.globalProperties,r)||(p=i.__cssModules)&&p[r])},defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:ut(s,"value")&&this.set(e,t,s.value,null),Reflect.defineProperty(e,t,s)}};function pi(e){return Je(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}let rl=!0;function Uf(e){const t=Lc(e),s=e.proxy,o=e.ctx;rl=!1,t.beforeCreate&&vi(t.beforeCreate,e,"bc");const{data:a,computed:l,methods:i,watch:r,provide:c,inject:p,created:d,beforeMount:v,mounted:b,beforeUpdate:_,updated:y,activated:S,deactivated:C,beforeDestroy:I,beforeUnmount:x,destroyed:E,unmounted:F,render:W,renderTracked:G,renderTriggered:re,errorCaptured:D,serverPrefetch:U,expose:O,inheritAttrs:$,components:R,directives:M,filters:N}=t;if(p&&Pf(p,o,null),i)for(const ne in i){const ee=i[ne];et(ee)&&(o[ne]=ee.bind(s))}if(a){const ne=a.call(s,s);vt(ne)&&(e.data=fa(ne))}if(rl=!0,l)for(const ne in l){const ee=l[ne],we=et(ee)?ee.bind(s,s):et(ee.get)?ee.get.bind(s,s):ns,de=!et(ee)&&et(ee.set)?ee.set.bind(s):ns,ue=ge({get:we,set:de});Object.defineProperty(o,ne,{enumerable:!0,configurable:!0,get:()=>ue.value,set:Z=>ue.value=Z})}if(r)for(const ne in r)Dc(r[ne],o,s,ne);if(c){const ne=et(c)?c.call(s):c;Reflect.ownKeys(ne).forEach(ee=>{Lo(ee,ne[ee])})}d&&vi(d,e,"c");function X(ne,ee){Je(ee)?ee.forEach(we=>ne(we.bind(s))):ee&&ne(ee.bind(s))}if(X($f,v),X(nt,b),X(Rc,_),X(Uc,y),X(_f,S),X(wf,C),X(xf,D),X(Sf,G),X(If,re),X(ho,x),X(At,F),X(Cf,U),Je(O))if(O.length){const ne=e.exposed||(e.exposed={});O.forEach(ee=>{Object.defineProperty(ne,ee,{get:()=>s[ee],set:we=>s[ee]=we,enumerable:!0})})}else e.exposed||(e.exposed={});W&&e.render===ns&&(e.render=W),$!=null&&(e.inheritAttrs=$),R&&(e.components=R),M&&(e.directives=M),U&&Tc(e)}function Pf(e,t,s=ns){Je(e)&&(e=cl(e));for(const o in e){const a=e[o];let l;vt(a)?"default"in a?l=as(a.from||o,a.default,!0):l=as(a.from||o):l=as(a),Nt(l)?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>l.value,set:i=>l.value=i}):t[o]=l}}function vi(e,t,s){cs(Je(e)?e.map(o=>o.bind(t.proxy)):e.bind(t.proxy),t,s)}function Dc(e,t,s,o){let a=o.includes(".")?Gc(s,o):()=>s[o];if($t(e)){const l=t[e];et(l)&&Xe(a,l)}else if(et(e))Xe(a,e.bind(s));else if(vt(e))if(Je(e))e.forEach(l=>Dc(l,t,s,o));else{const l=et(e.handler)?e.handler.bind(s):t[e.handler];et(l)&&Xe(a,l,e)}}function Lc(e){const t=e.type,{mixins:s,extends:o}=t,{mixins:a,optionsCache:l,config:{optionMergeStrategies:i}}=e.appContext,r=l.get(t);let c;return r?c=r:!a.length&&!s&&!o?c=t:(c={},a.length&&a.forEach(p=>Zo(c,p,i,!0)),Zo(c,t,i)),vt(t)&&l.set(t,c),c}function Zo(e,t,s,o=!1){const{mixins:a,extends:l}=t;l&&Zo(e,l,s,!0),a&&a.forEach(i=>Zo(e,i,s,!0));for(const i in t)if(!(o&&i==="expose")){const r=Mf[i]||s&&s[i];e[i]=r?r(e[i],t[i]):t[i]}return e}const Mf={data:mi,props:hi,emits:hi,methods:jn,computed:jn,beforeCreate:Ft,created:Ft,beforeMount:Ft,mounted:Ft,beforeUpdate:Ft,updated:Ft,beforeDestroy:Ft,beforeUnmount:Ft,destroyed:Ft,unmounted:Ft,activated:Ft,deactivated:Ft,errorCaptured:Ft,serverPrefetch:Ft,components:jn,directives:jn,watch:Lf,provide:mi,inject:Df};function mi(e,t){return t?e?function(){return xt(et(e)?e.call(this,this):e,et(t)?t.call(this,this):t)}:t:e}function Df(e,t){return jn(cl(e),cl(t))}function cl(e){if(Je(e)){const t={};for(let s=0;s<e.length;s++)t[e[s]]=e[s];return t}return e}function Ft(e,t){return e?[...new Set([].concat(e,t))]:t}function jn(e,t){return e?xt(Object.create(null),e,t):t}function hi(e,t){return e?Je(e)&&Je(t)?[...new Set([...e,...t])]:xt(Object.create(null),pi(e),pi(t??{})):t}function Lf(e,t){if(!e)return t;if(!t)return e;const s=xt(Object.create(null),e);for(const o in t)s[o]=Ft(e[o],t[o]);return s}function Nc(){return{app:null,config:{isNativeTag:Br,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let Nf=0;function Of(e,t){return function(o,a=null){et(o)||(o=xt({},o)),a!=null&&!vt(a)&&(a=null);const l=Nc(),i=new WeakSet,r=[];let c=!1;const p=l.app={_uid:Nf++,_component:o,_props:a,_container:null,_context:l,_instance:null,version:bp,get config(){return l.config},set config(d){},use(d,...v){return i.has(d)||(d&&et(d.install)?(i.add(d),d.install(p,...v)):et(d)&&(i.add(d),d(p,...v))),p},mixin(d){return l.mixins.includes(d)||l.mixins.push(d),p},component(d,v){return v?(l.components[d]=v,p):l.components[d]},directive(d,v){return v?(l.directives[d]=v,p):l.directives[d]},mount(d,v,b){if(!c){const _=p._ceVNode||m(o,a);return _.appContext=l,b===!0?b="svg":b===!1&&(b=void 0),e(_,d,b),c=!0,p._container=d,d.__vue_app__=p,ba(_.component)}},onUnmount(d){r.push(d)},unmount(){c&&(cs(r,p._instance,16),e(null,p._container),delete p._container.__vue_app__)},provide(d,v){return l.provides[d]=v,p},runWithContext(d){const v=vn;vn=p;try{return d()}finally{vn=v}}};return p}}let vn=null;function Lo(e,t){if(Dt){let s=Dt.provides;const o=Dt.parent&&Dt.parent.provides;o===s&&(s=Dt.provides=Object.create(o)),s[e]=t}}function as(e,t,s=!1){const o=ya();if(o||vn){let a=vn?vn._context.provides:o?o.parent==null||o.ce?o.vnode.appContext&&o.vnode.appContext.provides:o.parent.provides:void 0;if(a&&e in a)return a[e];if(arguments.length>1)return s&&et(t)?t.call(o&&o.proxy):t}}const Oc={},Fc=()=>Object.create(Oc),Vc=e=>Object.getPrototypeOf(e)===Oc;function Ff(e,t,s,o=!1){const a={},l=Fc();e.propsDefaults=Object.create(null),Bc(e,t,a,l);for(const i in e.propsOptions[0])i in a||(a[i]=void 0);s?e.props=o?a:uc(a):e.type.props?e.props=a:e.props=l,e.attrs=l}function Vf(e,t,s,o){const{props:a,attrs:l,vnode:{patchFlag:i}}=e,r=it(a),[c]=e.propsOptions;let p=!1;if((o||i>0)&&!(i&16)){if(i&8){const d=e.vnode.dynamicProps;for(let v=0;v<d.length;v++){let b=d[v];if(ha(e.emitsOptions,b))continue;const _=t[b];if(c)if(ut(l,b))_!==l[b]&&(l[b]=_,p=!0);else{const y=Zt(b);a[y]=ul(c,r,y,_,e,!1)}else _!==l[b]&&(l[b]=_,p=!0)}}}else{Bc(e,t,a,l)&&(p=!0);let d;for(const v in r)(!t||!ut(t,v)&&((d=Bs(v))===v||!ut(t,d)))&&(c?s&&(s[v]!==void 0||s[d]!==void 0)&&(a[v]=ul(c,r,v,void 0,e,!0)):delete a[v]);if(l!==r)for(const v in l)(!t||!ut(t,v))&&(delete l[v],p=!0)}p&&$s(e.attrs,"set","")}function Bc(e,t,s,o){const[a,l]=e.propsOptions;let i=!1,r;if(t)for(let c in t){if(qn(c))continue;const p=t[c];let d;a&&ut(a,d=Zt(c))?!l||!l.includes(d)?s[d]=p:(r||(r={}))[d]=p:ha(e.emitsOptions,c)||(!(c in o)||p!==o[c])&&(o[c]=p,i=!0)}if(l){const c=it(s),p=r||mt;for(let d=0;d<l.length;d++){const v=l[d];s[v]=ul(a,c,v,p[v],e,!ut(p,v))}}return i}function ul(e,t,s,o,a,l){const i=e[s];if(i!=null){const r=ut(i,"default");if(r&&o===void 0){const c=i.default;if(i.type!==Function&&!i.skipFactory&&et(c)){const{propsDefaults:p}=a;if(s in p)o=p[s];else{const d=go(a);o=p[s]=c.call(null,t),d()}}else o=c;a.ce&&a.ce._setProp(s,o)}i[0]&&(l&&!r?o=!1:i[1]&&(o===""||o===Bs(s))&&(o=!0))}return o}const Bf=new WeakMap;function jc(e,t,s=!1){const o=s?Bf:t.propsCache,a=o.get(e);if(a)return a;const l=e.props,i={},r=[];let c=!1;if(!et(e)){const d=v=>{c=!0;const[b,_]=jc(v,t,!0);xt(i,b),_&&r.push(..._)};!s&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!l&&!c)return vt(e)&&o.set(e,cn),cn;if(Je(l))for(let d=0;d<l.length;d++){const v=Zt(l[d]);gi(v)&&(i[v]=mt)}else if(l)for(const d in l){const v=Zt(d);if(gi(v)){const b=l[d],_=i[v]=Je(b)||et(b)?{type:b}:xt({},b),y=_.type;let S=!1,C=!0;if(Je(y))for(let I=0;I<y.length;++I){const x=y[I],E=et(x)&&x.name;if(E==="Boolean"){S=!0;break}else E==="String"&&(C=!1)}else S=et(y)&&y.name==="Boolean";_[0]=S,_[1]=C,(S||ut(_,"default"))&&r.push(v)}}const p=[i,r];return vt(e)&&o.set(e,p),p}function gi(e){return e[0]!=="$"&&!qn(e)}const Bl=e=>e==="_"||e==="_ctx"||e==="$stable",jl=e=>Je(e)?e.map(hs):[hs(e)],jf=(e,t,s)=>{if(t._n)return t;const o=lt((...a)=>jl(t(...a)),s);return o._c=!1,o},qc=(e,t,s)=>{const o=e._ctx;for(const a in e){if(Bl(a))continue;const l=e[a];if(et(l))t[a]=jf(a,l,o);else if(l!=null){const i=jl(l);t[a]=()=>i}}},Hc=(e,t)=>{const s=jl(t);e.slots.default=()=>s},zc=(e,t,s)=>{for(const o in t)(s||!Bl(o))&&(e[o]=t[o])},qf=(e,t,s)=>{const o=e.slots=Fc();if(e.vnode.shapeFlag&32){const a=t._;a?(zc(o,t,s),s&&zr(o,"_",a,!0)):qc(t,o)}else t&&Hc(e,t)},Hf=(e,t,s)=>{const{vnode:o,slots:a}=e;let l=!0,i=mt;if(o.shapeFlag&32){const r=t._;r?s&&r===1?l=!1:zc(a,t,s):(l=!t.$stable,qc(t,a)),i=t}else t&&(Hc(e,t),i={default:1});if(l)for(const r in a)!Bl(r)&&i[r]==null&&delete a[r]},Vt=ap;function zf(e){return Wf(e)}function Wf(e,t){const s=ua();s.__VUE__=!0;const{insert:o,remove:a,patchProp:l,createElement:i,createText:r,createComment:c,setText:p,setElementText:d,parentNode:v,nextSibling:b,setScopeId:_=ns,insertStaticContent:y}=e,S=(P,g,A,z=null,Q=null,j=null,V=void 0,B=null,ve=!!g.dynamicChildren)=>{if(P===g)return;P&&!Xs(P,g)&&(z=le(P),Z(P,Q,j,!0),P=null),g.patchFlag===-2&&(ve=!1,g.dynamicChildren=null);const{type:me,ref:Le,shapeFlag:Ue}=g;switch(me){case ga:C(P,g,A,z);break;case Mt:I(P,g,A,z);break;case Qn:P==null&&x(g,A,z,V);break;case ye:R(P,g,A,z,Q,j,V,B,ve);break;default:Ue&1?W(P,g,A,z,Q,j,V,B,ve):Ue&6?M(P,g,A,z,Q,j,V,B,ve):(Ue&64||Ue&128)&&me.process(P,g,A,z,Q,j,V,B,ve,ae)}Le!=null&&Q?Kn(Le,P&&P.ref,j,g||P,!g):Le==null&&P&&P.ref!=null&&Kn(P.ref,null,j,P,!0)},C=(P,g,A,z)=>{if(P==null)o(g.el=r(g.children),A,z);else{const Q=g.el=P.el;g.children!==P.children&&p(Q,g.children)}},I=(P,g,A,z)=>{P==null?o(g.el=c(g.children||""),A,z):g.el=P.el},x=(P,g,A,z)=>{[P.el,P.anchor]=y(P.children,g,A,z,P.el,P.anchor)},E=({el:P,anchor:g},A,z)=>{let Q;for(;P&&P!==g;)Q=b(P),o(P,A,z),P=Q;o(g,A,z)},F=({el:P,anchor:g})=>{let A;for(;P&&P!==g;)A=b(P),a(P),P=A;a(g)},W=(P,g,A,z,Q,j,V,B,ve)=>{g.type==="svg"?V="svg":g.type==="math"&&(V="mathml"),P==null?G(g,A,z,Q,j,V,B,ve):U(P,g,Q,j,V,B,ve)},G=(P,g,A,z,Q,j,V,B)=>{let ve,me;const{props:Le,shapeFlag:Ue,transition:Be,dirs:Ce}=P;if(ve=P.el=i(P.type,j,Le&&Le.is,Le),Ue&8?d(ve,P.children):Ue&16&&D(P.children,ve,null,z,Q,Ba(P,j),V,B),Ce&&Hs(P,null,z,"created"),re(ve,P,P.scopeId,V,z),Le){for(const Ge in Le)Ge!=="value"&&!qn(Ge)&&l(ve,Ge,null,Le[Ge],j,z);"value"in Le&&l(ve,"value",null,Le.value,j),(me=Le.onVnodeBeforeMount)&&fs(me,z,P)}Ce&&Hs(P,null,z,"beforeMount");const Qe=Kf(Q,Be);Qe&&Be.beforeEnter(ve),o(ve,g,A),((me=Le&&Le.onVnodeMounted)||Qe||Ce)&&Vt(()=>{me&&fs(me,z,P),Qe&&Be.enter(ve),Ce&&Hs(P,null,z,"mounted")},Q)},re=(P,g,A,z,Q)=>{if(A&&_(P,A),z)for(let j=0;j<z.length;j++)_(P,z[j]);if(Q){let j=Q.subTree;if(g===j||Jc(j.type)&&(j.ssContent===g||j.ssFallback===g)){const V=Q.vnode;re(P,V,V.scopeId,V.slotScopeIds,Q.parent)}}},D=(P,g,A,z,Q,j,V,B,ve=0)=>{for(let me=ve;me<P.length;me++){const Le=P[me]=B?Ds(P[me]):hs(P[me]);S(null,Le,g,A,z,Q,j,V,B)}},U=(P,g,A,z,Q,j,V)=>{const B=g.el=P.el;let{patchFlag:ve,dynamicChildren:me,dirs:Le}=g;ve|=P.patchFlag&16;const Ue=P.props||mt,Be=g.props||mt;let Ce;if(A&&zs(A,!1),(Ce=Be.onVnodeBeforeUpdate)&&fs(Ce,A,g,P),Le&&Hs(g,P,A,"beforeUpdate"),A&&zs(A,!0),(Ue.innerHTML&&Be.innerHTML==null||Ue.textContent&&Be.textContent==null)&&d(B,""),me?O(P.dynamicChildren,me,B,A,z,Ba(g,Q),j):V||ee(P,g,B,null,A,z,Ba(g,Q),j,!1),ve>0){if(ve&16)$(B,Ue,Be,A,Q);else if(ve&2&&Ue.class!==Be.class&&l(B,"class",null,Be.class,Q),ve&4&&l(B,"style",Ue.style,Be.style,Q),ve&8){const Qe=g.dynamicProps;for(let Ge=0;Ge<Qe.length;Ge++){const Ze=Qe[Ge],dt=Ue[Ze],yt=Be[Ze];(yt!==dt||Ze==="value")&&l(B,Ze,dt,yt,Q,A)}}ve&1&&P.children!==g.children&&d(B,g.children)}else!V&&me==null&&$(B,Ue,Be,A,Q);((Ce=Be.onVnodeUpdated)||Le)&&Vt(()=>{Ce&&fs(Ce,A,g,P),Le&&Hs(g,P,A,"updated")},z)},O=(P,g,A,z,Q,j,V)=>{for(let B=0;B<g.length;B++){const ve=P[B],me=g[B],Le=ve.el&&(ve.type===ye||!Xs(ve,me)||ve.shapeFlag&198)?v(ve.el):A;S(ve,me,Le,null,z,Q,j,V,!0)}},$=(P,g,A,z,Q)=>{if(g!==A){if(g!==mt)for(const j in g)!qn(j)&&!(j in A)&&l(P,j,g[j],null,Q,z);for(const j in A){if(qn(j))continue;const V=A[j],B=g[j];V!==B&&j!=="value"&&l(P,j,B,V,Q,z)}"value"in A&&l(P,"value",g.value,A.value,Q)}},R=(P,g,A,z,Q,j,V,B,ve)=>{const me=g.el=P?P.el:r(""),Le=g.anchor=P?P.anchor:r("");let{patchFlag:Ue,dynamicChildren:Be,slotScopeIds:Ce}=g;Ce&&(B=B?B.concat(Ce):Ce),P==null?(o(me,A,z),o(Le,A,z),D(g.children||[],A,Le,Q,j,V,B,ve)):Ue>0&&Ue&64&&Be&&P.dynamicChildren?(O(P.dynamicChildren,Be,A,Q,j,V,B),(g.key!=null||Q&&g===Q.subTree)&&ql(P,g,!0)):ee(P,g,A,Le,Q,j,V,B,ve)},M=(P,g,A,z,Q,j,V,B,ve)=>{g.slotScopeIds=B,P==null?g.shapeFlag&512?Q.ctx.activate(g,A,z,V,ve):N(g,A,z,Q,j,V,ve):L(P,g,ve)},N=(P,g,A,z,Q,j,V)=>{const B=P.component=fp(P,z,Q);if(va(P)&&(B.ctx.renderer=ae),pp(B,!1,V),B.asyncDep){if(Q&&Q.registerDep(B,X,V),!P.el){const ve=B.subTree=m(Mt);I(null,ve,g,A),P.placeholder=ve.el}}else X(B,P,g,A,Q,j,V)},L=(P,g,A)=>{const z=g.component=P.component;if(np(P,g,A))if(z.asyncDep&&!z.asyncResolved){ne(z,g,A);return}else z.next=g,z.update();else g.el=P.el,z.vnode=g},X=(P,g,A,z,Q,j,V)=>{const B=()=>{if(P.isMounted){let{next:Ue,bu:Be,u:Ce,parent:Qe,vnode:Ge}=P;{const It=Wc(P);if(It){Ue&&(Ue.el=Ge.el,ne(P,Ue,V)),It.asyncDep.then(()=>{P.isUnmounted||B()});return}}let Ze=Ue,dt;zs(P,!1),Ue?(Ue.el=Ge.el,ne(P,Ue,V)):Ue=Ge,Be&&Mo(Be),(dt=Ue.props&&Ue.props.onVnodeBeforeUpdate)&&fs(dt,Qe,Ue,Ge),zs(P,!0);const yt=bi(P),bt=P.subTree;P.subTree=yt,S(bt,yt,v(bt.el),le(bt),P,Q,j),Ue.el=yt.el,Ze===null&&op(P,yt.el),Ce&&Vt(Ce,Q),(dt=Ue.props&&Ue.props.onVnodeUpdated)&&Vt(()=>fs(dt,Qe,Ue,Ge),Q)}else{let Ue;const{el:Be,props:Ce}=g,{bm:Qe,m:Ge,parent:Ze,root:dt,type:yt}=P,bt=pn(g);zs(P,!1),Qe&&Mo(Qe),!bt&&(Ue=Ce&&Ce.onVnodeBeforeMount)&&fs(Ue,Ze,g),zs(P,!0);{dt.ce&&dt.ce._def.shadowRoot!==!1&&dt.ce._injectChildStyle(yt);const It=P.subTree=bi(P);S(null,It,A,z,P,Q,j),g.el=It.el}if(Ge&&Vt(Ge,Q),!bt&&(Ue=Ce&&Ce.onVnodeMounted)){const It=g;Vt(()=>fs(Ue,Ze,It),Q)}(g.shapeFlag&256||Ze&&pn(Ze.vnode)&&Ze.vnode.shapeFlag&256)&&P.a&&Vt(P.a,Q),P.isMounted=!0,g=A=z=null}};P.scope.on();const ve=P.effect=new Jr(B);P.scope.off();const me=P.update=ve.run.bind(ve),Le=P.job=ve.runIfDirty.bind(ve);Le.i=P,Le.id=P.uid,ve.scheduler=()=>Fl(Le),zs(P,!0),me()},ne=(P,g,A)=>{g.component=P;const z=P.vnode.props;P.vnode=g,P.next=null,Vf(P,g.props,z,A),Hf(P,g.children,A),Ss(),li(P),xs()},ee=(P,g,A,z,Q,j,V,B,ve=!1)=>{const me=P&&P.children,Le=P?P.shapeFlag:0,Ue=g.children,{patchFlag:Be,shapeFlag:Ce}=g;if(Be>0){if(Be&128){de(me,Ue,A,z,Q,j,V,B,ve);return}else if(Be&256){we(me,Ue,A,z,Q,j,V,B,ve);return}}Ce&8?(Le&16&&je(me,Q,j),Ue!==me&&d(A,Ue)):Le&16?Ce&16?de(me,Ue,A,z,Q,j,V,B,ve):je(me,Q,j,!0):(Le&8&&d(A,""),Ce&16&&D(Ue,A,z,Q,j,V,B,ve))},we=(P,g,A,z,Q,j,V,B,ve)=>{P=P||cn,g=g||cn;const me=P.length,Le=g.length,Ue=Math.min(me,Le);let Be;for(Be=0;Be<Ue;Be++){const Ce=g[Be]=ve?Ds(g[Be]):hs(g[Be]);S(P[Be],Ce,A,null,Q,j,V,B,ve)}me>Le?je(P,Q,j,!0,!1,Ue):D(g,A,z,Q,j,V,B,ve,Ue)},de=(P,g,A,z,Q,j,V,B,ve)=>{let me=0;const Le=g.length;let Ue=P.length-1,Be=Le-1;for(;me<=Ue&&me<=Be;){const Ce=P[me],Qe=g[me]=ve?Ds(g[me]):hs(g[me]);if(Xs(Ce,Qe))S(Ce,Qe,A,null,Q,j,V,B,ve);else break;me++}for(;me<=Ue&&me<=Be;){const Ce=P[Ue],Qe=g[Be]=ve?Ds(g[Be]):hs(g[Be]);if(Xs(Ce,Qe))S(Ce,Qe,A,null,Q,j,V,B,ve);else break;Ue--,Be--}if(me>Ue){if(me<=Be){const Ce=Be+1,Qe=Ce<Le?g[Ce].el:z;for(;me<=Be;)S(null,g[me]=ve?Ds(g[me]):hs(g[me]),A,Qe,Q,j,V,B,ve),me++}}else if(me>Be)for(;me<=Ue;)Z(P[me],Q,j,!0),me++;else{const Ce=me,Qe=me,Ge=new Map;for(me=Qe;me<=Be;me++){const J=g[me]=ve?Ds(g[me]):hs(g[me]);J.key!=null&&Ge.set(J.key,me)}let Ze,dt=0;const yt=Be-Qe+1;let bt=!1,It=0;const jt=new Array(yt);for(me=0;me<yt;me++)jt[me]=0;for(me=Ce;me<=Ue;me++){const J=P[me];if(dt>=yt){Z(J,Q,j,!0);continue}let te;if(J.key!=null)te=Ge.get(J.key);else for(Ze=Qe;Ze<=Be;Ze++)if(jt[Ze-Qe]===0&&Xs(J,g[Ze])){te=Ze;break}te===void 0?Z(J,Q,j,!0):(jt[te-Qe]=me+1,te>=It?It=te:bt=!0,S(J,g[te],A,null,Q,j,V,B,ve),dt++)}const Ae=bt?Gf(jt):cn;for(Ze=Ae.length-1,me=yt-1;me>=0;me--){const J=Qe+me,te=g[J],ke=g[J+1],oe=J+1<Le?ke.el||ke.placeholder:z;jt[me]===0?S(null,te,A,oe,Q,j,V,B,ve):bt&&(Ze<0||me!==Ae[Ze]?ue(te,A,oe,2):Ze--)}}},ue=(P,g,A,z,Q=null)=>{const{el:j,type:V,transition:B,children:ve,shapeFlag:me}=P;if(me&6){ue(P.component.subTree,g,A,z);return}if(me&128){P.suspense.move(g,A,z);return}if(me&64){V.move(P,g,A,ae);return}if(V===ye){o(j,g,A);for(let Ue=0;Ue<ve.length;Ue++)ue(ve[Ue],g,A,z);o(P.anchor,g,A);return}if(V===Qn){E(P,g,A);return}if(z!==2&&me&1&&B)if(z===0)B.beforeEnter(j),o(j,g,A),Vt(()=>B.enter(j),Q);else{const{leave:Ue,delayLeave:Be,afterLeave:Ce}=B,Qe=()=>{P.ctx.isUnmounted?a(j):o(j,g,A)},Ge=()=>{j._isLeaving&&j[ks](!0),Ue(j,()=>{Qe(),Ce&&Ce()})};Be?Be(j,Qe,Ge):Ge()}else o(j,g,A)},Z=(P,g,A,z=!1,Q=!1)=>{const{type:j,props:V,ref:B,children:ve,dynamicChildren:me,shapeFlag:Le,patchFlag:Ue,dirs:Be,cacheIndex:Ce}=P;if(Ue===-2&&(Q=!1),B!=null&&(Ss(),Kn(B,null,A,P,!0),xs()),Ce!=null&&(g.renderCache[Ce]=void 0),Le&256){g.ctx.deactivate(P);return}const Qe=Le&1&&Be,Ge=!pn(P);let Ze;if(Ge&&(Ze=V&&V.onVnodeBeforeUnmount)&&fs(Ze,g,P),Le&6)Pe(P.component,A,z);else{if(Le&128){P.suspense.unmount(A,z);return}Qe&&Hs(P,null,g,"beforeUnmount"),Le&64?P.type.remove(P,g,A,ae,z):me&&!me.hasOnce&&(j!==ye||Ue>0&&Ue&64)?je(me,g,A,!1,!0):(j===ye&&Ue&384||!Q&&Le&16)&&je(ve,g,A),z&&q(P)}(Ge&&(Ze=V&&V.onVnodeUnmounted)||Qe)&&Vt(()=>{Ze&&fs(Ze,g,P),Qe&&Hs(P,null,g,"unmounted")},A)},q=P=>{const{type:g,el:A,anchor:z,transition:Q}=P;if(g===ye){ie(A,z);return}if(g===Qn){F(P);return}const j=()=>{a(A),Q&&!Q.persisted&&Q.afterLeave&&Q.afterLeave()};if(P.shapeFlag&1&&Q&&!Q.persisted){const{leave:V,delayLeave:B}=Q,ve=()=>V(A,j);B?B(P.el,j,ve):ve()}else j()},ie=(P,g)=>{let A;for(;P!==g;)A=b(P),a(P),P=A;a(g)},Pe=(P,g,A)=>{const{bum:z,scope:Q,job:j,subTree:V,um:B,m:ve,a:me}=P;yi(ve),yi(me),z&&Mo(z),Q.stop(),j&&(j.flags|=8,Z(V,P,g,A)),B&&Vt(B,g),Vt(()=>{P.isUnmounted=!0},g)},je=(P,g,A,z=!1,Q=!1,j=0)=>{for(let V=j;V<P.length;V++)Z(P[V],g,A,z,Q)},le=P=>{if(P.shapeFlag&6)return le(P.component.subTree);if(P.shapeFlag&128)return P.suspense.next();const g=b(P.anchor||P.el),A=g&&g[_c];return A?b(A):g};let xe=!1;const K=(P,g,A)=>{P==null?g._vnode&&Z(g._vnode,null,null,!0):S(g._vnode||null,P,g,null,null,null,A),g._vnode=P,xe||(xe=!0,li(),gc(),xe=!1)},ae={p:S,um:Z,m:ue,r:q,mt:N,mc:D,pc:ee,pbc:O,n:le,o:e};return{render:K,hydrate:void 0,createApp:Of(K)}}function Ba({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 zs({effect:e,job:t},s){s?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Kf(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function ql(e,t,s=!1){const o=e.children,a=t.children;if(Je(o)&&Je(a))for(let l=0;l<o.length;l++){const i=o[l];let r=a[l];r.shapeFlag&1&&!r.dynamicChildren&&((r.patchFlag<=0||r.patchFlag===32)&&(r=a[l]=Ds(a[l]),r.el=i.el),!s&&r.patchFlag!==-2&&ql(i,r)),r.type===ga&&r.patchFlag!==-1&&(r.el=i.el),r.type===Mt&&!r.el&&(r.el=i.el)}}function Gf(e){const t=e.slice(),s=[0];let o,a,l,i,r;const c=e.length;for(o=0;o<c;o++){const p=e[o];if(p!==0){if(a=s[s.length-1],e[a]<p){t[o]=a,s.push(o);continue}for(l=0,i=s.length-1;l<i;)r=l+i>>1,e[s[r]]<p?l=r+1:i=r;p<e[s[l]]&&(l>0&&(t[o]=s[l-1]),s[l]=o)}}for(l=s.length,i=s[l-1];l-- >0;)s[l]=i,i=t[i];return s}function Wc(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Wc(t)}function yi(e){if(e)for(let t=0;t<e.length;t++)e[t].flags|=8}const Qf=Symbol.for("v-scx"),Jf=()=>as(Qf);function Xe(e,t,s){return Kc(e,t,s)}function Kc(e,t,s=mt){const{immediate:o,deep:a,flush:l,once:i}=s,r=xt({},s),c=t&&o||!t&&l!=="post";let p;if(io){if(l==="sync"){const _=Jf();p=_.__watcherHandles||(_.__watcherHandles=[])}else if(!c){const _=()=>{};return _.stop=ns,_.resume=ns,_.pause=ns,_}}const d=Dt;r.call=(_,y,S)=>cs(_,d,y,S);let v=!1;l==="post"?r.scheduler=_=>{Vt(_,d&&d.suspense)}:l!=="sync"&&(v=!0,r.scheduler=(_,y)=>{y?_():Fl(_)}),r.augmentJob=_=>{t&&(_.flags|=4),v&&(_.flags|=2,d&&(_.id=d.uid,_.i=d))};const b=vf(e,t,r);return io&&(p?p.push(b):c&&b()),b}function Xf(e,t,s){const o=this.proxy,a=$t(e)?e.includes(".")?Gc(o,e):()=>o[e]:e.bind(o,o);let l;et(t)?l=t:(l=t.handler,s=t);const i=go(this),r=Kc(a,l.bind(o),s);return i(),r}function Gc(e,t){const s=t.split(".");return()=>{let o=e;for(let a=0;a<s.length&&o;a++)o=o[s[a]];return o}}const Zf=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Zt(t)}Modifiers`]||e[`${Bs(t)}Modifiers`];function Yf(e,t,...s){if(e.isUnmounted)return;const o=e.vnode.props||mt;let a=s;const l=t.startsWith("update:"),i=l&&Zf(o,t.slice(7));i&&(i.trim&&(a=s.map(d=>$t(d)?d.trim():d)),i.number&&(a=s.map(Wo)));let r,c=o[r=Ma(t)]||o[r=Ma(Zt(t))];!c&&l&&(c=o[r=Ma(Bs(t))]),c&&cs(c,e,6,a);const p=o[r+"Once"];if(p){if(!e.emitted)e.emitted={};else if(e.emitted[r])return;e.emitted[r]=!0,cs(p,e,6,a)}}const ep=new WeakMap;function Qc(e,t,s=!1){const o=s?ep:t.emitsCache,a=o.get(e);if(a!==void 0)return a;const l=e.emits;let i={},r=!1;if(!et(e)){const c=p=>{const d=Qc(p,t,!0);d&&(r=!0,xt(i,d))};!s&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!l&&!r?(vt(e)&&o.set(e,null),null):(Je(l)?l.forEach(c=>i[c]=null):xt(i,l),vt(e)&&o.set(e,i),i)}function ha(e,t){return!e||!ia(t)?!1:(t=t.slice(2).replace(/Once$/,""),ut(e,t[0].toLowerCase()+t.slice(1))||ut(e,Bs(t))||ut(e,t))}function bi(e){const{type:t,vnode:s,proxy:o,withProxy:a,propsOptions:[l],slots:i,attrs:r,emit:c,render:p,renderCache:d,props:v,data:b,setupState:_,ctx:y,inheritAttrs:S}=e,C=Jo(e);let I,x;try{if(s.shapeFlag&4){const F=a||o,W=F;I=hs(p.call(W,F,d,v,_,b,y)),x=r}else{const F=t;I=hs(F.length>1?F(v,{attrs:r,slots:i,emit:c}):F(v,null)),x=t.props?r:tp(r)}}catch(F){Jn.length=0,pa(F,e,1),I=m(Mt)}let E=I;if(x&&S!==!1){const F=Object.keys(x),{shapeFlag:W}=E;F.length&&W&7&&(l&&F.some(Al)&&(x=sp(x,l)),E=Fs(E,x,!1,!0))}return s.dirs&&(E=Fs(E,null,!1,!0),E.dirs=E.dirs?E.dirs.concat(s.dirs):s.dirs),s.transition&&nn(E,s.transition),I=E,Jo(C),I}const tp=e=>{let t;for(const s in e)(s==="class"||s==="style"||ia(s))&&((t||(t={}))[s]=e[s]);return t},sp=(e,t)=>{const s={};for(const o in e)(!Al(o)||!(o.slice(9)in t))&&(s[o]=e[o]);return s};function np(e,t,s){const{props:o,children:a,component:l}=e,{props:i,children:r,patchFlag:c}=t,p=l.emitsOptions;if(t.dirs||t.transition)return!0;if(s&&c>=0){if(c&1024)return!0;if(c&16)return o?_i(o,i,p):!!i;if(c&8){const d=t.dynamicProps;for(let v=0;v<d.length;v++){const b=d[v];if(i[b]!==o[b]&&!ha(p,b))return!0}}}else return(a||r)&&(!r||!r.$stable)?!0:o===i?!1:o?i?_i(o,i,p):!0:!!i;return!1}function _i(e,t,s){const o=Object.keys(t);if(o.length!==Object.keys(e).length)return!0;for(let a=0;a<o.length;a++){const l=o[a];if(t[l]!==e[l]&&!ha(s,l))return!0}return!1}function op({vnode:e,parent:t},s){for(;t;){const o=t.subTree;if(o.suspense&&o.suspense.activeBranch===e&&(o.el=e.el),o===e)(e=t.vnode).el=s,t=t.parent;else break}}const Jc=e=>e.__isSuspense;function ap(e,t){t&&t.pendingBranch?Je(e)?t.effects.push(...e):t.effects.push(e):hc(e)}const ye=Symbol.for("v-fgt"),ga=Symbol.for("v-txt"),Mt=Symbol.for("v-cmt"),Qn=Symbol.for("v-stc"),Jn=[];let Kt=null;function u(e=!1){Jn.push(Kt=e?null:[])}function lp(){Jn.pop(),Kt=Jn[Jn.length-1]||null}let ao=1;function Yo(e,t=!1){ao+=e,e<0&&Kt&&t&&(Kt.hasOnce=!0)}function Xc(e){return e.dynamicChildren=ao>0?Kt||cn:null,lp(),ao>0&&Kt&&Kt.push(e),e}function f(e,t,s,o,a,l){return Xc(n(e,t,s,o,a,l,!0))}function Ne(e,t,s,o,a){return Xc(m(e,t,s,o,a,!0))}function lo(e){return e?e.__v_isVNode===!0:!1}function Xs(e,t){return e.type===t.type&&e.key===t.key}const Zc=({key:e})=>e??null,No=({ref:e,ref_key:t,ref_for:s})=>(typeof e=="number"&&(e=""+e),e!=null?$t(e)||Nt(e)||et(e)?{i:Ut,r:e,k:t,f:!!s}:e:null);function n(e,t=null,s=null,o=0,a=null,l=e===ye?0:1,i=!1,r=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Zc(t),ref:t&&No(t),scopeId:bc,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:l,patchFlag:o,dynamicProps:a,dynamicChildren:null,appContext:null,ctx:Ut};return r?(Hl(c,s),l&128&&e.normalize(c)):s&&(c.shapeFlag|=$t(s)?8:16),ao>0&&!i&&Kt&&(c.patchFlag>0||l&6)&&c.patchFlag!==32&&Kt.push(c),c}const m=ip;function ip(e,t=null,s=null,o=0,a=null,l=!1){if((!e||e===Tf)&&(e=Mt),lo(e)){const r=Fs(e,t,!0);return s&&Hl(r,s),ao>0&&!l&&Kt&&(r.shapeFlag&6?Kt[Kt.indexOf(e)]=r:Kt.push(r)),r.patchFlag=-2,r}if(yp(e)&&(e=e.__vccOpts),t){t=rp(t);let{class:r,style:c}=t;r&&!$t(r)&&(t.class=Te(r)),vt(c)&&(Ol(c)&&!Je(c)&&(c=xt({},c)),t.style=St(c))}const i=$t(e)?1:Jc(e)?128:wc(e)?64:vt(e)?4:et(e)?2:0;return n(e,t,s,o,a,i,l,!0)}function rp(e){return e?Ol(e)||Vc(e)?xt({},e):e:null}function Fs(e,t,s=!1,o=!1){const{props:a,ref:l,patchFlag:i,children:r,transition:c}=e,p=t?cp(a||{},t):a,d={__v_isVNode:!0,__v_skip:!0,type:e.type,props:p,key:p&&Zc(p),ref:t&&t.ref?s&&l?Je(l)?l.concat(No(t)):[l,No(t)]:No(t):l,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:r,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ye?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Fs(e.ssContent),ssFallback:e.ssFallback&&Fs(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&o&&nn(d,c.clone(d)),d}function $e(e=" ",t=0){return m(ga,null,e,t)}function ea(e,t){const s=m(Qn,null,e);return s.staticCount=t,s}function T(e="",t=!1){return t?(u(),Ne(Mt,null,e)):m(Mt,null,e)}function hs(e){return e==null||typeof e=="boolean"?m(Mt):Je(e)?m(ye,null,e.slice()):lo(e)?Ds(e):m(ga,null,String(e))}function Ds(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Fs(e)}function Hl(e,t){let s=0;const{shapeFlag:o}=e;if(t==null)t=null;else if(Je(t))s=16;else if(typeof t=="object")if(o&65){const a=t.default;a&&(a._c&&(a._d=!1),Hl(e,a()),a._c&&(a._d=!0));return}else{s=32;const a=t._;!a&&!Vc(t)?t._ctx=Ut:a===3&&Ut&&(Ut.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else et(t)?(t={default:t,_ctx:Ut},s=32):(t=String(t),o&64?(s=16,t=[$e(t)]):s=8);e.children=t,e.shapeFlag|=s}function cp(...e){const t={};for(let s=0;s<e.length;s++){const o=e[s];for(const a in o)if(a==="class")t.class!==o.class&&(t.class=Te([t.class,o.class]));else if(a==="style")t.style=St([t.style,o.style]);else if(ia(a)){const l=t[a],i=o[a];i&&l!==i&&!(Je(l)&&l.includes(i))&&(t[a]=l?[].concat(l,i):i)}else a!==""&&(t[a]=o[a])}return t}function fs(e,t,s,o=null){cs(e,t,7,[s,o])}const up=Nc();let dp=0;function fp(e,t,s){const o=e.type,a=(t?t.appContext:e.appContext)||up,l={uid:dp++,vnode:e,type:o,parent:t,appContext:a,root:null,next:null,subTree:null,effect:null,update:null,job:null,scope:new Qr(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:t?t.provides:Object.create(a.provides),ids:t?t.ids:["",0,0],accessCache:null,renderCache:[],components:null,directives:null,propsOptions:jc(o,a),emitsOptions:Qc(o,a),emit:null,emitted:null,propsDefaults:mt,inheritAttrs:o.inheritAttrs,ctx:mt,data:mt,props:mt,attrs:mt,slots:mt,refs:mt,setupState:mt,setupContext:null,suspense:s,suspenseId:s?s.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return l.ctx={_:l},l.root=t?t.root:l,l.emit=Yf.bind(null,l),e.ce&&e.ce(l),l}let Dt=null;const ya=()=>Dt||Ut;let ta,dl;{const e=ua(),t=(s,o)=>{let a;return(a=e[s])||(a=e[s]=[]),a.push(o),l=>{a.length>1?a.forEach(i=>i(l)):a[0](l)}};ta=t("__VUE_INSTANCE_SETTERS__",s=>Dt=s),dl=t("__VUE_SSR_SETTERS__",s=>io=s)}const go=e=>{const t=Dt;return ta(e),e.scope.on(),()=>{e.scope.off(),ta(t)}},wi=()=>{Dt&&Dt.scope.off(),ta(null)};function Yc(e){return e.vnode.shapeFlag&4}let io=!1;function pp(e,t=!1,s=!1){t&&dl(t);const{props:o,children:a}=e.vnode,l=Yc(e);Ff(e,o,l,t),qf(e,a,s||t);const i=l?vp(e,t):void 0;return t&&dl(!1),i}function vp(e,t){const s=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Rf);const{setup:o}=s;if(o){Ss();const a=e.setupContext=o.length>1?hp(e):null,l=go(e),i=mo(o,e,0,[e.props,a]),r=jr(i);if(xs(),l(),(r||e.sp)&&!pn(e)&&Tc(e),r){if(i.then(wi,wi),t)return i.then(c=>{ki(e,c)}).catch(c=>{pa(c,e,0)});e.asyncDep=i}else ki(e,i)}else eu(e)}function ki(e,t,s){et(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:vt(t)&&(e.setupState=pc(t)),eu(e)}function eu(e,t,s){const o=e.type;e.render||(e.render=o.render||ns);{const a=go(e);Ss();try{Uf(e)}finally{xs(),a()}}}const mp={get(e,t){return Pt(e,"get",""),e[t]}};function hp(e){const t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.attrs,mp),slots:e.slots,emit:e.emit,expose:t}}function ba(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(pc(dc(e.exposed)),{get(t,s){if(s in t)return t[s];if(s in Gn)return Gn[s](e)},has(t,s){return s in t||s in Gn}})):e.proxy}function gp(e,t=!0){return et(e)?e.displayName||e.name:e.name||t&&e.__name}function yp(e){return et(e)&&"__vccOpts"in e}const ge=(e,t)=>ff(e,t,io);function ro(e,t,s){try{Yo(-1);const o=arguments.length;return o===2?vt(t)&&!Je(t)?lo(t)?m(e,null,[t]):m(e,t):m(e,null,t):(o>3?s=Array.prototype.slice.call(arguments,2):o===3&&lo(s)&&(s=[s]),m(e,t,s))}finally{Yo(1)}}const bp="3.5.22";/**
|
||
* @vue/runtime-dom v3.5.22
|
||
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
||
* @license MIT
|
||
**/let fl;const $i=typeof window<"u"&&window.trustedTypes;if($i)try{fl=$i.createPolicy("vue",{createHTML:e=>e})}catch{}const tu=fl?e=>fl.createHTML(e):e=>e,_p="http://www.w3.org/2000/svg",wp="http://www.w3.org/1998/Math/MathML",ws=typeof document<"u"?document:null,Ci=ws&&ws.createElement("template"),kp={insert:(e,t,s)=>{t.insertBefore(e,s||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,s,o)=>{const a=t==="svg"?ws.createElementNS(_p,e):t==="mathml"?ws.createElementNS(wp,e):s?ws.createElement(e,{is:s}):ws.createElement(e);return e==="select"&&o&&o.multiple!=null&&a.setAttribute("multiple",o.multiple),a},createText:e=>ws.createTextNode(e),createComment:e=>ws.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>ws.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,s,o,a,l){const i=s?s.previousSibling:t.lastChild;if(a&&(a===l||a.nextSibling))for(;t.insertBefore(a.cloneNode(!0),s),!(a===l||!(a=a.nextSibling)););else{Ci.innerHTML=tu(o==="svg"?`<svg>${e}</svg>`:o==="mathml"?`<math>${e}</math>`:e);const r=Ci.content;if(o==="svg"||o==="mathml"){const c=r.firstChild;for(;c.firstChild;)r.appendChild(c.firstChild);r.removeChild(c)}t.insertBefore(r,s)}return[i?i.nextSibling:t.firstChild,s?s.previousSibling:t.lastChild]}},Rs="transition",Pn="animation",gn=Symbol("_vtc"),su={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},nu=xt({},Ic,su),$p=e=>(e.displayName="Transition",e.props=nu,e),gt=$p((e,{slots:t})=>ro(bf,ou(e),t)),Ws=(e,t=[])=>{Je(e)?e.forEach(s=>s(...t)):e&&e(...t)},Ii=e=>e?Je(e)?e.some(t=>t.length>1):e.length>1:!1;function ou(e){const t={};for(const R in e)R in su||(t[R]=e[R]);if(e.css===!1)return t;const{name:s="v",type:o,duration:a,enterFromClass:l=`${s}-enter-from`,enterActiveClass:i=`${s}-enter-active`,enterToClass:r=`${s}-enter-to`,appearFromClass:c=l,appearActiveClass:p=i,appearToClass:d=r,leaveFromClass:v=`${s}-leave-from`,leaveActiveClass:b=`${s}-leave-active`,leaveToClass:_=`${s}-leave-to`}=e,y=Cp(a),S=y&&y[0],C=y&&y[1],{onBeforeEnter:I,onEnter:x,onEnterCancelled:E,onLeave:F,onLeaveCancelled:W,onBeforeAppear:G=I,onAppear:re=x,onAppearCancelled:D=E}=t,U=(R,M,N,L)=>{R._enterCancelled=L,Ps(R,M?d:r),Ps(R,M?p:i),N&&N()},O=(R,M)=>{R._isLeaving=!1,Ps(R,v),Ps(R,_),Ps(R,b),M&&M()},$=R=>(M,N)=>{const L=R?re:x,X=()=>U(M,R,N);Ws(L,[M,X]),Si(()=>{Ps(M,R?c:l),vs(M,R?d:r),Ii(L)||xi(M,o,S,X)})};return xt(t,{onBeforeEnter(R){Ws(I,[R]),vs(R,l),vs(R,i)},onBeforeAppear(R){Ws(G,[R]),vs(R,c),vs(R,p)},onEnter:$(!1),onAppear:$(!0),onLeave(R,M){R._isLeaving=!0;const N=()=>O(R,M);vs(R,v),R._enterCancelled?(vs(R,b),pl(R)):(pl(R),vs(R,b)),Si(()=>{R._isLeaving&&(Ps(R,v),vs(R,_),Ii(F)||xi(R,o,C,N))}),Ws(F,[R,N])},onEnterCancelled(R){U(R,!1,void 0,!0),Ws(E,[R])},onAppearCancelled(R){U(R,!0,void 0,!0),Ws(D,[R])},onLeaveCancelled(R){O(R),Ws(W,[R])}})}function Cp(e){if(e==null)return null;if(vt(e))return[ja(e.enter),ja(e.leave)];{const t=ja(e);return[t,t]}}function ja(e){return Pd(e)}function vs(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.add(s)),(e[gn]||(e[gn]=new Set)).add(t)}function Ps(e,t){t.split(/\s+/).forEach(o=>o&&e.classList.remove(o));const s=e[gn];s&&(s.delete(t),s.size||(e[gn]=void 0))}function Si(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Ip=0;function xi(e,t,s,o){const a=e._endId=++Ip,l=()=>{a===e._endId&&o()};if(s!=null)return setTimeout(l,s);const{type:i,timeout:r,propCount:c}=au(e,t);if(!i)return o();const p=i+"end";let d=0;const v=()=>{e.removeEventListener(p,b),l()},b=_=>{_.target===e&&++d>=c&&v()};setTimeout(()=>{d<c&&v()},r+1),e.addEventListener(p,b)}function au(e,t){const s=window.getComputedStyle(e),o=y=>(s[y]||"").split(", "),a=o(`${Rs}Delay`),l=o(`${Rs}Duration`),i=Ai(a,l),r=o(`${Pn}Delay`),c=o(`${Pn}Duration`),p=Ai(r,c);let d=null,v=0,b=0;t===Rs?i>0&&(d=Rs,v=i,b=l.length):t===Pn?p>0&&(d=Pn,v=p,b=c.length):(v=Math.max(i,p),d=v>0?i>p?Rs:Pn:null,b=d?d===Rs?l.length:c.length:0);const _=d===Rs&&/\b(?:transform|all)(?:,|$)/.test(o(`${Rs}Property`).toString());return{type:d,timeout:v,propCount:b,hasTransform:_}}function Ai(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max(...t.map((s,o)=>Ti(s)+Ti(e[o])))}function Ti(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function pl(e){return(e?e.ownerDocument:document).body.offsetHeight}function Sp(e,t,s){const o=e[gn];o&&(t=(t?[t,...o]:[...o]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const sa=Symbol("_vod"),lu=Symbol("_vsh"),ls={name:"show",beforeMount(e,{value:t},{transition:s}){e[sa]=e.style.display==="none"?"":e.style.display,s&&t?s.beforeEnter(e):Mn(e,t)},mounted(e,{value:t},{transition:s}){s&&t&&s.enter(e)},updated(e,{value:t,oldValue:s},{transition:o}){!t!=!s&&(o?t?(o.beforeEnter(e),Mn(e,!0),o.enter(e)):o.leave(e,()=>{Mn(e,!1)}):Mn(e,t))},beforeUnmount(e,{value:t}){Mn(e,t)}};function Mn(e,t){e.style.display=t?e[sa]:"none",e[lu]=!t}const iu=Symbol("");function xp(e){const t=ya();if(!t)return;const s=t.ut=(a=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach(l=>na(l,a))},o=()=>{const a=e(t.proxy);t.ce?na(t.ce,a):vl(t.subTree,a),s(a)};Rc(()=>{hc(o)}),nt(()=>{Xe(o,ns,{flush:"post"});const a=new MutationObserver(o);a.observe(t.subTree.el.parentNode,{childList:!0}),At(()=>a.disconnect())})}function vl(e,t){if(e.shapeFlag&128){const s=e.suspense;e=s.activeBranch,s.pendingBranch&&!s.isHydrating&&s.effects.push(()=>{vl(s.activeBranch,t)})}for(;e.component;)e=e.component.subTree;if(e.shapeFlag&1&&e.el)na(e.el,t);else if(e.type===ye)e.children.forEach(s=>vl(s,t));else if(e.type===Qn){let{el:s,anchor:o}=e;for(;s&&(na(s,t),s!==o);)s=s.nextSibling}}function na(e,t){if(e.nodeType===1){const s=e.style;let o="";for(const a in t){const l=Bd(t[a]);s.setProperty(`--${a}`,l),o+=`--${a}: ${l};`}s[iu]=o}}const Ap=/(?:^|;)\s*display\s*:/;function Tp(e,t,s){const o=e.style,a=$t(s);let l=!1;if(s&&!a){if(t)if($t(t))for(const i of t.split(";")){const r=i.slice(0,i.indexOf(":")).trim();s[r]==null&&Oo(o,r,"")}else for(const i in t)s[i]==null&&Oo(o,i,"");for(const i in s)i==="display"&&(l=!0),Oo(o,i,s[i])}else if(a){if(t!==s){const i=o[iu];i&&(s+=";"+i),o.cssText=s,l=Ap.test(s)}}else t&&e.removeAttribute("style");sa in e&&(e[sa]=l?o.display:"",e[lu]&&(o.display="none"))}const Ei=/\s*!important$/;function Oo(e,t,s){if(Je(s))s.forEach(o=>Oo(e,t,o));else if(s==null&&(s=""),t.startsWith("--"))e.setProperty(t,s);else{const o=Ep(e,t);Ei.test(s)?e.setProperty(Bs(o),s.replace(Ei,""),"important"):e[o]=s}}const Ri=["Webkit","Moz","ms"],qa={};function Ep(e,t){const s=qa[t];if(s)return s;let o=Zt(t);if(o!=="filter"&&o in e)return qa[t]=o;o=ca(o);for(let a=0;a<Ri.length;a++){const l=Ri[a]+o;if(l in e)return qa[t]=l}return t}const Ui="http://www.w3.org/1999/xlink";function Pi(e,t,s,o,a,l=Fd(t)){o&&t.startsWith("xlink:")?s==null?e.removeAttributeNS(Ui,t.slice(6,t.length)):e.setAttributeNS(Ui,t,s):s==null||l&&!Wr(s)?e.removeAttribute(t):e.setAttribute(t,l?"":rs(s)?String(s):s)}function Mi(e,t,s,o,a){if(t==="innerHTML"||t==="textContent"){s!=null&&(e[t]=t==="innerHTML"?tu(s):s);return}const l=e.tagName;if(t==="value"&&l!=="PROGRESS"&&!l.includes("-")){const r=l==="OPTION"?e.getAttribute("value")||"":e.value,c=s==null?e.type==="checkbox"?"on":"":String(s);(r!==c||!("_value"in e))&&(e.value=c),s==null&&e.removeAttribute(t),e._value=s;return}let i=!1;if(s===""||s==null){const r=typeof e[t];r==="boolean"?s=Wr(s):s==null&&r==="string"?(s="",i=!0):r==="number"&&(s=0,i=!0)}try{e[t]=s}catch{}i&&e.removeAttribute(a||t)}function Is(e,t,s,o){e.addEventListener(t,s,o)}function Rp(e,t,s,o){e.removeEventListener(t,s,o)}const Di=Symbol("_vei");function Up(e,t,s,o,a=null){const l=e[Di]||(e[Di]={}),i=l[t];if(o&&i)i.value=o;else{const[r,c]=Pp(t);if(o){const p=l[t]=Lp(o,a);Is(e,r,p,c)}else i&&(Rp(e,r,i,c),l[t]=void 0)}}const Li=/(?:Once|Passive|Capture)$/;function Pp(e){let t;if(Li.test(e)){t={};let o;for(;o=e.match(Li);)e=e.slice(0,e.length-o[0].length),t[o[0].toLowerCase()]=!0}return[e[2]===":"?e.slice(3):Bs(e.slice(2)),t]}let Ha=0;const Mp=Promise.resolve(),Dp=()=>Ha||(Mp.then(()=>Ha=0),Ha=Date.now());function Lp(e,t){const s=o=>{if(!o._vts)o._vts=Date.now();else if(o._vts<=s.attached)return;cs(Np(o,s.value),t,5,[o])};return s.value=e,s.attached=Dp(),s}function Np(e,t){if(Je(t)){const s=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{s.call(e),e._stopped=!0},t.map(o=>a=>!a._stopped&&o&&o(a))}else return t}const Ni=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Op=(e,t,s,o,a,l)=>{const i=a==="svg";t==="class"?Sp(e,o,i):t==="style"?Tp(e,s,o):ia(t)?Al(t)||Up(e,t,s,o,l):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Fp(e,t,o,i))?(Mi(e,t,o),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Pi(e,t,o,i,l,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!$t(o))?Mi(e,Zt(t),o,l,t):(t==="true-value"?e._trueValue=o:t==="false-value"&&(e._falseValue=o),Pi(e,t,o,i))};function Fp(e,t,s,o){if(o)return!!(t==="innerHTML"||t==="textContent"||t in e&&Ni(t)&&et(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 a=e.tagName;if(a==="IMG"||a==="VIDEO"||a==="CANVAS"||a==="SOURCE")return!1}return Ni(t)&&$t(s)?!1:t in e}const ru=new WeakMap,cu=new WeakMap,oa=Symbol("_moveCb"),Oi=Symbol("_enterCb"),Vp=e=>(delete e.props.mode,e),Bp=Vp({name:"TransitionGroup",props:xt({},nu,{tag:String,moveClass:String}),setup(e,{slots:t}){const s=ya(),o=Cc();let a,l;return Uc(()=>{if(!a.length)return;const i=e.moveClass||`${e.name||"v"}-move`;if(!zp(a[0].el,s.vnode.el,i)){a=[];return}a.forEach(jp),a.forEach(qp);const r=a.filter(Hp);pl(s.vnode.el),r.forEach(c=>{const p=c.el,d=p.style;vs(p,i),d.transform=d.webkitTransform=d.transitionDuration="";const v=p[oa]=b=>{b&&b.target!==p||(!b||b.propertyName.endsWith("transform"))&&(p.removeEventListener("transitionend",v),p[oa]=null,Ps(p,i))};p.addEventListener("transitionend",v)}),a=[]}),()=>{const i=it(e),r=ou(i);let c=i.tag||ye;if(a=[],l)for(let p=0;p<l.length;p++){const d=l[p];d.el&&d.el instanceof Element&&(a.push(d),nn(d,oo(d,r,o,s)),ru.set(d,d.el.getBoundingClientRect()))}l=t.default?Vl(t.default()):[];for(let p=0;p<l.length;p++){const d=l[p];d.key!=null&&nn(d,oo(d,r,o,s))}return m(c,null,l)}}}),uu=Bp;function jp(e){const t=e.el;t[oa]&&t[oa](),t[Oi]&&t[Oi]()}function qp(e){cu.set(e,e.el.getBoundingClientRect())}function Hp(e){const t=ru.get(e),s=cu.get(e),o=t.left-s.left,a=t.top-s.top;if(o||a){const l=e.el.style;return l.transform=l.webkitTransform=`translate(${o}px,${a}px)`,l.transitionDuration="0s",e}}function zp(e,t,s){const o=e.cloneNode(),a=e[gn];a&&a.forEach(r=>{r.split(/\s+/).forEach(c=>c&&o.classList.remove(c))}),s.split(/\s+/).forEach(r=>r&&o.classList.add(r)),o.style.display="none";const l=t.nodeType===1?t:t.parentNode;l.appendChild(o);const{hasTransform:i}=au(o);return l.removeChild(o),i}const Vs=e=>{const t=e.props["onUpdate:modelValue"]||!1;return Je(t)?s=>Mo(t,s):t};function Wp(e){e.target.composing=!0}function Fi(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Xt=Symbol("_assign"),Ke={created(e,{modifiers:{lazy:t,trim:s,number:o}},a){e[Xt]=Vs(a);const l=o||a.props&&a.props.type==="number";Is(e,t?"change":"input",i=>{if(i.target.composing)return;let r=e.value;s&&(r=r.trim()),l&&(r=Wo(r)),e[Xt](r)}),s&&Is(e,"change",()=>{e.value=e.value.trim()}),t||(Is(e,"compositionstart",Wp),Is(e,"compositionend",Fi),Is(e,"change",Fi))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:s,modifiers:{lazy:o,trim:a,number:l}},i){if(e[Xt]=Vs(i),e.composing)return;const r=(l||e.type==="number")&&!/^0\d/.test(e.value)?Wo(e.value):e.value,c=t??"";r!==c&&(document.activeElement===e&&e.type!=="range"&&(o&&t===s||a&&e.value.trim()===c)||(e.value=c))}},du={deep:!0,created(e,t,s){e[Xt]=Vs(s),Is(e,"change",()=>{const o=e._modelValue,a=yn(e),l=e.checked,i=e[Xt];if(Je(o)){const r=Rl(o,a),c=r!==-1;if(l&&!c)i(o.concat(a));else if(!l&&c){const p=[...o];p.splice(r,1),i(p)}}else if($n(o)){const r=new Set(o);l?r.add(a):r.delete(a),i(r)}else i(fu(e,l))})},mounted:Vi,beforeUpdate(e,t,s){e[Xt]=Vs(s),Vi(e,t,s)}};function Vi(e,{value:t,oldValue:s},o){e._modelValue=t;let a;if(Je(t))a=Rl(t,o.props.value)>-1;else if($n(t))a=t.has(o.props.value);else{if(t===s)return;a=sn(t,fu(e,!0))}e.checked!==a&&(e.checked=a)}const Kp={created(e,{value:t},s){e.checked=sn(t,s.props.value),e[Xt]=Vs(s),Is(e,"change",()=>{e[Xt](yn(e))})},beforeUpdate(e,{value:t,oldValue:s},o){e[Xt]=Vs(o),t!==s&&(e.checked=sn(t,o.props.value))}},Xn={deep:!0,created(e,{value:t,modifiers:{number:s}},o){const a=$n(t);Is(e,"change",()=>{const l=Array.prototype.filter.call(e.options,i=>i.selected).map(i=>s?Wo(yn(i)):yn(i));e[Xt](e.multiple?a?new Set(l):l:l[0]),e._assigning=!0,pt(()=>{e._assigning=!1})}),e[Xt]=Vs(o)},mounted(e,{value:t}){Bi(e,t)},beforeUpdate(e,t,s){e[Xt]=Vs(s)},updated(e,{value:t}){e._assigning||Bi(e,t)}};function Bi(e,t){const s=e.multiple,o=Je(t);if(!(s&&!o&&!$n(t))){for(let a=0,l=e.options.length;a<l;a++){const i=e.options[a],r=yn(i);if(s)if(o){const c=typeof r;c==="string"||c==="number"?i.selected=t.some(p=>String(p)===String(r)):i.selected=Rl(t,r)>-1}else i.selected=t.has(r);else if(sn(yn(i),t)){e.selectedIndex!==a&&(e.selectedIndex=a);return}}!s&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function yn(e){return"_value"in e?e._value:e.value}function fu(e,t){const s=t?"_trueValue":"_falseValue";return s in e?e[s]:t}const Gp={created(e,t,s){Ro(e,t,s,null,"created")},mounted(e,t,s){Ro(e,t,s,null,"mounted")},beforeUpdate(e,t,s,o){Ro(e,t,s,o,"beforeUpdate")},updated(e,t,s,o){Ro(e,t,s,o,"updated")}};function Qp(e,t){switch(e){case"SELECT":return Xn;case"TEXTAREA":return Ke;default:switch(t){case"checkbox":return du;case"radio":return Kp;default:return Ke}}}function Ro(e,t,s,o,a){const i=Qp(e.tagName,s.props&&s.props.type)[a];i&&i(e,t,s,o)}const Jp=["ctrl","shift","alt","meta"],Xp={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)=>Jp.some(s=>e[`${s}Key`]&&!t.includes(s))},Oe=(e,t)=>{const s=e._withMods||(e._withMods={}),o=t.join(".");return s[o]||(s[o]=(a,...l)=>{for(let i=0;i<t.length;i++){const r=Xp[t[i]];if(r&&r(a,t))return}return e(a,...l)})},Zp={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},en=(e,t)=>{const s=e._withKeys||(e._withKeys={}),o=t.join(".");return s[o]||(s[o]=a=>{if(!("key"in a))return;const l=Bs(a.key);if(t.some(i=>i===l||Zp[i]===l))return e(a)})},Yp=xt({patchProp:Op},kp);let ji;function ev(){return ji||(ji=zf(Yp))}const tv=(...e)=>{const t=ev().createApp(...e),{mount:s}=t;return t.mount=o=>{const a=nv(o);if(!a)return;const l=t._component;!et(l)&&!l.render&&!l.template&&(l.template=a.innerHTML),a.nodeType===1&&(a.textContent="");const i=s(a,!1,sv(a));return a instanceof Element&&(a.removeAttribute("v-cloak"),a.setAttribute("data-v-app","")),i},t};function sv(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function nv(e){return $t(e)?document.querySelector(e):e}/*!
|
||
* pinia v2.3.1
|
||
* (c) 2025 Eduardo San Martin Morote
|
||
* @license MIT
|
||
*/const ov=Symbol();var qi;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(qi||(qi={}));function av(){const e=jd(!0),t=e.run(()=>w({}));let s=[],o=[];const a=dc({install(l){a._a=l,l.provide(ov,a),l.config.globalProperties.$pinia=a,o.forEach(i=>s.push(i)),o=[]},use(l){return this._a?s.push(l):o.push(l),this},_p:s,_a:null,_e:e,_s:new Map,state:t});return a}function pu(e,t){return function(){return e.apply(t,arguments)}}const{toString:lv}=Object.prototype,{getPrototypeOf:zl}=Object,{iterator:_a,toStringTag:vu}=Symbol,wa=(e=>t=>{const s=lv.call(t);return e[s]||(e[s]=s.slice(8,-1).toLowerCase())})(Object.create(null)),ds=e=>(e=e.toLowerCase(),t=>wa(t)===e),ka=e=>t=>typeof t===e,{isArray:Cn}=Array,bn=ka("undefined");function yo(e){return e!==null&&!bn(e)&&e.constructor!==null&&!bn(e.constructor)&&zt(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const mu=ds("ArrayBuffer");function iv(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&mu(e.buffer),t}const rv=ka("string"),zt=ka("function"),hu=ka("number"),bo=e=>e!==null&&typeof e=="object",cv=e=>e===!0||e===!1,Fo=e=>{if(wa(e)!=="object")return!1;const t=zl(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(vu in e)&&!(_a in e)},uv=e=>{if(!bo(e)||yo(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},dv=ds("Date"),fv=ds("File"),pv=ds("Blob"),vv=ds("FileList"),mv=e=>bo(e)&&zt(e.pipe),hv=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||zt(e.append)&&((t=wa(e))==="formdata"||t==="object"&&zt(e.toString)&&e.toString()==="[object FormData]"))},gv=ds("URLSearchParams"),[yv,bv,_v,wv]=["ReadableStream","Request","Response","Headers"].map(ds),kv=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function _o(e,t,{allOwnKeys:s=!1}={}){if(e===null||typeof e>"u")return;let o,a;if(typeof e!="object"&&(e=[e]),Cn(e))for(o=0,a=e.length;o<a;o++)t.call(null,e[o],o,e);else{if(yo(e))return;const l=s?Object.getOwnPropertyNames(e):Object.keys(e),i=l.length;let r;for(o=0;o<i;o++)r=l[o],t.call(null,e[r],r,e)}}function gu(e,t){if(yo(e))return null;t=t.toLowerCase();const s=Object.keys(e);let o=s.length,a;for(;o-- >0;)if(a=s[o],t===a.toLowerCase())return a;return null}const Zs=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,yu=e=>!bn(e)&&e!==Zs;function ml(){const{caseless:e,skipUndefined:t}=yu(this)&&this||{},s={},o=(a,l)=>{const i=e&&gu(s,l)||l;Fo(s[i])&&Fo(a)?s[i]=ml(s[i],a):Fo(a)?s[i]=ml({},a):Cn(a)?s[i]=a.slice():(!t||!bn(a))&&(s[i]=a)};for(let a=0,l=arguments.length;a<l;a++)arguments[a]&&_o(arguments[a],o);return s}const $v=(e,t,s,{allOwnKeys:o}={})=>(_o(t,(a,l)=>{s&&zt(a)?e[l]=pu(a,s):e[l]=a},{allOwnKeys:o}),e),Cv=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),Iv=(e,t,s,o)=>{e.prototype=Object.create(t.prototype,o),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),s&&Object.assign(e.prototype,s)},Sv=(e,t,s,o)=>{let a,l,i;const r={};if(t=t||{},e==null)return t;do{for(a=Object.getOwnPropertyNames(e),l=a.length;l-- >0;)i=a[l],(!o||o(i,e,t))&&!r[i]&&(t[i]=e[i],r[i]=!0);e=s!==!1&&zl(e)}while(e&&(!s||s(e,t))&&e!==Object.prototype);return t},xv=(e,t,s)=>{e=String(e),(s===void 0||s>e.length)&&(s=e.length),s-=t.length;const o=e.indexOf(t,s);return o!==-1&&o===s},Av=e=>{if(!e)return null;if(Cn(e))return e;let t=e.length;if(!hu(t))return null;const s=new Array(t);for(;t-- >0;)s[t]=e[t];return s},Tv=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&zl(Uint8Array)),Ev=(e,t)=>{const o=(e&&e[_a]).call(e);let a;for(;(a=o.next())&&!a.done;){const l=a.value;t.call(e,l[0],l[1])}},Rv=(e,t)=>{let s;const o=[];for(;(s=e.exec(t))!==null;)o.push(s);return o},Uv=ds("HTMLFormElement"),Pv=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(s,o,a){return o.toUpperCase()+a}),Hi=(({hasOwnProperty:e})=>(t,s)=>e.call(t,s))(Object.prototype),Mv=ds("RegExp"),bu=(e,t)=>{const s=Object.getOwnPropertyDescriptors(e),o={};_o(s,(a,l)=>{let i;(i=t(a,l,e))!==!1&&(o[l]=i||a)}),Object.defineProperties(e,o)},Dv=e=>{bu(e,(t,s)=>{if(zt(e)&&["arguments","caller","callee"].indexOf(s)!==-1)return!1;const o=e[s];if(zt(o)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+s+"'")})}})},Lv=(e,t)=>{const s={},o=a=>{a.forEach(l=>{s[l]=!0})};return Cn(e)?o(e):o(String(e).split(t)),s},Nv=()=>{},Ov=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function Fv(e){return!!(e&&zt(e.append)&&e[vu]==="FormData"&&e[_a])}const Vv=e=>{const t=new Array(10),s=(o,a)=>{if(bo(o)){if(t.indexOf(o)>=0)return;if(yo(o))return o;if(!("toJSON"in o)){t[a]=o;const l=Cn(o)?[]:{};return _o(o,(i,r)=>{const c=s(i,a+1);!bn(c)&&(l[r]=c)}),t[a]=void 0,l}}return o};return s(e,0)},Bv=ds("AsyncFunction"),jv=e=>e&&(bo(e)||zt(e))&&zt(e.then)&&zt(e.catch),_u=((e,t)=>e?setImmediate:t?((s,o)=>(Zs.addEventListener("message",({source:a,data:l})=>{a===Zs&&l===s&&o.length&&o.shift()()},!1),a=>{o.push(a),Zs.postMessage(s,"*")}))(`axios@${Math.random()}`,[]):s=>setTimeout(s))(typeof setImmediate=="function",zt(Zs.postMessage)),qv=typeof queueMicrotask<"u"?queueMicrotask.bind(Zs):typeof process<"u"&&process.nextTick||_u,Hv=e=>e!=null&&zt(e[_a]),fe={isArray:Cn,isArrayBuffer:mu,isBuffer:yo,isFormData:hv,isArrayBufferView:iv,isString:rv,isNumber:hu,isBoolean:cv,isObject:bo,isPlainObject:Fo,isEmptyObject:uv,isReadableStream:yv,isRequest:bv,isResponse:_v,isHeaders:wv,isUndefined:bn,isDate:dv,isFile:fv,isBlob:pv,isRegExp:Mv,isFunction:zt,isStream:mv,isURLSearchParams:gv,isTypedArray:Tv,isFileList:vv,forEach:_o,merge:ml,extend:$v,trim:kv,stripBOM:Cv,inherits:Iv,toFlatObject:Sv,kindOf:wa,kindOfTest:ds,endsWith:xv,toArray:Av,forEachEntry:Ev,matchAll:Rv,isHTMLForm:Uv,hasOwnProperty:Hi,hasOwnProp:Hi,reduceDescriptors:bu,freezeMethods:Dv,toObjectSet:Lv,toCamelCase:Pv,noop:Nv,toFiniteNumber:Ov,findKey:gu,global:Zs,isContextDefined:yu,isSpecCompliantForm:Fv,toJSONObject:Vv,isAsyncFn:Bv,isThenable:jv,setImmediate:_u,asap:qv,isIterable:Hv};function st(e,t,s,o,a){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),s&&(this.config=s),o&&(this.request=o),a&&(this.response=a,this.status=a.status?a.status:null)}fe.inherits(st,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:fe.toJSONObject(this.config),code:this.code,status:this.status}}});const wu=st.prototype,ku={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{ku[e]={value:e}});Object.defineProperties(st,ku);Object.defineProperty(wu,"isAxiosError",{value:!0});st.from=(e,t,s,o,a,l)=>{const i=Object.create(wu);fe.toFlatObject(e,i,function(d){return d!==Error.prototype},p=>p!=="isAxiosError");const r=e&&e.message?e.message:"Error",c=t==null&&e?e.code:t;return st.call(i,r,c,s,o,a),e&&i.cause==null&&Object.defineProperty(i,"cause",{value:e,configurable:!0}),i.name=e&&e.name||"Error",l&&Object.assign(i,l),i};const zv=null;function hl(e){return fe.isPlainObject(e)||fe.isArray(e)}function $u(e){return fe.endsWith(e,"[]")?e.slice(0,-2):e}function zi(e,t,s){return e?e.concat(t).map(function(a,l){return a=$u(a),!s&&l?"["+a+"]":a}).join(s?".":""):t}function Wv(e){return fe.isArray(e)&&!e.some(hl)}const Kv=fe.toFlatObject(fe,{},null,function(t){return/^is[A-Z]/.test(t)});function $a(e,t,s){if(!fe.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,s=fe.toFlatObject(s,{metaTokens:!0,dots:!1,indexes:!1},!1,function(S,C){return!fe.isUndefined(C[S])});const o=s.metaTokens,a=s.visitor||d,l=s.dots,i=s.indexes,c=(s.Blob||typeof Blob<"u"&&Blob)&&fe.isSpecCompliantForm(t);if(!fe.isFunction(a))throw new TypeError("visitor must be a function");function p(y){if(y===null)return"";if(fe.isDate(y))return y.toISOString();if(fe.isBoolean(y))return y.toString();if(!c&&fe.isBlob(y))throw new st("Blob is not supported. Use a Buffer instead.");return fe.isArrayBuffer(y)||fe.isTypedArray(y)?c&&typeof Blob=="function"?new Blob([y]):Buffer.from(y):y}function d(y,S,C){let I=y;if(y&&!C&&typeof y=="object"){if(fe.endsWith(S,"{}"))S=o?S:S.slice(0,-2),y=JSON.stringify(y);else if(fe.isArray(y)&&Wv(y)||(fe.isFileList(y)||fe.endsWith(S,"[]"))&&(I=fe.toArray(y)))return S=$u(S),I.forEach(function(E,F){!(fe.isUndefined(E)||E===null)&&t.append(i===!0?zi([S],F,l):i===null?S:S+"[]",p(E))}),!1}return hl(y)?!0:(t.append(zi(C,S,l),p(y)),!1)}const v=[],b=Object.assign(Kv,{defaultVisitor:d,convertValue:p,isVisitable:hl});function _(y,S){if(!fe.isUndefined(y)){if(v.indexOf(y)!==-1)throw Error("Circular reference detected in "+S.join("."));v.push(y),fe.forEach(y,function(I,x){(!(fe.isUndefined(I)||I===null)&&a.call(t,I,fe.isString(x)?x.trim():x,S,b))===!0&&_(I,S?S.concat(x):[x])}),v.pop()}}if(!fe.isObject(e))throw new TypeError("data must be an object");return _(e),t}function Wi(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(o){return t[o]})}function Wl(e,t){this._pairs=[],e&&$a(e,this,t)}const Cu=Wl.prototype;Cu.append=function(t,s){this._pairs.push([t,s])};Cu.toString=function(t){const s=t?function(o){return t.call(this,o,Wi)}:Wi;return this._pairs.map(function(a){return s(a[0])+"="+s(a[1])},"").join("&")};function Gv(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Iu(e,t,s){if(!t)return e;const o=s&&s.encode||Gv;fe.isFunction(s)&&(s={serialize:s});const a=s&&s.serialize;let l;if(a?l=a(t,s):l=fe.isURLSearchParams(t)?t.toString():new Wl(t,s).toString(o),l){const i=e.indexOf("#");i!==-1&&(e=e.slice(0,i)),e+=(e.indexOf("?")===-1?"?":"&")+l}return e}class Ki{constructor(){this.handlers=[]}use(t,s,o){return this.handlers.push({fulfilled:t,rejected:s,synchronous:o?o.synchronous:!1,runWhen:o?o.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){fe.forEach(this.handlers,function(o){o!==null&&t(o)})}}const Su={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Qv=typeof URLSearchParams<"u"?URLSearchParams:Wl,Jv=typeof FormData<"u"?FormData:null,Xv=typeof Blob<"u"?Blob:null,Zv={isBrowser:!0,classes:{URLSearchParams:Qv,FormData:Jv,Blob:Xv},protocols:["http","https","file","blob","url","data"]},Kl=typeof window<"u"&&typeof document<"u",gl=typeof navigator=="object"&&navigator||void 0,Yv=Kl&&(!gl||["ReactNative","NativeScript","NS"].indexOf(gl.product)<0),em=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",tm=Kl&&window.location.href||"http://localhost",sm=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Kl,hasStandardBrowserEnv:Yv,hasStandardBrowserWebWorkerEnv:em,navigator:gl,origin:tm},Symbol.toStringTag,{value:"Module"})),Lt={...sm,...Zv};function nm(e,t){return $a(e,new Lt.classes.URLSearchParams,{visitor:function(s,o,a,l){return Lt.isNode&&fe.isBuffer(s)?(this.append(o,s.toString("base64")),!1):l.defaultVisitor.apply(this,arguments)},...t})}function om(e){return fe.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function am(e){const t={},s=Object.keys(e);let o;const a=s.length;let l;for(o=0;o<a;o++)l=s[o],t[l]=e[l];return t}function xu(e){function t(s,o,a,l){let i=s[l++];if(i==="__proto__")return!0;const r=Number.isFinite(+i),c=l>=s.length;return i=!i&&fe.isArray(a)?a.length:i,c?(fe.hasOwnProp(a,i)?a[i]=[a[i],o]:a[i]=o,!r):((!a[i]||!fe.isObject(a[i]))&&(a[i]=[]),t(s,o,a[i],l)&&fe.isArray(a[i])&&(a[i]=am(a[i])),!r)}if(fe.isFormData(e)&&fe.isFunction(e.entries)){const s={};return fe.forEachEntry(e,(o,a)=>{t(om(o),a,s,0)}),s}return null}function lm(e,t,s){if(fe.isString(e))try{return(t||JSON.parse)(e),fe.trim(e)}catch(o){if(o.name!=="SyntaxError")throw o}return(s||JSON.stringify)(e)}const wo={transitional:Su,adapter:["xhr","http","fetch"],transformRequest:[function(t,s){const o=s.getContentType()||"",a=o.indexOf("application/json")>-1,l=fe.isObject(t);if(l&&fe.isHTMLForm(t)&&(t=new FormData(t)),fe.isFormData(t))return a?JSON.stringify(xu(t)):t;if(fe.isArrayBuffer(t)||fe.isBuffer(t)||fe.isStream(t)||fe.isFile(t)||fe.isBlob(t)||fe.isReadableStream(t))return t;if(fe.isArrayBufferView(t))return t.buffer;if(fe.isURLSearchParams(t))return s.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let r;if(l){if(o.indexOf("application/x-www-form-urlencoded")>-1)return nm(t,this.formSerializer).toString();if((r=fe.isFileList(t))||o.indexOf("multipart/form-data")>-1){const c=this.env&&this.env.FormData;return $a(r?{"files[]":t}:t,c&&new c,this.formSerializer)}}return l||a?(s.setContentType("application/json",!1),lm(t)):t}],transformResponse:[function(t){const s=this.transitional||wo.transitional,o=s&&s.forcedJSONParsing,a=this.responseType==="json";if(fe.isResponse(t)||fe.isReadableStream(t))return t;if(t&&fe.isString(t)&&(o&&!this.responseType||a)){const i=!(s&&s.silentJSONParsing)&&a;try{return JSON.parse(t,this.parseReviver)}catch(r){if(i)throw r.name==="SyntaxError"?st.from(r,st.ERR_BAD_RESPONSE,this,null,this.response):r}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Lt.classes.FormData,Blob:Lt.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};fe.forEach(["delete","get","head","post","put","patch"],e=>{wo.headers[e]={}});const im=fe.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),rm=e=>{const t={};let s,o,a;return e&&e.split(`
|
||
`).forEach(function(i){a=i.indexOf(":"),s=i.substring(0,a).trim().toLowerCase(),o=i.substring(a+1).trim(),!(!s||t[s]&&im[s])&&(s==="set-cookie"?t[s]?t[s].push(o):t[s]=[o]:t[s]=t[s]?t[s]+", "+o:o)}),t},Gi=Symbol("internals");function Dn(e){return e&&String(e).trim().toLowerCase()}function Vo(e){return e===!1||e==null?e:fe.isArray(e)?e.map(Vo):String(e)}function cm(e){const t=Object.create(null),s=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let o;for(;o=s.exec(e);)t[o[1]]=o[2];return t}const um=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function za(e,t,s,o,a){if(fe.isFunction(o))return o.call(this,t,s);if(a&&(t=s),!!fe.isString(t)){if(fe.isString(o))return t.indexOf(o)!==-1;if(fe.isRegExp(o))return o.test(t)}}function dm(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,s,o)=>s.toUpperCase()+o)}function fm(e,t){const s=fe.toCamelCase(" "+t);["get","set","has"].forEach(o=>{Object.defineProperty(e,o+s,{value:function(a,l,i){return this[o].call(this,t,a,l,i)},configurable:!0})})}let Wt=class{constructor(t){t&&this.set(t)}set(t,s,o){const a=this;function l(r,c,p){const d=Dn(c);if(!d)throw new Error("header name must be a non-empty string");const v=fe.findKey(a,d);(!v||a[v]===void 0||p===!0||p===void 0&&a[v]!==!1)&&(a[v||c]=Vo(r))}const i=(r,c)=>fe.forEach(r,(p,d)=>l(p,d,c));if(fe.isPlainObject(t)||t instanceof this.constructor)i(t,s);else if(fe.isString(t)&&(t=t.trim())&&!um(t))i(rm(t),s);else if(fe.isObject(t)&&fe.isIterable(t)){let r={},c,p;for(const d of t){if(!fe.isArray(d))throw TypeError("Object iterator must return a key-value pair");r[p=d[0]]=(c=r[p])?fe.isArray(c)?[...c,d[1]]:[c,d[1]]:d[1]}i(r,s)}else t!=null&&l(s,t,o);return this}get(t,s){if(t=Dn(t),t){const o=fe.findKey(this,t);if(o){const a=this[o];if(!s)return a;if(s===!0)return cm(a);if(fe.isFunction(s))return s.call(this,a,o);if(fe.isRegExp(s))return s.exec(a);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,s){if(t=Dn(t),t){const o=fe.findKey(this,t);return!!(o&&this[o]!==void 0&&(!s||za(this,this[o],o,s)))}return!1}delete(t,s){const o=this;let a=!1;function l(i){if(i=Dn(i),i){const r=fe.findKey(o,i);r&&(!s||za(o,o[r],r,s))&&(delete o[r],a=!0)}}return fe.isArray(t)?t.forEach(l):l(t),a}clear(t){const s=Object.keys(this);let o=s.length,a=!1;for(;o--;){const l=s[o];(!t||za(this,this[l],l,t,!0))&&(delete this[l],a=!0)}return a}normalize(t){const s=this,o={};return fe.forEach(this,(a,l)=>{const i=fe.findKey(o,l);if(i){s[i]=Vo(a),delete s[l];return}const r=t?dm(l):String(l).trim();r!==l&&delete s[l],s[r]=Vo(a),o[r]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const s=Object.create(null);return fe.forEach(this,(o,a)=>{o!=null&&o!==!1&&(s[a]=t&&fe.isArray(o)?o.join(", "):o)}),s}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,s])=>t+": "+s).join(`
|
||
`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...s){const o=new this(t);return s.forEach(a=>o.set(a)),o}static accessor(t){const o=(this[Gi]=this[Gi]={accessors:{}}).accessors,a=this.prototype;function l(i){const r=Dn(i);o[r]||(fm(a,i),o[r]=!0)}return fe.isArray(t)?t.forEach(l):l(t),this}};Wt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);fe.reduceDescriptors(Wt.prototype,({value:e},t)=>{let s=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(o){this[s]=o}}});fe.freezeMethods(Wt);function Wa(e,t){const s=this||wo,o=t||s,a=Wt.from(o.headers);let l=o.data;return fe.forEach(e,function(r){l=r.call(s,l,a.normalize(),t?t.status:void 0)}),a.normalize(),l}function Au(e){return!!(e&&e.__CANCEL__)}function In(e,t,s){st.call(this,e??"canceled",st.ERR_CANCELED,t,s),this.name="CanceledError"}fe.inherits(In,st,{__CANCEL__:!0});function Tu(e,t,s){const o=s.config.validateStatus;!s.status||!o||o(s.status)?e(s):t(new st("Request failed with status code "+s.status,[st.ERR_BAD_REQUEST,st.ERR_BAD_RESPONSE][Math.floor(s.status/100)-4],s.config,s.request,s))}function pm(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function vm(e,t){e=e||10;const s=new Array(e),o=new Array(e);let a=0,l=0,i;return t=t!==void 0?t:1e3,function(c){const p=Date.now(),d=o[l];i||(i=p),s[a]=c,o[a]=p;let v=l,b=0;for(;v!==a;)b+=s[v++],v=v%e;if(a=(a+1)%e,a===l&&(l=(l+1)%e),p-i<t)return;const _=d&&p-d;return _?Math.round(b*1e3/_):void 0}}function mm(e,t){let s=0,o=1e3/t,a,l;const i=(p,d=Date.now())=>{s=d,a=null,l&&(clearTimeout(l),l=null),e(...p)};return[(...p)=>{const d=Date.now(),v=d-s;v>=o?i(p,d):(a=p,l||(l=setTimeout(()=>{l=null,i(a)},o-v)))},()=>a&&i(a)]}const aa=(e,t,s=3)=>{let o=0;const a=vm(50,250);return mm(l=>{const i=l.loaded,r=l.lengthComputable?l.total:void 0,c=i-o,p=a(c),d=i<=r;o=i;const v={loaded:i,total:r,progress:r?i/r:void 0,bytes:c,rate:p||void 0,estimated:p&&r&&d?(r-i)/p:void 0,event:l,lengthComputable:r!=null,[t?"download":"upload"]:!0};e(v)},s)},Qi=(e,t)=>{const s=e!=null;return[o=>t[0]({lengthComputable:s,total:e,loaded:o}),t[1]]},Ji=e=>(...t)=>fe.asap(()=>e(...t)),hm=Lt.hasStandardBrowserEnv?((e,t)=>s=>(s=new URL(s,Lt.origin),e.protocol===s.protocol&&e.host===s.host&&(t||e.port===s.port)))(new URL(Lt.origin),Lt.navigator&&/(msie|trident)/i.test(Lt.navigator.userAgent)):()=>!0,gm=Lt.hasStandardBrowserEnv?{write(e,t,s,o,a,l){const i=[e+"="+encodeURIComponent(t)];fe.isNumber(s)&&i.push("expires="+new Date(s).toGMTString()),fe.isString(o)&&i.push("path="+o),fe.isString(a)&&i.push("domain="+a),l===!0&&i.push("secure"),document.cookie=i.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function ym(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function bm(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function Eu(e,t,s){let o=!ym(t);return e&&(o||s==!1)?bm(e,t):t}const Xi=e=>e instanceof Wt?{...e}:e;function on(e,t){t=t||{};const s={};function o(p,d,v,b){return fe.isPlainObject(p)&&fe.isPlainObject(d)?fe.merge.call({caseless:b},p,d):fe.isPlainObject(d)?fe.merge({},d):fe.isArray(d)?d.slice():d}function a(p,d,v,b){if(fe.isUndefined(d)){if(!fe.isUndefined(p))return o(void 0,p,v,b)}else return o(p,d,v,b)}function l(p,d){if(!fe.isUndefined(d))return o(void 0,d)}function i(p,d){if(fe.isUndefined(d)){if(!fe.isUndefined(p))return o(void 0,p)}else return o(void 0,d)}function r(p,d,v){if(v in t)return o(p,d);if(v in e)return o(void 0,p)}const c={url:l,method:l,data:l,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:r,headers:(p,d,v)=>a(Xi(p),Xi(d),v,!0)};return fe.forEach(Object.keys({...e,...t}),function(d){const v=c[d]||a,b=v(e[d],t[d],d);fe.isUndefined(b)&&v!==r||(s[d]=b)}),s}const Ru=e=>{const t=on({},e);let{data:s,withXSRFToken:o,xsrfHeaderName:a,xsrfCookieName:l,headers:i,auth:r}=t;if(t.headers=i=Wt.from(i),t.url=Iu(Eu(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),r&&i.set("Authorization","Basic "+btoa((r.username||"")+":"+(r.password?unescape(encodeURIComponent(r.password)):""))),fe.isFormData(s)){if(Lt.hasStandardBrowserEnv||Lt.hasStandardBrowserWebWorkerEnv)i.setContentType(void 0);else if(fe.isFunction(s.getHeaders)){const c=s.getHeaders(),p=["content-type","content-length"];Object.entries(c).forEach(([d,v])=>{p.includes(d.toLowerCase())&&i.set(d,v)})}}if(Lt.hasStandardBrowserEnv&&(o&&fe.isFunction(o)&&(o=o(t)),o||o!==!1&&hm(t.url))){const c=a&&l&&gm.read(l);c&&i.set(a,c)}return t},_m=typeof XMLHttpRequest<"u",wm=_m&&function(e){return new Promise(function(s,o){const a=Ru(e);let l=a.data;const i=Wt.from(a.headers).normalize();let{responseType:r,onUploadProgress:c,onDownloadProgress:p}=a,d,v,b,_,y;function S(){_&&_(),y&&y(),a.cancelToken&&a.cancelToken.unsubscribe(d),a.signal&&a.signal.removeEventListener("abort",d)}let C=new XMLHttpRequest;C.open(a.method.toUpperCase(),a.url,!0),C.timeout=a.timeout;function I(){if(!C)return;const E=Wt.from("getAllResponseHeaders"in C&&C.getAllResponseHeaders()),W={data:!r||r==="text"||r==="json"?C.responseText:C.response,status:C.status,statusText:C.statusText,headers:E,config:e,request:C};Tu(function(re){s(re),S()},function(re){o(re),S()},W),C=null}"onloadend"in C?C.onloadend=I:C.onreadystatechange=function(){!C||C.readyState!==4||C.status===0&&!(C.responseURL&&C.responseURL.indexOf("file:")===0)||setTimeout(I)},C.onabort=function(){C&&(o(new st("Request aborted",st.ECONNABORTED,e,C)),C=null)},C.onerror=function(F){const W=F&&F.message?F.message:"Network Error",G=new st(W,st.ERR_NETWORK,e,C);G.event=F||null,o(G),C=null},C.ontimeout=function(){let F=a.timeout?"timeout of "+a.timeout+"ms exceeded":"timeout exceeded";const W=a.transitional||Su;a.timeoutErrorMessage&&(F=a.timeoutErrorMessage),o(new st(F,W.clarifyTimeoutError?st.ETIMEDOUT:st.ECONNABORTED,e,C)),C=null},l===void 0&&i.setContentType(null),"setRequestHeader"in C&&fe.forEach(i.toJSON(),function(F,W){C.setRequestHeader(W,F)}),fe.isUndefined(a.withCredentials)||(C.withCredentials=!!a.withCredentials),r&&r!=="json"&&(C.responseType=a.responseType),p&&([b,y]=aa(p,!0),C.addEventListener("progress",b)),c&&C.upload&&([v,_]=aa(c),C.upload.addEventListener("progress",v),C.upload.addEventListener("loadend",_)),(a.cancelToken||a.signal)&&(d=E=>{C&&(o(!E||E.type?new In(null,e,C):E),C.abort(),C=null)},a.cancelToken&&a.cancelToken.subscribe(d),a.signal&&(a.signal.aborted?d():a.signal.addEventListener("abort",d)));const x=pm(a.url);if(x&&Lt.protocols.indexOf(x)===-1){o(new st("Unsupported protocol "+x+":",st.ERR_BAD_REQUEST,e));return}C.send(l||null)})},km=(e,t)=>{const{length:s}=e=e?e.filter(Boolean):[];if(t||s){let o=new AbortController,a;const l=function(p){if(!a){a=!0,r();const d=p instanceof Error?p:this.reason;o.abort(d instanceof st?d:new In(d instanceof Error?d.message:d))}};let i=t&&setTimeout(()=>{i=null,l(new st(`timeout ${t} of ms exceeded`,st.ETIMEDOUT))},t);const r=()=>{e&&(i&&clearTimeout(i),i=null,e.forEach(p=>{p.unsubscribe?p.unsubscribe(l):p.removeEventListener("abort",l)}),e=null)};e.forEach(p=>p.addEventListener("abort",l));const{signal:c}=o;return c.unsubscribe=()=>fe.asap(r),c}},$m=function*(e,t){let s=e.byteLength;if(s<t){yield e;return}let o=0,a;for(;o<s;)a=o+t,yield e.slice(o,a),o=a},Cm=async function*(e,t){for await(const s of Im(e))yield*$m(s,t)},Im=async function*(e){if(e[Symbol.asyncIterator]){yield*e;return}const t=e.getReader();try{for(;;){const{done:s,value:o}=await t.read();if(s)break;yield o}}finally{await t.cancel()}},Zi=(e,t,s,o)=>{const a=Cm(e,t);let l=0,i,r=c=>{i||(i=!0,o&&o(c))};return new ReadableStream({async pull(c){try{const{done:p,value:d}=await a.next();if(p){r(),c.close();return}let v=d.byteLength;if(s){let b=l+=v;s(b)}c.enqueue(new Uint8Array(d))}catch(p){throw r(p),p}},cancel(c){return r(c),a.return()}},{highWaterMark:2})},Yi=64*1024,{isFunction:Uo}=fe,Sm=(({Request:e,Response:t})=>({Request:e,Response:t}))(fe.global),{ReadableStream:er,TextEncoder:tr}=fe.global,sr=(e,...t)=>{try{return!!e(...t)}catch{return!1}},xm=e=>{e=fe.merge.call({skipUndefined:!0},Sm,e);const{fetch:t,Request:s,Response:o}=e,a=t?Uo(t):typeof fetch=="function",l=Uo(s),i=Uo(o);if(!a)return!1;const r=a&&Uo(er),c=a&&(typeof tr=="function"?(y=>S=>y.encode(S))(new tr):async y=>new Uint8Array(await new s(y).arrayBuffer())),p=l&&r&&sr(()=>{let y=!1;const S=new s(Lt.origin,{body:new er,method:"POST",get duplex(){return y=!0,"half"}}).headers.has("Content-Type");return y&&!S}),d=i&&r&&sr(()=>fe.isReadableStream(new o("").body)),v={stream:d&&(y=>y.body)};a&&["text","arrayBuffer","blob","formData","stream"].forEach(y=>{!v[y]&&(v[y]=(S,C)=>{let I=S&&S[y];if(I)return I.call(S);throw new st(`Response type '${y}' is not supported`,st.ERR_NOT_SUPPORT,C)})});const b=async y=>{if(y==null)return 0;if(fe.isBlob(y))return y.size;if(fe.isSpecCompliantForm(y))return(await new s(Lt.origin,{method:"POST",body:y}).arrayBuffer()).byteLength;if(fe.isArrayBufferView(y)||fe.isArrayBuffer(y))return y.byteLength;if(fe.isURLSearchParams(y)&&(y=y+""),fe.isString(y))return(await c(y)).byteLength},_=async(y,S)=>{const C=fe.toFiniteNumber(y.getContentLength());return C??b(S)};return async y=>{let{url:S,method:C,data:I,signal:x,cancelToken:E,timeout:F,onDownloadProgress:W,onUploadProgress:G,responseType:re,headers:D,withCredentials:U="same-origin",fetchOptions:O}=Ru(y),$=t||fetch;re=re?(re+"").toLowerCase():"text";let R=km([x,E&&E.toAbortSignal()],F),M=null;const N=R&&R.unsubscribe&&(()=>{R.unsubscribe()});let L;try{if(G&&p&&C!=="get"&&C!=="head"&&(L=await _(D,I))!==0){let ue=new s(S,{method:"POST",body:I,duplex:"half"}),Z;if(fe.isFormData(I)&&(Z=ue.headers.get("content-type"))&&D.setContentType(Z),ue.body){const[q,ie]=Qi(L,aa(Ji(G)));I=Zi(ue.body,Yi,q,ie)}}fe.isString(U)||(U=U?"include":"omit");const X=l&&"credentials"in s.prototype,ne={...O,signal:R,method:C.toUpperCase(),headers:D.normalize().toJSON(),body:I,duplex:"half",credentials:X?U:void 0};M=l&&new s(S,ne);let ee=await(l?$(M,O):$(S,ne));const we=d&&(re==="stream"||re==="response");if(d&&(W||we&&N)){const ue={};["status","statusText","headers"].forEach(Pe=>{ue[Pe]=ee[Pe]});const Z=fe.toFiniteNumber(ee.headers.get("content-length")),[q,ie]=W&&Qi(Z,aa(Ji(W),!0))||[];ee=new o(Zi(ee.body,Yi,q,()=>{ie&&ie(),N&&N()}),ue)}re=re||"text";let de=await v[fe.findKey(v,re)||"text"](ee,y);return!we&&N&&N(),await new Promise((ue,Z)=>{Tu(ue,Z,{data:de,headers:Wt.from(ee.headers),status:ee.status,statusText:ee.statusText,config:y,request:M})})}catch(X){throw N&&N(),X&&X.name==="TypeError"&&/Load failed|fetch/i.test(X.message)?Object.assign(new st("Network Error",st.ERR_NETWORK,y,M),{cause:X.cause||X}):st.from(X,X&&X.code,y,M)}}},Am=new Map,Uu=e=>{let t=e?e.env:{};const{fetch:s,Request:o,Response:a}=t,l=[o,a,s];let i=l.length,r=i,c,p,d=Am;for(;r--;)c=l[r],p=d.get(c),p===void 0&&d.set(c,p=r?new Map:xm(t)),d=p;return p};Uu();const yl={http:zv,xhr:wm,fetch:{get:Uu}};fe.forEach(yl,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const nr=e=>`- ${e}`,Tm=e=>fe.isFunction(e)||e===null||e===!1,Pu={getAdapter:(e,t)=>{e=fe.isArray(e)?e:[e];const{length:s}=e;let o,a;const l={};for(let i=0;i<s;i++){o=e[i];let r;if(a=o,!Tm(o)&&(a=yl[(r=String(o)).toLowerCase()],a===void 0))throw new st(`Unknown adapter '${r}'`);if(a&&(fe.isFunction(a)||(a=a.get(t))))break;l[r||"#"+i]=a}if(!a){const i=Object.entries(l).map(([c,p])=>`adapter ${c} `+(p===!1?"is not supported by the environment":"is not available in the build"));let r=s?i.length>1?`since :
|
||
`+i.map(nr).join(`
|
||
`):" "+nr(i[0]):"as no adapter specified";throw new st("There is no suitable adapter to dispatch the request "+r,"ERR_NOT_SUPPORT")}return a},adapters:yl};function Ka(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new In(null,e)}function or(e){return Ka(e),e.headers=Wt.from(e.headers),e.data=Wa.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),Pu.getAdapter(e.adapter||wo.adapter,e)(e).then(function(o){return Ka(e),o.data=Wa.call(e,e.transformResponse,o),o.headers=Wt.from(o.headers),o},function(o){return Au(o)||(Ka(e),o&&o.response&&(o.response.data=Wa.call(e,e.transformResponse,o.response),o.response.headers=Wt.from(o.response.headers))),Promise.reject(o)})}const Mu="1.12.2",Ca={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Ca[e]=function(o){return typeof o===e||"a"+(t<1?"n ":" ")+e}});const ar={};Ca.transitional=function(t,s,o){function a(l,i){return"[Axios v"+Mu+"] Transitional option '"+l+"'"+i+(o?". "+o:"")}return(l,i,r)=>{if(t===!1)throw new st(a(i," has been removed"+(s?" in "+s:"")),st.ERR_DEPRECATED);return s&&!ar[i]&&(ar[i]=!0,console.warn(a(i," has been deprecated since v"+s+" and will be removed in the near future"))),t?t(l,i,r):!0}};Ca.spelling=function(t){return(s,o)=>(console.warn(`${o} is likely a misspelling of ${t}`),!0)};function Em(e,t,s){if(typeof e!="object")throw new st("options must be an object",st.ERR_BAD_OPTION_VALUE);const o=Object.keys(e);let a=o.length;for(;a-- >0;){const l=o[a],i=t[l];if(i){const r=e[l],c=r===void 0||i(r,l,e);if(c!==!0)throw new st("option "+l+" must be "+c,st.ERR_BAD_OPTION_VALUE);continue}if(s!==!0)throw new st("Unknown option "+l,st.ERR_BAD_OPTION)}}const Bo={assertOptions:Em,validators:Ca},ps=Bo.validators;let tn=class{constructor(t){this.defaults=t||{},this.interceptors={request:new Ki,response:new Ki}}async request(t,s){try{return await this._request(t,s)}catch(o){if(o instanceof Error){let a={};Error.captureStackTrace?Error.captureStackTrace(a):a=new Error;const l=a.stack?a.stack.replace(/^.+\n/,""):"";try{o.stack?l&&!String(o.stack).endsWith(l.replace(/^.+\n.+\n/,""))&&(o.stack+=`
|
||
`+l):o.stack=l}catch{}}throw o}}_request(t,s){typeof t=="string"?(s=s||{},s.url=t):s=t||{},s=on(this.defaults,s);const{transitional:o,paramsSerializer:a,headers:l}=s;o!==void 0&&Bo.assertOptions(o,{silentJSONParsing:ps.transitional(ps.boolean),forcedJSONParsing:ps.transitional(ps.boolean),clarifyTimeoutError:ps.transitional(ps.boolean)},!1),a!=null&&(fe.isFunction(a)?s.paramsSerializer={serialize:a}:Bo.assertOptions(a,{encode:ps.function,serialize:ps.function},!0)),s.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?s.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:s.allowAbsoluteUrls=!0),Bo.assertOptions(s,{baseUrl:ps.spelling("baseURL"),withXsrfToken:ps.spelling("withXSRFToken")},!0),s.method=(s.method||this.defaults.method||"get").toLowerCase();let i=l&&fe.merge(l.common,l[s.method]);l&&fe.forEach(["delete","get","head","post","put","patch","common"],y=>{delete l[y]}),s.headers=Wt.concat(i,l);const r=[];let c=!0;this.interceptors.request.forEach(function(S){typeof S.runWhen=="function"&&S.runWhen(s)===!1||(c=c&&S.synchronous,r.unshift(S.fulfilled,S.rejected))});const p=[];this.interceptors.response.forEach(function(S){p.push(S.fulfilled,S.rejected)});let d,v=0,b;if(!c){const y=[or.bind(this),void 0];for(y.unshift(...r),y.push(...p),b=y.length,d=Promise.resolve(s);v<b;)d=d.then(y[v++],y[v++]);return d}b=r.length;let _=s;for(;v<b;){const y=r[v++],S=r[v++];try{_=y(_)}catch(C){S.call(this,C);break}}try{d=or.call(this,_)}catch(y){return Promise.reject(y)}for(v=0,b=p.length;v<b;)d=d.then(p[v++],p[v++]);return d}getUri(t){t=on(this.defaults,t);const s=Eu(t.baseURL,t.url,t.allowAbsoluteUrls);return Iu(s,t.params,t.paramsSerializer)}};fe.forEach(["delete","get","head","options"],function(t){tn.prototype[t]=function(s,o){return this.request(on(o||{},{method:t,url:s,data:(o||{}).data}))}});fe.forEach(["post","put","patch"],function(t){function s(o){return function(l,i,r){return this.request(on(r||{},{method:t,headers:o?{"Content-Type":"multipart/form-data"}:{},url:l,data:i}))}}tn.prototype[t]=s(),tn.prototype[t+"Form"]=s(!0)});let Rm=class Du{constructor(t){if(typeof t!="function")throw new TypeError("executor must be a function.");let s;this.promise=new Promise(function(l){s=l});const o=this;this.promise.then(a=>{if(!o._listeners)return;let l=o._listeners.length;for(;l-- >0;)o._listeners[l](a);o._listeners=null}),this.promise.then=a=>{let l;const i=new Promise(r=>{o.subscribe(r),l=r}).then(a);return i.cancel=function(){o.unsubscribe(l)},i},t(function(l,i,r){o.reason||(o.reason=new In(l,i,r),s(o.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const s=this._listeners.indexOf(t);s!==-1&&this._listeners.splice(s,1)}toAbortSignal(){const t=new AbortController,s=o=>{t.abort(o)};return this.subscribe(s),t.signal.unsubscribe=()=>this.unsubscribe(s),t.signal}static source(){let t;return{token:new Du(function(a){t=a}),cancel:t}}};function Um(e){return function(s){return e.apply(null,s)}}function Pm(e){return fe.isObject(e)&&e.isAxiosError===!0}const bl={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(bl).forEach(([e,t])=>{bl[t]=e});function Lu(e){const t=new tn(e),s=pu(tn.prototype.request,t);return fe.extend(s,tn.prototype,t,{allOwnKeys:!0}),fe.extend(s,t,null,{allOwnKeys:!0}),s.create=function(a){return Lu(on(e,a))},s}const Ct=Lu(wo);Ct.Axios=tn;Ct.CanceledError=In;Ct.CancelToken=Rm;Ct.isCancel=Au;Ct.VERSION=Mu;Ct.toFormData=$a;Ct.AxiosError=st;Ct.Cancel=Ct.CanceledError;Ct.all=function(t){return Promise.all(t)};Ct.spread=Um;Ct.isAxiosError=Pm;Ct.mergeConfig=on;Ct.AxiosHeaders=Wt;Ct.formToJSON=e=>xu(fe.isHTMLForm(e)?new FormData(e):e);Ct.getAdapter=Pu.getAdapter;Ct.HttpStatusCode=bl;Ct.default=Ct;const{Axios:NO,AxiosError:OO,CanceledError:FO,isCancel:VO,CancelToken:BO,VERSION:jO,all:qO,Cancel:HO,isAxiosError:zO,spread:WO,toFormData:KO,AxiosHeaders:GO,HttpStatusCode:QO,formToJSON:JO,getAdapter:XO,mergeConfig:ZO}=Ct,Tt=Ct.create({baseURL:"/api",timeout:12e4});Tt.interceptors.request.use(e=>{const t=localStorage.getItem("token");return t&&(e.headers.Authorization=`Bearer ${t}`),e});Tt.interceptors.response.use(e=>e,e=>{var t;return((t=e.response)==null?void 0:t.status)===401&&(localStorage.removeItem("token"),localStorage.removeItem("refreshToken"),window.dispatchEvent(new CustomEvent("auth:unauthorized"))),Promise.reject(e)});const Se=Ct.create({baseURL:"/api",timeout:12e4});Se.interceptors.request.use(e=>{let t=e.url||"";if(e.params){const a=new URLSearchParams;for(const[i,r]of Object.entries(e.params))r!=null&&a.append(i,String(r));const l=a.toString();l&&(t+=(t.includes("?")?"&":"?")+l),e.params=void 0}const s=(e.method||"GET").toUpperCase();e.url="/proxy",e.headers||(e.headers={}),e.headers["x-forward-by-qiuchenly"]=t,e.headers["x-forward-method-by-qiuchenly"]=s;const o=localStorage.getItem("token");return o&&(e.headers.Authorization=`Bearer ${o}`),e});Se.interceptors.response.use(e=>e,e=>{var t;return((t=e.response)==null?void 0:t.status)===401&&(localStorage.removeItem("token"),localStorage.removeItem("refreshToken"),window.dispatchEvent(new CustomEvent("auth:unauthorized"))),Promise.reject(e)});function Mm(e){var a,l,i,r,c,p;const t=e;if(!t)return null;const s=((a=t.response)==null?void 0:a.status)&&t.response.status>=500,o=t.code==="ERR_NETWORK"||t.code==="ECONNREFUSED"||t.code==="ERR_CONNECTION_REFUSED"||((l=t.message)==null?void 0:l.includes("Network Error"))||((i=t.message)==null?void 0:i.includes("Connection refused"));if(s||o){let d="无法连接到后端服务,请确保服务已启动";return s&&(d=`服务器错误 (${(r=t.response)==null?void 0:r.status}): 内部服务器错误`),{isConnectionError:!0,message:d,code:t.code,requestUrl:(c=t.config)==null?void 0:c.url,statusCode:(p=t.response)==null?void 0:p.status}}return null}class Y{static async getApps(){return(await Tt.get("/apps")).data}static async getApp(t){return(await Tt.get(`/apps/${t}`)).data}static getAppIconUrl(t){return`/api/apps/icon/${t}`}static async getForumPermissions(){try{const t=await Se.get("/api/v1/forums/permissions");return t.data.success?t.data.data||[]:[]}catch(t){return console.error("获取讨论区权限列表失败:",t),[]}}static async getForumPermissionsBatch(t){try{const s=await Se.post("/api/v1/forums/permissions",{bundleIds:t});return s.data.success&&Array.isArray(s.data.data)?s.data.data:[]}catch(s){return console.error("批量获取讨论区权限失败:",s),[]}}static async getForumPermission(t){try{const s=await Se.post("/api/v1/forums/permissions",{bundleIds:[t]});return s.data.success&&Array.isArray(s.data.data)&&s.data.data.length>0?s.data.data[0]:null}catch(s){return console.error("获取讨论区权限失败:",s),null}}static async checkForumEnabled(t){try{const s=await this.getForumPermission(t);return(s==null?void 0:s.enabled)??!1}catch(s){return console.error("检查讨论区是否开放失败:",s),!1}}static async enableForum(t){return(await Se.post(`/api/v1/forums/permissions/${t}/enable`)).data}static async disableForum(t){return(await Se.post(`/api/v1/forums/permissions/${t}/disable`)).data}static async updateApp(t){return(await Tt.post(`/apps/${t}/update`)).data}static async getConfig(){return(await Tt.get("/config")).data}static async getStatus(){return(await Tt.get("/status")).data}static async getStoreApps(){return(await Tt.get("/store/apps")).data}static async startDownload(t,s){return(await Tt.post("/download/start",{url:t,fileName:s})).data}static async pauseDownload(t){await Tt.post(`/download/${t}/pause`)}static async resumeDownload(t){await Tt.post(`/download/${t}/resume`)}static async getDownloadTask(t){return(await Tt.get(`/download/${t}`)).data}static async getAllDownloads(){return(await Tt.get("/downloads")).data}static async deleteDownload(t){await Tt.delete(`/download/${t}`)}static async openDownloadFile(t){await Tt.post(`/download/${t}/open`)}static async getAllSettings(){const t=await Tt.get("/settings");return t.data&&typeof t.data=="object"&&"data"in t.data&&t.data.data?t.data.data:t.data}static async updateSettings(t){await Tt.post("/settings",t)}static async validatePath(t){return(await Tt.get("/validate-path",{params:{path:t}})).data}static async login(t){var o,a;const s=await Se.post("/api/v1/auth/login",t);return(o=s.data.data)!=null&&o.token&&localStorage.setItem("token",s.data.data.token),(a=s.data.data)!=null&&a.refreshToken&&localStorage.setItem("refreshToken",s.data.data.refreshToken),s.data}static async register(t){var o,a;const s=await Se.post("/api/v1/auth/register",t);return(o=s.data.data)!=null&&o.token&&localStorage.setItem("token",s.data.data.token),(a=s.data.data)!=null&&a.refreshToken&&localStorage.setItem("refreshToken",s.data.data.refreshToken),s.data}static async getAuthStatus(){return(await Se.get("/api/v1/auth/user")).data}static async logout(){localStorage.removeItem("token"),localStorage.removeItem("refreshToken");try{await Se.post("/api/v1/auth/logout",{})}catch{}}static async updateProfile(t){return(await Se.put("/api/v1/auth/user/profile",t)).data}static async changePassword(t,s){return(await Se.put("/api/v1/auth/user/password",{oldPassword:t,newPassword:s})).data}static async getDeviceConfigs(t){return(await Se.get(`/api/v1/deviceConfig/${t}`)).data}static async getAllDeviceConfigs(t){return(await Se.get(`/api/v1/deviceConfig/admin/all/${t}`)).data}static async createDeviceConfig(t){return(await Se.post("/api/v1/deviceConfig/admin",t)).data}static async updateDeviceConfig(t,s){return(await Se.put(`/api/v1/deviceConfig/admin/${t}`,s)).data}static async deleteDeviceConfig(t){return(await Se.delete(`/api/v1/deviceConfig/admin/${t}`)).data}static async syncUpload(){return(await Se.get("/api/v1/server/all")).data}static async syncUploadApp(t){return(await Se.post("/api/v1/server/bindFileForApp",{bundleId:t})).data}static async getCloudApps(t=1,s=20){return(await Se.get(`/api/v1/appinfo/all/${t}/${s}`)).data.data||[]}static async getUsers(t=1,s=20,o){const a={};o&&o.trim()&&(a.search=o.trim());const i=(await Se.get(`/api/v1/auth/users/${t}/${s}`,{params:a})).data.data||{};return{users:Array.isArray(i.users)?i.users:[],total:i.total||0}}static async getUsersForChat(t=1,s=50,o){const a={};o&&o.trim()&&(a.search=o.trim());const i=(await Se.get(`/api/v1/users/list/${t}/${s}`,{params:a})).data.data||{};return{users:Array.isArray(i.users)?i.users:[],total:i.total||0}}static async addUser(t){return(await Se.post("/api/v1/admin/users",t)).data}static async updateUser(t,s){return(await Se.put(`/api/v1/admin/users/${t}`,s)).data}static async deleteUserByUsername(t){return(await Se.delete(`/api/v1/auth/user/${t}`)).data}static async banUserByUsername(t,s){return(await Se.post(`/api/v1/auth/setUserStatus/${t}`,{status:s})).data}static async requestForumOpen(t,s){return(await Se.post("/api/v1/forums/requests",{bundleId:t,appName:s})).data}static async getForumRequests(t,s=1,o=20){var i;const a={page:s,pageSize:o};t&&t!=="all"&&(a.status=t);const l=await Se.get("/api/v1/forums/requests",{params:a});return l.data.success?Array.isArray(l.data.data)?{requests:l.data.data,total:l.data.data.length}:(i=l.data.data)!=null&&i.requests?{requests:l.data.data.requests,total:l.data.data.total||l.data.data.requests.length}:{requests:[],total:0}:{requests:[],total:0}}static async processForumRequest(t,s,o){const a={action:s};return o&&(a.reason=o),(await Se.post(`/api/v1/forums/requests/${t}/process`,a)).data}static async checkUserRequestStatus(t){var s,o;try{const a=await Se.get(`/api/v1/forums/requests/status/${t}`);return a.data.data||a.data}catch(a){return((s=a.response)==null?void 0:s.status)===401||((o=a.response)==null?void 0:o.status)===404?{hasRequest:!1}:(console.error("检查申请状态失败:",a),{hasRequest:!1})}}static async getForumOpenRequests(){return(await this.getForumRequests("all",1,1e3)).requests}static async approveForumRequest(t){return await this.processForumRequest(t,"approve")}static async rejectForumRequest(t,s){return await this.processForumRequest(t,"reject",s)}static async getDownloadUrl(t,s){var a;return((a=(await Se.get(`/api/v1/server/getDownloadUrl/${t}/${s}`)).data.data)==null?void 0:a.downloadUrl)||""}static async healthCheck(){return(await Se.get("/api/v1/health")).data}static async upgradeUserRole(t,s){return(await Se.post(`/api/v1/auth/upgradeUserRole/${t}`,{role:s})).data}static async setUserStatus(t,s){return(await Se.post(`/api/v1/auth/setUserStatus/${t}`,{status:s})).data}static async deleteUser(t){return(await Se.delete(`/api/v1/auth/user/${t}`)).data}static async getOperationLogs(t=1,s=20){return(await Se.get(`/api/v1/auth/operationLogs/${t}/${s}`)).data}static async getFiles(){return(await Se.get("/api/v1/uploadManage/all")).data}static async bindFile(t){return(await Se.post("/api/v1/uploadManage/bindFileForApp",t)).data}static async getBinds(t=1,s=20){return(await Se.get(`/api/v1/uploadManage/bindAll/${t}/${s}`)).data}static async deleteBind(t){return(await Se.delete(`/api/v1/uploadManage/bind/${t}`)).data}static async refreshToken(t){var o,a;const s=await Se.post("/api/v1/auth/refreshToken",{refreshToken:t});return(o=s.data.data)!=null&&o.token&&localStorage.setItem("token",s.data.data.token),(a=s.data.data)!=null&&a.refreshToken&&localStorage.setItem("refreshToken",s.data.data.refreshToken),s.data}static async getMyOperationLogs(t=1,s=20){return(await Se.get(`/api/v1/auth/myOperationLogs/${t}/${s}`)).data}static async getAppInfoAll(t=1,s=20){return(await Se.get(`/api/v1/appinfo/all/${t}/${s}`)).data}static async uploadAppInfo(t){return(await Se.post("/api/v1/appinfo/app/setup",t)).data}static async uploadImage(t,s){const o=new FormData;return o.append("image",s),(await Se.post(`/api/v1/appinfo/app/uploadImage/${t}`,o)).data}static async uploadImages(t,s){const o=new FormData;return s.forEach(l=>{o.append("images",l)}),(await Se.post(`/api/v1/appinfo/uploadImages/${t}`,o)).data}static async getImage(t,s,o,a){const l={};s!==void 0&&(l.quality=s),o!==void 0&&(l.width=o),a!==void 0&&(l.height=a);const r=(await Se.get(`/api/v1/appinfo/app/getImage/${t}`,{params:l,responseType:"blob"})).data;return URL.createObjectURL(r)}static getImageUrl(t,s,o,a){const l=new URLSearchParams;s!==void 0&&l.append("quality",s.toString()),o!==void 0&&l.append("width",o.toString()),a!==void 0&&l.append("height",a.toString());const i=l.toString();return`/api/v1/appinfo/app/getImage/${t}${i?"?"+i:""}`}static async getImageInfo(t){return(await Se.get(`/api/v1/appinfo/app/getImageInfo/${t}`)).data}static async getImagesInfo(t){return(await Se.post("/api/v1/appinfo/app/getImagesInfo",{imageMd5s:t})).data}static async getBindByBundleId(t){return(await Se.get(`/api/v1/uploadManage/getBindByBundleId/${t}`)).data}static async downloadPreCrackedPackage(t,s){return(await Se.post(`/api/v1/uploadManage/downloadPreCrackedPackage/${t}/${s}`)).data}static async getBuckets(){return(await Se.get("/api/v1/buckets/buckets")).data}static async createBucket(t,s){return(await Se.post("/api/v1/buckets/buckets",{name:t,region:s})).data}static async deleteBucket(t){return(await Se.delete(`/api/v1/buckets/buckets/${t}`)).data}static async checkBucket(t){try{return(await Se.head(`/api/v1/buckets/buckets/${t}`)).status===200}catch{return!1}}static async getForumPosts(t,s=1,o=20,a="time"){const l=await Se.get(`/api/v1/forums/${t}/posts`,{params:{page:s,pageSize:o,sortBy:a}});return l.data.success?l.data.data||{posts:[],total:0,page:s,pageSize:o}:{posts:[],total:0,page:s,pageSize:o}}static async getForumPost(t,s,o=1,a=50){const l={};return o>1&&(l.replyPage=o),a!==50&&(l.replyPageSize=a),(await Se.get(`/api/v1/forums/${t}/posts/${s}`,{params:l})).data.data||null}static async uploadImageAttachment(t,s){var o,a;try{const l=new FormData;l.append("image",t);const r=(await Se.post("/api/v1/attachments/image",l,{headers:{"Content-Type":"multipart/form-data"},onUploadProgress:c=>{if(c.total&&s){const p=Math.round(c.loaded*100/c.total);s(p)}}})).data;return r.success&&r.data?{success:!0,attachmentId:r.data.attachmentId,url:r.data.url,message:r.message,data:r.data}:r}catch(l){return console.error("上传图片附件失败:",l),{success:!1,message:((a=(o=l.response)==null?void 0:o.data)==null?void 0:a.message)||l.message||"上传图片失败"}}}static async uploadFileAttachment(t,s){var o,a;try{const l=new FormData;l.append("file",t);const r=(await Se.post("/api/v1/attachments/file",l,{headers:{"Content-Type":"multipart/form-data"},onUploadProgress:c=>{if(c.total&&s){const p=Math.round(c.loaded*100/c.total);s(p)}}})).data;return r.success&&r.data?{success:!0,attachmentId:r.data.attachmentId,url:r.data.url,message:r.message,data:r.data}:r}catch(l){return console.error("上传文件附件失败:",l),{success:!1,message:((a=(o=l.response)==null?void 0:o.data)==null?void 0:a.message)||l.message||"上传文件失败"}}}static async createForumPost(t,s,o,a){const l={title:s,content:o};return a&&a.length>0&&(l.attachmentIds=a),(await Se.post(`/api/v1/forums/${t}/posts`,l)).data}static async getAttachment(t){try{const s=await Se.get(`/api/v1/attachments/${t}`);return s.data.success&&s.data.data||null}catch(s){return console.error("获取附件信息失败:",s),null}}static async getAttachmentDownloadUrl(t,s){var o;try{const a={};s&&(a.expiry=s);const l=await Se.get(`/api/v1/attachments/${t}/download`,{params:a});return l.data.success&&((o=l.data.data)!=null&&o.url)?l.data.data.url:null}catch(a){return console.error("获取附件下载URL失败:",a),null}}static async getAttachmentImage(t){try{const o=(await Se.get(`/api/v1/attachments/${t}/image`,{responseType:"blob"})).data;return URL.createObjectURL(o)}catch(s){return console.error("获取附件图片失败:",s),null}}static async updateForumPost(t,s,o,a,l,i){const r=new FormData;return r.append("title",o),r.append("content",a),l&&l.length>0&&l.forEach(p=>{r.append("images",p)}),i&&i.length>0&&i.forEach(p=>{r.append("files",p)}),(await Se.put(`/forums/${t}/posts/${s}`,r,{headers:{"Content-Type":"multipart/form-data"}})).data}static async deleteForumPost(t,s){return(await Se.delete(`/forums/${t}/posts/${s}`)).data}static async likeForumPost(t,s,o){const a=await Se.post(`/api/v1/forums/${t}/posts/${s}/like`,{action:o});return a.data.success&&a.data.data?{success:!0,likeCount:a.data.data.likeCount,dislikeCount:a.data.data.dislikeCount,userLikeStatus:a.data.data.userLikeStatus}:{success:!1,likeCount:0,dislikeCount:0,userLikeStatus:null}}static async createForumReply(t,s,o,a,l,i){const r={content:o};return a&&(r.replyToUserId=a),l&&(r.replyToUserName=l),i&&i.length>0&&(r.attachmentIds=i),(await Se.post(`/api/v1/forums/${t}/posts/${s}/replies`,r)).data}static async createNestedReply(t,s,o,a,l,i,r){const c={content:a};return l&&(c.replyToUserId=l),i&&(c.replyToUserName=i),r&&r.length>0&&(c.attachmentIds=r),(await Se.post(`/api/v1/forums/${t}/posts/${s}/replies/${o}/nested`,c)).data}static async updateForumReply(t,s,o,a,l,i){const r=new FormData;return r.append("content",a),l&&l.length>0&&l.forEach(p=>{r.append("images",p)}),i&&i.length>0&&i.forEach(p=>{r.append("files",p)}),(await Se.put(`/forums/${t}/posts/${s}/replies/${o}`,r,{headers:{"Content-Type":"multipart/form-data"}})).data}static async deleteForumReply(t,s,o){return(await Se.delete(`/forums/${t}/posts/${s}/replies/${o}`)).data}static async likeForumReply(t,s,o,a){return(await Se.post(`/api/v1/forums/${t}/posts/${s}/replies/${o}/like`,{action:a})).data.data||{success:!1,likeCount:0,dislikeCount:0}}static async submitReport(t,s,o,a,l,i,r){const c={type:t,targetId:s,bundleId:o,postId:a,reportTypes:l,content:i};return r&&(c.comment=r),(await Se.post("/api/v1/reports",c)).data}static async submitIssue(t,s,o,a,l,i,r,c,p,d){var v,b,_,y;try{console.log("开始上传截图,数量:",c.length);const S=[];for(let E=0;E<c.length;E++){const F=c[E];console.log(`上传截图 ${E+1}/${c.length}`);const W=await Y.uploadImageAttachment(F);console.log("截图上传结果:",W);const G=W.attachmentId||((v=W.data)==null?void 0:v.attachmentId);if(W.success&&G)S.push(G),console.log(`截图 ${E+1} 上传成功:`,G);else throw console.error(`截图 ${E+1} 上传失败:`,W.message),new Error(W.message||`截图 ${E+1} 上传失败`)}console.log("开始上传文件,数量:",p.length);const C=[];for(let E=0;E<p.length;E++){const F=p[E];console.log(`上传文件 ${E+1}/${p.length}`);const W=await Y.uploadFileAttachment(F);console.log("文件上传结果:",W);const G=W.attachmentId||((b=W.data)==null?void 0:b.attachmentId);if(W.success&&G)C.push(G),console.log(`文件 ${E+1} 上传成功:`,G);else throw console.error(`文件 ${E+1} 上传失败:`,W.message),new Error(W.message||`文件 ${E+1} 上传失败`)}console.log("所有附件上传完成,开始提交问题报告");const I={bundleId:t,appName:s,appVersion:o,osVersion:a,architecture:l,errorType:i,description:r,screenshotAttachmentIds:S,fileAttachmentIds:C,appIconId:d};console.log("提交问题报告数据:",{...I,description:r.substring(0,50)+"..."});const x=await Se.post("/api/v1/issues",I);return console.log("问题报告提交成功:",x.data),x.data}catch(S){return console.error("提交问题报告失败:",S),{success:!1,message:((y=(_=S.response)==null?void 0:_.data)==null?void 0:y.message)||S.message||"提交问题报告失败"}}}static async getAdminPosts(t=1,s=20,o,a){const l={page:t,pageSize:s};return o&&(l.search=o),a&&a!=="all"&&(l.status=a),(await Se.get("/api/v1/admin/posts",{params:l})).data}static async updateAdminPost(t,s,o,a){const l={title:s,content:o};return a!==void 0&&(l.attachmentIds=a),(await Se.put(`/api/v1/admin/posts/${t}`,l)).data}static async deleteAdminPost(t){return(await Se.delete(`/api/v1/admin/posts/${t}`)).data}static async getAdminViolations(t=1,s=20,o){const a={page:t,pageSize:s};return o&&o!=="all"&&(a.status=o),(await Se.get("/api/v1/admin/violations",{params:a})).data}static async resolveViolation(t,s){return(await Se.post(`/api/v1/admin/violations/${t}/resolve`,{status:s})).data}static async getAdminIssues(t=1,s=20,o){const a={page:t,pageSize:s};return o&&o!=="all"&&(a.status=o),(await Se.get("/api/v1/admin/issues",{params:a})).data}static async resolveIssue(t,s,o){const a={status:s};return o&&(a.resolutionNote=o),(await Se.post(`/api/v1/admin/issues/${t}/resolve`,a)).data}static async getMyIssues(t=1,s=20){const o={page:t,pageSize:s};return(await Se.get("/api/v1/issues/my",{params:o})).data}static async getUserInfo(t){try{const s=await Se.get(`/api/v1/users/${t}/info`);return s.data.success&&s.data.data?s.data.data:null}catch(s){return console.error("获取用户信息失败:",s),null}}static async getNotifications(t=1,s=20,o){const a={page:t,pageSize:s};return o&&(a.unreadOnly="true"),(await Se.get("/api/v1/notifications",{params:a})).data}static async getUnreadNotificationCount(){return(await Se.get("/api/v1/notifications/unread-count")).data}static async markNotificationAsRead(t){return(await Se.put(`/api/v1/notifications/${t}/read`)).data}static async markAllNotificationsAsRead(){return(await Se.put("/api/v1/notifications/read-all")).data}static async getMyReplies(t=1,s=20){const o={page:t,pageSize:s};return(await Se.get("/api/v1/user/replies/my",{params:o})).data}static async getRepliesToMe(t=1,s=20){const o={page:t,pageSize:s};return(await Se.get("/api/v1/user/replies/to-me",{params:o})).data}static async getMessageNotifications(t=10){const s={limit:t};return(await Se.get("/api/v1/messages/notifications",{params:s})).data}static async getUnreadMessageCount(){return(await Se.get("/api/v1/messages/unread-count")).data}static async getConversations(t=1,s=20){const o={page:t,pageSize:s};return(await Se.get("/api/v1/messages/conversations",{params:o})).data}static async getConversationMessages(t,s=1,o=50){const a={page:s,pageSize:o};return(await Se.get(`/api/v1/messages/conversations/${t}/messages`,{params:a})).data}static async sendMessage(t,s){return(await Se.post(`/api/v1/messages/conversations/${t}/messages`,{content:s})).data}static async getOrCreateConversationByUserId(t){return(await Se.post(`/api/v1/messages/conversations/by-user/${t}`)).data}static async setConversationBlock(t,s){return(await Se.put(`/api/v1/messages/conversations/${t}/block`,{blocked:s})).data}static async setConversationMute(t,s){return(await Se.put(`/api/v1/messages/conversations/${t}/mute`,{muted:s})).data}static async getAppRatingStats(t){try{const s=await Se.get(`/api/v1/apps/${t}/ratings/stats`);return s.data.success?s.data.data:null}catch(s){return console.error("获取评分统计失败:",s),null}}static async getUserAppRating(t){var s,o,a;try{const l=await Se.get(`/api/v1/apps/${t}/ratings/user`);return l.data.success&&((s=l.data.data)!=null&&s.rating)?l.data.data.rating:null}catch(l){return((o=l.response)==null?void 0:o.status)===401||((a=l.response)==null?void 0:a.status)===404||console.error("获取用户评分失败:",l),null}}static async submitAppRating(t,s){return(await Se.post(`/api/v1/apps/${t}/ratings`,{rating:s})).data}static async getAppComments(t,s=1,o=20){const a=await Se.get(`/api/v1/apps/${t}/comments`,{params:{page:s,pageSize:o}});return a.data.success?a.data.data||{comments:[],total:0,page:s,pageSize:o}:{comments:[],total:0,page:s,pageSize:o}}static async createAppComment(t,s,o){return(await Se.post(`/api/v1/apps/${t}/comments`,{content:s,imageAttachmentIds:o})).data}static async likeAppComment(t,s,o){const a=await Se.post(`/api/v1/apps/${t}/comments/${s}/like`,{action:o});return a.data.success&&a.data.data?{success:!0,likeCount:a.data.data.likeCount,dislikeCount:a.data.data.dislikeCount,userLikeStatus:a.data.data.userLikeStatus}:{success:!1,likeCount:0,dislikeCount:0,userLikeStatus:null}}static async createAppCommentReply(t,s,o,a){return(await Se.post(`/api/v1/apps/${t}/comments/${s}/replies`,{content:o,imageAttachmentIds:a})).data}static async createAppCommentNestedReply(t,s,o,a,l,i,r){return(await Se.post(`/api/v1/apps/${t}/comments/${s}/replies/${o}/nested`,{content:a,replyToUserId:l,replyToUserName:i,imageAttachmentIds:r})).data}static async likeAppCommentReply(t,s,o,a){const l=await Se.post(`/api/v1/apps/${t}/comments/${s}/replies/${o}/like`,{action:a});return l.data.success&&l.data.data?{success:!0,likeCount:l.data.data.likeCount,dislikeCount:l.data.data.dislikeCount,userLikeStatus:l.data.data.userLikeStatus}:{success:!1,likeCount:0,dislikeCount:0,userLikeStatus:null}}static async getMinioConfig(){return(await Se.get("/api/v1/systemConfig/minio")).data}static async updateMinioConfig(t){return(await Se.put("/api/v1/systemConfig/minio",t)).data}static async testMinioConnection(){return(await Se.post("/api/v1/systemConfig/minio/test")).data}}const Nu=/^[a-z0-9]+(-[a-z0-9]+)*$/,Ia=(e,t,s,o="")=>{const a=e.split(":");if(e.slice(0,1)==="@"){if(a.length<2||a.length>3)return null;o=a.shift().slice(1)}if(a.length>3||!a.length)return null;if(a.length>1){const r=a.pop(),c=a.pop(),p={provider:a.length>0?a[0]:o,prefix:c,name:r};return t&&!jo(p)?null:p}const l=a[0],i=l.split("-");if(i.length>1){const r={provider:o,prefix:i.shift(),name:i.join("-")};return t&&!jo(r)?null:r}if(s&&o===""){const r={provider:o,prefix:"",name:l};return t&&!jo(r,s)?null:r}return null},jo=(e,t)=>e?!!((t&&e.prefix===""||e.prefix)&&e.name):!1,Ou=Object.freeze({left:0,top:0,width:16,height:16}),la=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),Sa=Object.freeze({...Ou,...la}),_l=Object.freeze({...Sa,body:"",hidden:!1});function Dm(e,t){const s={};!e.hFlip!=!t.hFlip&&(s.hFlip=!0),!e.vFlip!=!t.vFlip&&(s.vFlip=!0);const o=((e.rotate||0)+(t.rotate||0))%4;return o&&(s.rotate=o),s}function lr(e,t){const s=Dm(e,t);for(const o in _l)o in la?o in e&&!(o in s)&&(s[o]=la[o]):o in t?s[o]=t[o]:o in e&&(s[o]=e[o]);return s}function Lm(e,t){const s=e.icons,o=e.aliases||Object.create(null),a=Object.create(null);function l(i){if(s[i])return a[i]=[];if(!(i in a)){a[i]=null;const r=o[i]&&o[i].parent,c=r&&l(r);c&&(a[i]=[r].concat(c))}return a[i]}return Object.keys(s).concat(Object.keys(o)).forEach(l),a}function Nm(e,t,s){const o=e.icons,a=e.aliases||Object.create(null);let l={};function i(r){l=lr(o[r]||a[r],l)}return i(t),s.forEach(i),lr(e,l)}function Fu(e,t){const s=[];if(typeof e!="object"||typeof e.icons!="object")return s;e.not_found instanceof Array&&e.not_found.forEach(a=>{t(a,null),s.push(a)});const o=Lm(e);for(const a in o){const l=o[a];l&&(t(a,Nm(e,a,l)),s.push(a))}return s}const Om={provider:"",aliases:{},not_found:{},...Ou};function Ga(e,t){for(const s in t)if(s in e&&typeof e[s]!=typeof t[s])return!1;return!0}function Vu(e){if(typeof e!="object"||e===null)return null;const t=e;if(typeof t.prefix!="string"||!e.icons||typeof e.icons!="object"||!Ga(e,Om))return null;const s=t.icons;for(const a in s){const l=s[a];if(!a||typeof l.body!="string"||!Ga(l,_l))return null}const o=t.aliases||Object.create(null);for(const a in o){const l=o[a],i=l.parent;if(!a||typeof i!="string"||!s[i]&&!o[i]||!Ga(l,_l))return null}return t}const ir=Object.create(null);function Fm(e,t){return{provider:e,prefix:t,icons:Object.create(null),missing:new Set}}function _n(e,t){const s=ir[e]||(ir[e]=Object.create(null));return s[t]||(s[t]=Fm(e,t))}function Bu(e,t){return Vu(t)?Fu(t,(s,o)=>{o?e.icons[s]=o:e.missing.add(s)}):[]}function Vm(e,t,s){try{if(typeof s.body=="string")return e.icons[t]={...s},!0}catch{}return!1}let co=!1;function ju(e){return typeof e=="boolean"&&(co=e),co}function Bm(e){const t=typeof e=="string"?Ia(e,!0,co):e;if(t){const s=_n(t.provider,t.prefix),o=t.name;return s.icons[o]||(s.missing.has(o)?null:void 0)}}function jm(e,t){const s=Ia(e,!0,co);if(!s)return!1;const o=_n(s.provider,s.prefix);return t?Vm(o,s.name,t):(o.missing.add(s.name),!0)}function qm(e,t){if(typeof e!="object")return!1;if(typeof t!="string"&&(t=e.provider||""),co&&!t&&!e.prefix){let a=!1;return Vu(e)&&(e.prefix="",Fu(e,(l,i)=>{jm(l,i)&&(a=!0)})),a}const s=e.prefix;if(!jo({prefix:s,name:"a"}))return!1;const o=_n(t,s);return!!Bu(o,e)}const qu=Object.freeze({width:null,height:null}),Hu=Object.freeze({...qu,...la}),Hm=/(-?[0-9.]*[0-9]+[0-9.]*)/g,zm=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function rr(e,t,s){if(t===1)return e;if(s=s||100,typeof e=="number")return Math.ceil(e*t*s)/s;if(typeof e!="string")return e;const o=e.split(Hm);if(o===null||!o.length)return e;const a=[];let l=o.shift(),i=zm.test(l);for(;;){if(i){const r=parseFloat(l);isNaN(r)?a.push(l):a.push(Math.ceil(r*t*s)/s)}else a.push(l);if(l=o.shift(),l===void 0)return a.join("");i=!i}}function Wm(e,t="defs"){let s="";const o=e.indexOf("<"+t);for(;o>=0;){const a=e.indexOf(">",o),l=e.indexOf("</"+t);if(a===-1||l===-1)break;const i=e.indexOf(">",l);if(i===-1)break;s+=e.slice(a+1,l).trim(),e=e.slice(0,o).trim()+e.slice(i+1)}return{defs:s,content:e}}function Km(e,t){return e?"<defs>"+e+"</defs>"+t:t}function Gm(e,t,s){const o=Wm(e);return Km(o.defs,t+o.content+s)}const Qm=e=>e==="unset"||e==="undefined"||e==="none";function Jm(e,t){const s={...Sa,...e},o={...Hu,...t},a={left:s.left,top:s.top,width:s.width,height:s.height};let l=s.body;[s,o].forEach(S=>{const C=[],I=S.hFlip,x=S.vFlip;let E=S.rotate;I?x?E+=2:(C.push("translate("+(a.width+a.left).toString()+" "+(0-a.top).toString()+")"),C.push("scale(-1 1)"),a.top=a.left=0):x&&(C.push("translate("+(0-a.left).toString()+" "+(a.height+a.top).toString()+")"),C.push("scale(1 -1)"),a.top=a.left=0);let F;switch(E<0&&(E-=Math.floor(E/4)*4),E=E%4,E){case 1:F=a.height/2+a.top,C.unshift("rotate(90 "+F.toString()+" "+F.toString()+")");break;case 2:C.unshift("rotate(180 "+(a.width/2+a.left).toString()+" "+(a.height/2+a.top).toString()+")");break;case 3:F=a.width/2+a.left,C.unshift("rotate(-90 "+F.toString()+" "+F.toString()+")");break}E%2===1&&(a.left!==a.top&&(F=a.left,a.left=a.top,a.top=F),a.width!==a.height&&(F=a.width,a.width=a.height,a.height=F)),C.length&&(l=Gm(l,'<g transform="'+C.join(" ")+'">',"</g>"))});const i=o.width,r=o.height,c=a.width,p=a.height;let d,v;i===null?(v=r===null?"1em":r==="auto"?p:r,d=rr(v,c/p)):(d=i==="auto"?c:i,v=r===null?rr(d,p/c):r==="auto"?p:r);const b={},_=(S,C)=>{Qm(C)||(b[S]=C.toString())};_("width",d),_("height",v);const y=[a.left,a.top,c,p];return b.viewBox=y.join(" "),{attributes:b,viewBox:y,body:l}}const Xm=/\sid="(\S+)"/g,Zm="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16);let Ym=0;function eh(e,t=Zm){const s=[];let o;for(;o=Xm.exec(e);)s.push(o[1]);if(!s.length)return e;const a="suffix"+(Math.random()*16777216|Date.now()).toString(16);return s.forEach(l=>{const i=typeof t=="function"?t(l):t+(Ym++).toString(),r=l.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e=e.replace(new RegExp('([#;"])('+r+')([")]|\\.[a-z])',"g"),"$1"+i+a+"$3")}),e=e.replace(new RegExp(a,"g"),""),e}const wl=Object.create(null);function th(e,t){wl[e]=t}function kl(e){return wl[e]||wl[""]}function Gl(e){let t;if(typeof e.resources=="string")t=[e.resources];else if(t=e.resources,!(t instanceof Array)||!t.length)return null;return{resources:t,path:e.path||"/",maxURL:e.maxURL||500,rotate:e.rotate||750,timeout:e.timeout||5e3,random:e.random===!0,index:e.index||0,dataAfterTimeout:e.dataAfterTimeout!==!1}}const Ql=Object.create(null),Ln=["https://api.simplesvg.com","https://api.unisvg.com"],qo=[];for(;Ln.length>0;)Ln.length===1||Math.random()>.5?qo.push(Ln.shift()):qo.push(Ln.pop());Ql[""]=Gl({resources:["https://api.iconify.design"].concat(qo)});function sh(e,t){const s=Gl(t);return s===null?!1:(Ql[e]=s,!0)}function Jl(e){return Ql[e]}const nh=()=>{let e;try{if(e=fetch,typeof e=="function")return e}catch{}};let cr=nh();function oh(e,t){const s=Jl(e);if(!s)return 0;let o;if(!s.maxURL)o=0;else{let a=0;s.resources.forEach(i=>{a=Math.max(a,i.length)});const l=t+".json?icons=";o=s.maxURL-a-s.path.length-l.length}return o}function ah(e){return e===404}const lh=(e,t,s)=>{const o=[],a=oh(e,t),l="icons";let i={type:l,provider:e,prefix:t,icons:[]},r=0;return s.forEach((c,p)=>{r+=c.length+1,r>=a&&p>0&&(o.push(i),i={type:l,provider:e,prefix:t,icons:[]},r=c.length),i.icons.push(c)}),o.push(i),o};function ih(e){if(typeof e=="string"){const t=Jl(e);if(t)return t.path}return"/"}const rh=(e,t,s)=>{if(!cr){s("abort",424);return}let o=ih(t.provider);switch(t.type){case"icons":{const l=t.prefix,r=t.icons.join(","),c=new URLSearchParams({icons:r});o+=l+".json?"+c.toString();break}case"custom":{const l=t.uri;o+=l.slice(0,1)==="/"?l.slice(1):l;break}default:s("abort",400);return}let a=503;cr(e+o).then(l=>{const i=l.status;if(i!==200){setTimeout(()=>{s(ah(i)?"abort":"next",i)});return}return a=501,l.json()}).then(l=>{if(typeof l!="object"||l===null){setTimeout(()=>{l===404?s("abort",l):s("next",a)});return}setTimeout(()=>{s("success",l)})}).catch(()=>{s("next",a)})},ch={prepare:lh,send:rh};function uh(e){const t={loaded:[],missing:[],pending:[]},s=Object.create(null);e.sort((a,l)=>a.provider!==l.provider?a.provider.localeCompare(l.provider):a.prefix!==l.prefix?a.prefix.localeCompare(l.prefix):a.name.localeCompare(l.name));let o={provider:"",prefix:"",name:""};return e.forEach(a=>{if(o.name===a.name&&o.prefix===a.prefix&&o.provider===a.provider)return;o=a;const l=a.provider,i=a.prefix,r=a.name,c=s[l]||(s[l]=Object.create(null)),p=c[i]||(c[i]=_n(l,i));let d;r in p.icons?d=t.loaded:i===""||p.missing.has(r)?d=t.missing:d=t.pending;const v={provider:l,prefix:i,name:r};d.push(v)}),t}function zu(e,t){e.forEach(s=>{const o=s.loaderCallbacks;o&&(s.loaderCallbacks=o.filter(a=>a.id!==t))})}function dh(e){e.pendingCallbacksFlag||(e.pendingCallbacksFlag=!0,setTimeout(()=>{e.pendingCallbacksFlag=!1;const t=e.loaderCallbacks?e.loaderCallbacks.slice(0):[];if(!t.length)return;let s=!1;const o=e.provider,a=e.prefix;t.forEach(l=>{const i=l.icons,r=i.pending.length;i.pending=i.pending.filter(c=>{if(c.prefix!==a)return!0;const p=c.name;if(e.icons[p])i.loaded.push({provider:o,prefix:a,name:p});else if(e.missing.has(p))i.missing.push({provider:o,prefix:a,name:p});else return s=!0,!0;return!1}),i.pending.length!==r&&(s||zu([e],l.id),l.callback(i.loaded.slice(0),i.missing.slice(0),i.pending.slice(0),l.abort))})}))}let fh=0;function ph(e,t,s){const o=fh++,a=zu.bind(null,s,o);if(!t.pending.length)return a;const l={id:o,icons:t,callback:e,abort:a};return s.forEach(i=>{(i.loaderCallbacks||(i.loaderCallbacks=[])).push(l)}),a}function vh(e,t=!0,s=!1){const o=[];return e.forEach(a=>{const l=typeof a=="string"?Ia(a,t,s):a;l&&o.push(l)}),o}var mh={resources:[],index:0,timeout:2e3,rotate:750,random:!1,dataAfterTimeout:!1};function hh(e,t,s,o){const a=e.resources.length,l=e.random?Math.floor(Math.random()*a):e.index;let i;if(e.random){let G=e.resources.slice(0);for(i=[];G.length>1;){const re=Math.floor(Math.random()*G.length);i.push(G[re]),G=G.slice(0,re).concat(G.slice(re+1))}i=i.concat(G)}else i=e.resources.slice(l).concat(e.resources.slice(0,l));const r=Date.now();let c="pending",p=0,d,v=null,b=[],_=[];typeof o=="function"&&_.push(o);function y(){v&&(clearTimeout(v),v=null)}function S(){c==="pending"&&(c="aborted"),y(),b.forEach(G=>{G.status==="pending"&&(G.status="aborted")}),b=[]}function C(G,re){re&&(_=[]),typeof G=="function"&&_.push(G)}function I(){return{startTime:r,payload:t,status:c,queriesSent:p,queriesPending:b.length,subscribe:C,abort:S}}function x(){c="failed",_.forEach(G=>{G(void 0,d)})}function E(){b.forEach(G=>{G.status==="pending"&&(G.status="aborted")}),b=[]}function F(G,re,D){const U=re!=="success";switch(b=b.filter(O=>O!==G),c){case"pending":break;case"failed":if(U||!e.dataAfterTimeout)return;break;default:return}if(re==="abort"){d=D,x();return}if(U){d=D,b.length||(i.length?W():x());return}if(y(),E(),!e.random){const O=e.resources.indexOf(G.resource);O!==-1&&O!==e.index&&(e.index=O)}c="completed",_.forEach(O=>{O(D)})}function W(){if(c!=="pending")return;y();const G=i.shift();if(G===void 0){if(b.length){v=setTimeout(()=>{y(),c==="pending"&&(E(),x())},e.timeout);return}x();return}const re={status:"pending",resource:G,callback:(D,U)=>{F(re,D,U)}};b.push(re),p++,v=setTimeout(W,e.rotate),s(G,t,re.callback)}return setTimeout(W),I}function Wu(e){const t={...mh,...e};let s=[];function o(){s=s.filter(r=>r().status==="pending")}function a(r,c,p){const d=hh(t,r,c,(v,b)=>{o(),p&&p(v,b)});return s.push(d),d}function l(r){return s.find(c=>r(c))||null}return{query:a,find:l,setIndex:r=>{t.index=r},getIndex:()=>t.index,cleanup:o}}function ur(){}const Qa=Object.create(null);function gh(e){if(!Qa[e]){const t=Jl(e);if(!t)return;const s=Wu(t),o={config:t,redundancy:s};Qa[e]=o}return Qa[e]}function yh(e,t,s){let o,a;if(typeof e=="string"){const l=kl(e);if(!l)return s(void 0,424),ur;a=l.send;const i=gh(e);i&&(o=i.redundancy)}else{const l=Gl(e);if(l){o=Wu(l);const i=e.resources?e.resources[0]:"",r=kl(i);r&&(a=r.send)}}return!o||!a?(s(void 0,424),ur):o.query(t,a,s)().abort}function dr(){}function bh(e){e.iconsLoaderFlag||(e.iconsLoaderFlag=!0,setTimeout(()=>{e.iconsLoaderFlag=!1,dh(e)}))}function _h(e){const t=[],s=[];return e.forEach(o=>{(o.match(Nu)?t:s).push(o)}),{valid:t,invalid:s}}function Nn(e,t,s){function o(){const a=e.pendingIcons;t.forEach(l=>{a&&a.delete(l),e.icons[l]||e.missing.add(l)})}if(s&&typeof s=="object")try{if(!Bu(e,s).length){o();return}}catch(a){console.error(a)}o(),bh(e)}function fr(e,t){e instanceof Promise?e.then(s=>{t(s)}).catch(()=>{t(null)}):t(e)}function wh(e,t){e.iconsToLoad?e.iconsToLoad=e.iconsToLoad.concat(t).sort():e.iconsToLoad=t,e.iconsQueueFlag||(e.iconsQueueFlag=!0,setTimeout(()=>{e.iconsQueueFlag=!1;const{provider:s,prefix:o}=e,a=e.iconsToLoad;if(delete e.iconsToLoad,!a||!a.length)return;const l=e.loadIcon;if(e.loadIcons&&(a.length>1||!l)){fr(e.loadIcons(a,o,s),d=>{Nn(e,a,d)});return}if(l){a.forEach(d=>{const v=l(d,o,s);fr(v,b=>{const _=b?{prefix:o,icons:{[d]:b}}:null;Nn(e,[d],_)})});return}const{valid:i,invalid:r}=_h(a);if(r.length&&Nn(e,r,null),!i.length)return;const c=o.match(Nu)?kl(s):null;if(!c){Nn(e,i,null);return}c.prepare(s,o,i).forEach(d=>{yh(s,d,v=>{Nn(e,d.icons,v)})})}))}const kh=(e,t)=>{const s=vh(e,!0,ju()),o=uh(s);if(!o.pending.length){let c=!0;return t&&setTimeout(()=>{c&&t(o.loaded,o.missing,o.pending,dr)}),()=>{c=!1}}const a=Object.create(null),l=[];let i,r;return o.pending.forEach(c=>{const{provider:p,prefix:d}=c;if(d===r&&p===i)return;i=p,r=d,l.push(_n(p,d));const v=a[p]||(a[p]=Object.create(null));v[d]||(v[d]=[])}),o.pending.forEach(c=>{const{provider:p,prefix:d,name:v}=c,b=_n(p,d),_=b.pendingIcons||(b.pendingIcons=new Set);_.has(v)||(_.add(v),a[p][d].push(v))}),l.forEach(c=>{const p=a[c.provider][c.prefix];p.length&&wh(c,p)}),t?ph(t,o,l):dr};function $h(e,t){const s={...e};for(const o in t){const a=t[o],l=typeof a;o in qu?(a===null||a&&(l==="string"||l==="number"))&&(s[o]=a):l===typeof s[o]&&(s[o]=o==="rotate"?a%4:a)}return s}const Ch=/[\s,]+/;function Ih(e,t){t.split(Ch).forEach(s=>{switch(s.trim()){case"horizontal":e.hFlip=!0;break;case"vertical":e.vFlip=!0;break}})}function Sh(e,t=0){const s=e.replace(/^-?[0-9.]*/,"");function o(a){for(;a<0;)a+=4;return a%4}if(s===""){const a=parseInt(e);return isNaN(a)?0:o(a)}else if(s!==e){let a=0;switch(s){case"%":a=25;break;case"deg":a=90}if(a){let l=parseFloat(e.slice(0,e.length-s.length));return isNaN(l)?0:(l=l/a,l%1===0?o(l):0)}}return t}function xh(e,t){let s=e.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(const o in t)s+=" "+o+'="'+t[o]+'"';return'<svg xmlns="http://www.w3.org/2000/svg"'+s+">"+e+"</svg>"}function Ah(e){return e.replace(/"/g,"'").replace(/%/g,"%25").replace(/#/g,"%23").replace(/</g,"%3C").replace(/>/g,"%3E").replace(/\s+/g," ")}function Th(e){return"data:image/svg+xml,"+Ah(e)}function Eh(e){return'url("'+Th(e)+'")'}const pr={...Hu,inline:!1},Rh={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink","aria-hidden":!0,role:"img"},Uh={display:"inline-block"},$l={backgroundColor:"currentColor"},Ku={backgroundColor:"transparent"},vr={Image:"var(--svg)",Repeat:"no-repeat",Size:"100% 100%"},mr={webkitMask:$l,mask:$l,background:Ku};for(const e in mr){const t=mr[e];for(const s in vr)t[e+s]=vr[s]}const Ho={};["horizontal","vertical"].forEach(e=>{const t=e.slice(0,1)+"Flip";Ho[e+"-flip"]=t,Ho[e.slice(0,1)+"-flip"]=t,Ho[e+"Flip"]=t});function hr(e){return e+(e.match(/^[-0-9.]+$/)?"px":"")}const gr=(e,t)=>{const s=$h(pr,t),o={...Rh},a=t.mode||"svg",l={},i=t.style,r=typeof i=="object"&&!(i instanceof Array)?i:{};for(let S in t){const C=t[S];if(C!==void 0)switch(S){case"icon":case"style":case"onLoad":case"mode":case"ssr":break;case"inline":case"hFlip":case"vFlip":s[S]=C===!0||C==="true"||C===1;break;case"flip":typeof C=="string"&&Ih(s,C);break;case"color":l.color=C;break;case"rotate":typeof C=="string"?s[S]=Sh(C):typeof C=="number"&&(s[S]=C);break;case"ariaHidden":case"aria-hidden":C!==!0&&C!=="true"&&delete o["aria-hidden"];break;default:{const I=Ho[S];I?(C===!0||C==="true"||C===1)&&(s[I]=!0):pr[S]===void 0&&(o[S]=C)}}}const c=Jm(e,s),p=c.attributes;if(s.inline&&(l.verticalAlign="-0.125em"),a==="svg"){o.style={...l,...r},Object.assign(o,p);let S=0,C=t.id;return typeof C=="string"&&(C=C.replace(/-/g,"_")),o.innerHTML=eh(c.body,C?()=>C+"ID"+S++:"iconifyVue"),ro("svg",o)}const{body:d,width:v,height:b}=e,_=a==="mask"||(a==="bg"?!1:d.indexOf("currentColor")!==-1),y=xh(d,{...p,width:v+"",height:b+""});return o.style={...l,"--svg":Eh(y),width:hr(p.width),height:hr(p.height),...Uh,..._?$l:Ku,...r},ro("span",o)};ju(!0);th("",ch);if(typeof document<"u"&&typeof window<"u"){const e=window;if(e.IconifyPreload!==void 0){const t=e.IconifyPreload,s="Invalid IconifyPreload syntax.";typeof t=="object"&&t!==null&&(t instanceof Array?t:[t]).forEach(o=>{try{(typeof o!="object"||o===null||o instanceof Array||typeof o.icons!="object"||typeof o.prefix!="string"||!qm(o))&&console.error(s)}catch{console.error(s)}})}if(e.IconifyProviders!==void 0){const t=e.IconifyProviders;if(typeof t=="object"&&t!==null)for(let s in t){const o="IconifyProviders["+s+"] is invalid.";try{const a=t[s];if(typeof a!="object"||!a||a.resources===void 0)continue;sh(s,a)||console.error(o)}catch{console.error(o)}}}}const Ph={...Sa,body:""},Mh=ze((e,{emit:t})=>{const s=w(null);function o(){var p,d;s.value&&((d=(p=s.value).abort)==null||d.call(p),s.value=null)}const a=w(!!e.ssr),l=w(""),i=so(null);function r(){const p=e.icon;if(typeof p=="object"&&p!==null&&typeof p.body=="string")return l.value="",{data:p};let d;if(typeof p!="string"||(d=Ia(p,!1,!0))===null)return null;let v=Bm(d);if(!v){const y=s.value;return(!y||y.name!==p)&&(v===null?s.value={name:p}:s.value={name:p,abort:kh([d],c)}),null}o(),l.value!==p&&(l.value=p,pt(()=>{t("load",p)}));const b=e.customise;if(b){v=Object.assign({},v);const y=b(v.body,d.name,d.prefix,d.provider);typeof y=="string"&&(v.body=y)}const _=["iconify"];return d.prefix!==""&&_.push("iconify--"+d.prefix),d.provider!==""&&_.push("iconify--"+d.provider),{data:v,classes:_}}function c(){var d;const p=r();p?p.data!==((d=i.value)==null?void 0:d.data)&&(i.value=p):i.value=null}return a.value?c():nt(()=>{a.value=!0,c()}),Xe(()=>e.icon,c),At(o),()=>{const p=i.value;if(!p)return gr(Ph,e);let d=e;return p.classes&&(d={...e,class:p.classes.join(" ")}),gr({...Sa,...p.data},d)}},{props:["icon","mode","ssr","width","height","style","color","inline","rotate","hFlip","horizontalFlip","vFlip","verticalFlip","flip","id","ariaHidden","customise","title"],emits:["load"]}),k=ze({__name:"IconifyIcon",props:{icon:{},className:{}},setup(e){return(t,s)=>(u(),Ne(se(Mh),{icon:e.icon,class:Te(e.className)},null,8,["icon","class"]))}});function Gu(){const e=w("auto"),t=w(!1),s=ge(()=>e.value==="auto"?t.value:e.value==="dark"),o=()=>{if(typeof window<"u"){const _=window.matchMedia("(prefers-color-scheme: dark)");t.value=_.matches}};let a=null;const l=_=>{t.value=_.matches},i=()=>{if(typeof document<"u"){const _=document.documentElement;s.value?_.setAttribute("data-theme","dark"):_.removeAttribute("data-theme")}},r=_=>{typeof localStorage<"u"&&localStorage.setItem("hayaku-theme",_)},c=()=>{if(typeof localStorage<"u"){const _=localStorage.getItem("hayaku-theme");if(_&&["light","dark","auto"].includes(_))return _}return"auto"},p=()=>{e.value==="auto"?e.value="dark":e.value==="dark"?e.value="light":e.value="auto",r(e.value)},d=_=>{e.value=_,r(_)},v=()=>{e.value=c(),o(),typeof window<"u"&&(a=window.matchMedia("(prefers-color-scheme: dark)"),a.addEventListener("change",l)),i()},b=()=>{a&&a.removeEventListener("change",l)};return Xe(s,()=>{i()},{immediate:!0}),Xe(e,()=>{i()}),nt(()=>{v()}),At(()=>{b()}),{theme:e,isDark:s,toggleTheme:p,setTheme:d,systemPrefersDark:t}}const We=(e,t)=>{const s=e.__vccOpts||e;for(const[o,a]of t)s[o]=a;return s};function gs(){const e=w(!1),t=w({title:"",message:"",type:"warning",confirmText:"确认",cancelText:"取消"});let s=null;const o=i=>(t.value={...t.value,...i,title:i.title||"",message:i.message||""},e.value=!0,new Promise(r=>{s=r})),a=()=>{e.value=!1,s&&(s(!0),s=null)},l=()=>{e.value=!1,s&&(s(!1),s=null)};return{visible:ge(()=>e.value),config:ge(()=>t.value),show:o,handleConfirm:a,handleCancel:l}}const Dh={key:0,class:"dialog-icon"},Lh={class:"dialog-title"},Nh={key:1,class:"dialog-message"},Oh={class:"dialog-actions"},Fh=ze({__name:"ConfirmDialog",props:{visible:{type:Boolean},title:{},message:{default:""},type:{default:"warning"},confirmText:{default:"确认"},cancelText:{default:"取消"},showIcon:{type:Boolean,default:!0}},emits:["confirm","cancel"],setup(e,{emit:t}){const s=e,o=t,a=ge(()=>({info:"fluent-color:question-circle-24",warning:"fluent-color:warning-24",danger:"fluent-color:error-circle-24"})[s.type]),l=ge(()=>({info:"btn-primary",warning:"btn-warning",danger:"btn-error"})[s.type]),i=()=>{o("confirm")},r=()=>{o("cancel")};return(c,p)=>(u(),Ne(Ot,{to:"body"},[m(gt,{name:"fade"},{default:lt(()=>[e.visible?(u(),f("div",{key:0,class:"confirm-dialog-overlay",onClick:Oe(r,["self"])},[n("div",{class:Te(["confirm-dialog",`type-${e.type}`])},[e.showIcon?(u(),f("div",Dh,[m(k,{icon:a.value},null,8,["icon"])])):T("",!0),n("h3",Lh,h(e.title),1),e.message?(u(),f("p",Nh,h(e.message),1)):T("",!0),n("div",Oh,[e.cancelText?(u(),f("button",{key:0,class:"btn btn-outline",onClick:r},h(e.cancelText),1)):T("",!0),n("button",{class:Te(["btn",l.value]),onClick:i},h(e.confirmText),3)])],2)])):T("",!0)]),_:1})]))}}),Sn=We(Fh,[["__scopeId","data-v-ac939d46"]]);function _t(){const e=w([]),t=(r,c="info",p=3e3,d=!0)=>{const v=`${Date.now()}-${Math.random()}`,b={id:v,message:r,type:c,duration:p,closable:d};return e.value.push(b),p>0&&setTimeout(()=>{s(v)},p),v},s=r=>{const c=e.value.findIndex(p=>p.id===r);c>-1&&e.value.splice(c,1)};return{toasts:e,showToast:t,removeToast:s,success:(r,c)=>t(r,"success",c),error:(r,c)=>t(r,"error",c),info:(r,c)=>t(r,"info",c),warning:(r,c)=>t(r,"warning",c)}}const Vh={class:"toast-content"},Bh={class:"toast-message"},jh=["onClick"],qh=ze({__name:"Toast",props:{toasts:{}},emits:["remove"],setup(e,{emit:t}){const s=t,o=l=>{const i={success:"mdi:check-circle",error:"mdi:alert-circle",info:"mdi:information",warning:"mdi:alert"};return i[l]||i.info},a=l=>{s("remove",l)};return(l,i)=>(u(),Ne(Ot,{to:"body"},[m(uu,{name:"toast",tag:"div",class:"toast-container"},{default:lt(()=>[(u(!0),f(ye,null,Ee(e.toasts,r=>(u(),f("div",{key:r.id,class:Te(["toast",`toast-${r.type}`])},[n("div",Vh,[m(k,{icon:o(r.type),class:"toast-icon"},null,8,["icon"]),n("span",Bh,h(r.message),1)]),r.closable?(u(),f("button",{key:0,class:"toast-close",onClick:c=>a(r.id)},[m(k,{icon:"mdi:close"})],8,jh)):T("",!0)],2))),128))]),_:1})]))}}),Yt=We(qh,[["__scopeId","data-v-8adff0c8"]]),Hh={class:"setup-wizard"},zh={class:"wizard-card"},Wh={class:"steps-indicator"},Kh={key:0,class:"wizard-content step-1"},Gh={class:"setting-group"},Qh={class:"setting-label"},Jh={class:"path-input-group"},Xh={key:0,class:"setting-error"},Zh={class:"quick-options"},Yh=["onClick"],eg={key:1,class:"wizard-content step-2"},tg={class:"setting-group"},sg={class:"setting-label"},ng={class:"wizard-actions"},og=["disabled"],ag=ze({__name:"SetupWizard",emits:["complete"],setup(e,{emit:t}){const s=t,o=w(1),a=w(""),l=w(""),i=w(3),r=w(!0),c=w(!0),{visible:p,config:d,show:v,handleConfirm:b,handleCancel:_}=gs(),{toasts:y,error:S,removeToast:C}=_t(),I=ge(()=>a.value.trim().length>0&&!l.value);nt(()=>{setTimeout(()=>{c.value=!1},100)});const x=[{label:"Downloads",value:"/Users/用户/Downloads/Hayaku/",icon:"mdi:folder-download"},{label:"Desktop",value:"/Users/用户/Desktop/Hayaku/",icon:"mdi:desktop-classic"},{label:"自定义",value:"",icon:"mdi:folder-cog"}],E=()=>{if(l.value="",!!a.value.trim()){if(a.value.includes("~")){l.value="路径不能包含 ~ 符号,请使用完整路径(例如:/Users/你的用户名/Downloads/Hayaku/)";return}if(!a.value.startsWith("/")){l.value="路径必须是绝对路径,以 / 开头";return}a.value.endsWith("/")||(l.value="路径必须以 / 结尾")}},F=async()=>{await v({title:"路径格式说明",message:"请输入完整的绝对路径(不能使用 ~ 符号),例如:/Users/你的用户名/Downloads/Hayaku/。注意:必须以 / 开头并以 / 结尾",type:"info",confirmText:"我知道了",cancelText:""})},W=()=>{b()},G=()=>{_()},re=async()=>{if(o.value<2&&a.value&&!l.value)try{const O=await Y.validatePath(a.value);if(!O.exists){l.value="目录不存在,请选择有效的目录";return}if(!O.isDirectory){l.value="所选路径不是目录";return}o.value++}catch(O){console.error("验证路径失败:",O),l.value="无法验证目录是否存在"}},D=()=>{o.value>1&&o.value--},U=async()=>{try{await Y.updateSettings({download_path:a.value,concurrent_downloads:i.value.toString(),auto_check_update:r.value?"true":"false"}),s("complete")}catch(O){console.error("保存配置失败:",O),S("保存配置失败,请重试",4e3)}};return(O,$)=>(u(),f("div",Hh,[n("div",{class:Te(["white-overlay",{"fade-out":!c.value}])},null,2),n("div",{class:Te(["starfield-layer",{visible:!c.value}])},null,2),n("div",{class:Te(["glass-blur-layer",{visible:!c.value}])},null,2),$[15]||($[15]=ea('<div class="wizard-background" data-v-e30f1f17><div class="gradient-orb orb-1" data-v-e30f1f17></div><div class="gradient-orb orb-2" data-v-e30f1f17></div><div class="gradient-orb orb-3" data-v-e30f1f17></div><div class="gradient-orb orb-4" data-v-e30f1f17></div><div class="gradient-orb orb-5" data-v-e30f1f17></div><div class="gradient-orb orb-6" data-v-e30f1f17></div><div class="gradient-orb orb-7" data-v-e30f1f17></div><div class="gradient-orb orb-8" data-v-e30f1f17></div><div class="gradient-orb orb-9" data-v-e30f1f17></div><div class="gradient-orb orb-10" data-v-e30f1f17></div><div class="gradient-orb orb-11" data-v-e30f1f17></div><div class="gradient-orb orb-12" data-v-e30f1f17></div><div class="gradient-orb orb-13" data-v-e30f1f17></div><div class="gradient-orb orb-14" data-v-e30f1f17></div><div class="gradient-orb orb-15" data-v-e30f1f17></div></div>',1)),n("div",zh,[$[14]||($[14]=n("div",{class:"wizard-header"},[n("h1",{class:"wizard-title"},"欢迎使用"),n("p",{class:"wizard-subtitle"},"让我们先进行简单的配置")],-1)),n("div",Wh,[n("div",{class:Te(["step",{active:o.value===1}])},[...$[2]||($[2]=[n("div",{class:"step-circle"},"1",-1),n("span",null,"下载路径",-1)])],2),$[4]||($[4]=n("div",{class:"step-line"},null,-1)),n("div",{class:Te(["step",{active:o.value===2}])},[...$[3]||($[3]=[n("div",{class:"step-circle"},"2",-1),n("span",null,"偏好设置",-1)])],2)]),o.value===1?(u(),f("div",Kh,[n("div",Gh,[n("label",Qh,[m(k,{icon:"mdi:folder-download"}),$[5]||($[5]=$e(" 输入默认下载位置 ",-1))]),n("div",Jh,[Ve(n("input",{ref:"pathInputRef","onUpdate:modelValue":$[0]||($[0]=R=>a.value=R),type:"text",class:"path-input",placeholder:"/Users/你的用户名/Downloads/Hayaku/",onInput:E},null,544),[[Ke,a.value]]),n("button",{class:"browse-btn",onClick:F},[m(k,{icon:"mdi:help-circle"}),$[6]||($[6]=$e(" 帮助 ",-1))])]),$[7]||($[7]=n("p",{class:"setting-hint"},"请输入完整的绝对路径,不能使用 ~ 符号",-1)),l.value?(u(),f("p",Xh,h(l.value),1)):T("",!0)]),n("div",Zh,[$[8]||($[8]=n("p",{class:"quick-label"},"快速选择:",-1)),(u(),f(ye,null,Ee(x,R=>n("button",{key:R.value,class:"quick-option",onClick:M=>{a.value=R.value,E()}},[m(k,{icon:R.icon},null,8,["icon"]),$e(" "+h(R.label),1)],8,Yh)),64))])])):o.value===2?(u(),f("div",eg,[n("div",tg,[n("label",sg,[m(k,{icon:"mdi:download-multiple"}),$[9]||($[9]=$e(" 最大并发下载数 ",-1))]),Ve(n("select",{"onUpdate:modelValue":$[1]||($[1]=R=>i.value=R),class:"setting-select"},[...$[10]||($[10]=[n("option",{value:1},"1个(较慢但稳定)",-1),n("option",{value:3},"3个(推荐)",-1),n("option",{value:5},"5个(快速)",-1)])],512),[[Xn,i.value]])])])):T("",!0),n("div",ng,[o.value>1?(u(),f("button",{key:0,class:"btn btn-secondary",onClick:D},[m(k,{icon:"mdi:arrow-left"}),$[11]||($[11]=$e(" 上一步 ",-1))])):T("",!0),o.value<2?(u(),f("button",{key:1,class:"btn btn-primary",onClick:re,disabled:!I.value},[$[12]||($[12]=$e(" 下一步 ",-1)),m(k,{icon:"mdi:arrow-right"})],8,og)):(u(),f("button",{key:2,class:"btn btn-primary btn-finish",onClick:U},[m(k,{icon:"mdi:check"}),$[13]||($[13]=$e(" 完成设置 ",-1))]))])]),m(Sn,{visible:se(p),title:se(d).title,message:se(d).message,type:se(d).type,confirmText:se(d).confirmText,cancelText:se(d).cancelText,onConfirm:W,onCancel:G},null,8,["visible","title","message","type","confirmText","cancelText"]),m(Yt,{toasts:se(y),onRemove:se(C)},null,8,["toasts","onRemove"])]))}}),lg=We(ag,[["__scopeId","data-v-e30f1f17"]]),ig={class:"error-card"},rg={class:"error-icon-container"},cg={key:0,class:"error-details"},ug={class:"detail-item"},dg={class:"detail-value"},fg={key:0,class:"detail-item detail-status"},pg={class:"tech-details"},vg={key:0,class:"tech-content"},mg={class:"tech-item"},hg={class:"tech-value"},gg={class:"tech-item"},yg={class:"tech-value"},bg={class:"tech-item"},_g={class:"tech-value"},wg=ze({__name:"ErrorPage",props:{errorMessage:{},errorCode:{},requestUrl:{},statusCode:{}},emits:["retry"],setup(e,{emit:t}){const{isDark:s}=Gu(),o=t,a=w(!1),l=()=>{o("retry")},i=r=>r&&r>=500?"status-5xx":"";return(r,c)=>(u(),f("div",{class:Te(["error-page",{"light-theme":!se(s)}])},[c[9]||(c[9]=ea('<div class="background-layer" data-v-97516c7f><div class="gradient-orb orb-1" data-v-97516c7f></div><div class="gradient-orb orb-2" data-v-97516c7f></div><div class="gradient-orb orb-3" data-v-97516c7f></div><div class="gradient-orb orb-4" data-v-97516c7f></div><div class="gradient-orb orb-5" data-v-97516c7f></div><div class="gradient-orb orb-6" data-v-97516c7f></div></div><div class="blur-layer" data-v-97516c7f></div>',2)),n("div",ig,[n("div",rg,[m(k,{icon:"mdi:alert-circle",class:"error-icon"})]),c[7]||(c[7]=n("h1",{class:"error-title"},"无法连接到服务",-1)),c[8]||(c[8]=n("p",{class:"error-description"},"无法与后端服务建立连接,请确保服务已启动",-1)),e.errorMessage?(u(),f("div",cg,[n("div",ug,[c[1]||(c[1]=n("span",{class:"detail-label"},"错误信息:",-1)),n("span",dg,h(e.errorMessage),1)]),e.statusCode?(u(),f("div",fg,[c[2]||(c[2]=n("span",{class:"detail-label"},"HTTP 状态:",-1)),n("span",{class:Te(["detail-value status-badge",i(e.statusCode)])},h(e.statusCode),3)])):T("",!0)])):T("",!0),n("button",{class:"retry-button",onClick:l},[m(k,{icon:"mdi:refresh",class:"retry-icon"}),c[3]||(c[3]=$e(" 重试连接 ",-1))]),n("div",pg,[n("button",{class:"tech-toggle",onClick:c[0]||(c[0]=p=>a.value=!a.value)},[m(k,{icon:a.value?"mdi:chevron-up":"mdi:chevron-down",class:"toggle-icon"},null,8,["icon"]),$e(" "+h(a.value?"隐藏":"显示")+"技术细节 ",1)]),a.value?(u(),f("div",vg,[n("div",mg,[c[4]||(c[4]=n("span",{class:"tech-label"},"错误代码:",-1)),n("code",hg,h(e.errorCode||"N/A"),1)]),n("div",gg,[c[5]||(c[5]=n("span",{class:"tech-label"},"请求地址:",-1)),n("code",yg,h(e.requestUrl||"N/A"),1)]),n("div",bg,[c[6]||(c[6]=n("span",{class:"tech-label"},"状态码:",-1)),n("code",_g,h(e.statusCode||"N/A"),1)])])):T("",!0)])])],2))}}),kg=We(wg,[["__scopeId","data-v-97516c7f"]]),$g={class:"brand-mini"},Cg={class:"mini-icon morphing-logo",viewBox:"0 0 134 78",xmlns:"http://www.w3.org/2000/svg"},Ig={class:"text-morph-container"},Sg=ze({__name:"GpuBadge",setup(e){const t=["nvidia","amd","intel"],s=w(!1),o=w(!1),a=w(0),l=ge(()=>t[Math.min(a.value,t.length-1)]);return nt(()=>{s.value=!0,setTimeout(()=>{a.value=0},0),setTimeout(()=>{a.value=1},3e3),setTimeout(()=>{a.value=2},6e3),setTimeout(()=>{o.value=!0,setTimeout(()=>{s.value=!1},1e3)},9e3)}),(i,r)=>s.value?(u(),f("div",{key:0,class:Te(["gpu-badge",{visible:!o.value,fading:o.value}])},[n("div",{class:Te(["gpu-badge-content",l.value])},[n("div",$g,[(u(),f("svg",Cg,[n("g",{class:Te(["logo-group nvidia-group",{active:l.value==="nvidia"}])},[...r[0]||(r[0]=[ea('<path class="morph-path" d="M0 0 C12.54 0 25.08 0 38 0 C38 13.2 38 26.4 38 40 C25.46 40 12.92 40 0 40 C0 38.68 0 37.36 0 36 C1.06476562 35.85304687 2.12953125 35.70609375 3.2265625 35.5546875 C13.3120975 34.03853081 21.82451691 31.49322389 31 27 C31 26.01 31 25.02 31 24 C27.46874936 23.06964139 25.69973057 22.63277298 22.40234375 24.36328125 C21.58894531 25.00652344 20.77554688 25.64976563 19.9375 26.3125 C14.90363622 30.23302898 11.16302084 32.29768056 4.6875 32.125 C3.80449219 32.10695312 2.92148437 32.08890625 2.01171875 32.0703125 C1.34785156 32.04710937 0.68398438 32.02390625 0 32 C0 31.01 0 30.02 0 29 C0.61746094 28.92523438 1.23492188 28.85046875 1.87109375 28.7734375 C10.09930732 27.49599795 16.00282149 24.36268808 21.5625 18.125 C22.036875 17.42375 22.51125 16.7225 23 16 C16.03283063 8.89660106 9.55458904 6.8667936 0 5 C0 3.35 0 1.7 0 0 Z" transform="translate(29,8)" data-v-730d2ac5></path><path class="morph-path" d="M0 0 C0 0.66 0 1.32 0 2 C0.825 1.896875 1.65 1.79375 2.5 1.6875 C7.27727816 2.11404269 10.15086437 4.29165297 14 7 C14.99 7.66 15.98 8.32 17 9 C16.43997584 12.53659092 15.32225676 13.95559692 12.5625 16.1875 C11.94503906 16.69667969 11.32757813 17.20585937 10.69140625 17.73046875 C7.14616093 20.39144965 4.36286967 20.08079388 0 20 C0 16.37 0 12.74 0 9 C5 11 5 11 6 13 C7.32 12.67 8.64 12.34 10 12 C10 11.01 10 10.02 10 9 C6.73454239 7.11608215 3.71888239 6.50712033 0 6 C0 5.01 0 4.02 0 3 C-5.4783585 4.13345348 -9.63973355 5.27782133 -14 9 C-15.33333333 11.33333333 -15.33333333 11.33333333 -15 14 C-12.06092106 19.53903338 -8.56258889 23.03298533 -2.6875 25.25 C-1.800625 25.4975 -0.91375 25.745 0 26 C0 26.99 0 27.98 0 29 C-5.48444452 29.84376069 -8.5206825 27.85606651 -12.81640625 24.77734375 C-17.94614183 20.60197758 -21.40291563 16.54804593 -23 10 C-16.2722326 4.50046262 -9.11114104 -0.934476 0 0 Z" transform="translate(29,14)" data-v-730d2ac5></path><path class="morph-path" d="M0 0 C0 0.99 0 1.98 0 3 C0.86625 2.9175 1.7325 2.835 2.625 2.75 C6.75988007 3.05628741 8.74642697 4.52108722 12 7 C11.01 8.32 10.02 9.64 9 11 C5.6885981 10.42906864 4.24945577 9.45395174 2 7 C1.34 6.67 0.68 6.34 0 6 C0 11.61 0 17.22 0 23 C-6.78988666 21.86835222 -6.78988666 21.86835222 -10.25 18.6875 C-11.24773438 17.79611328 -11.24773438 17.79611328 -12.265625 16.88671875 C-14.74048324 14.19447432 -16.02983263 12.19330518 -15.9375 8.5 C-14.44956331 4.53216883 -11.51205953 2.97552228 -8.0625 0.75 C-5.32037505 -0.24713635 -2.89171193 -0.13144145 0 0 Z" transform="translate(29,17)" data-v-730d2ac5></path><path class="morph-path" d="M0 0 C0.33 0 0.66 0 1 0 C1 1.65 1 3.3 1 5 C1.65226562 5.03738281 2.30453125 5.07476563 2.9765625 5.11328125 C12.74217854 5.84786299 17.93868328 9.45842487 25 16 C20.37191571 22.08312594 15.34160408 26.55279864 8 29 C5.66700175 29.03954234 3.33291811 29.04401732 1 29 C1 28.01 1 27.02 1 26 C1.56847656 25.92523438 2.13695312 25.85046875 2.72265625 25.7734375 C8.80959782 24.73692992 12.94210373 22.74628938 17 18 C17.33 17.01 17.66 16.02 18 15 C17.484375 14.7525 16.96875 14.505 16.4375 14.25 C14.4531691 13.23239441 12.52785489 12.10035577 10.625 10.9375 C7.46522605 9.10169181 4.66706956 8.35776288 1 8 C1 7.34 1 6.68 1 6 C-0.32 5.67 -1.64 5.34 -3 5 C-2.01 5 -1.02 5 0 5 C0 3.35 0 1.7 0 0 Z" transform="translate(28,8)" data-v-730d2ac5></path><path class="morph-path" d="M0 0 C2.8125 0.9375 2.8125 0.9375 4.8125 3.9375 C-4.1337481 10.13105638 -14.50909388 14.14654541 -25.5 14 C-26.38300781 13.99097656 -27.26601563 13.98195313 -28.17578125 13.97265625 C-28.83964844 13.96105469 -29.50351562 13.94945312 -30.1875 13.9375 C-29.5275 13.6075 -28.8675 13.2775 -28.1875 12.9375 C-28.1875 11.9475 -28.1875 10.9575 -28.1875 9.9375 C-27.58164062 9.92332031 -26.97578125 9.90914062 -26.3515625 9.89453125 C-18.20738915 9.43093984 -11.64529404 6.92377667 -5.4375 1.5625 C-3.1875 -0.0625 -3.1875 -0.0625 0 0 Z" transform="translate(57.1875,30.0625)" data-v-730d2ac5></path><path class="morph-path" d="M0 0 C0 0.99 0 1.98 0 3 C-0.71027344 3.25394531 -1.42054687 3.50789063 -2.15234375 3.76953125 C-3.53099609 4.28580078 -3.53099609 4.28580078 -4.9375 4.8125 C-5.85402344 5.14894531 -6.77054688 5.48539063 -7.71484375 5.83203125 C-10.3340424 6.83409094 -10.3340424 6.83409094 -11 10 C-8.26260237 15.36073703 -5.19932107 17.40033946 0 20 C0 20.99 0 21.98 0 23 C-5.56450647 22.86088734 -8.30281329 20.42713774 -12.265625 16.88671875 C-14.74048324 14.19447432 -16.02983263 12.19330518 -15.9375 8.5 C-14.44956331 4.53216883 -11.51205953 2.97552228 -8.0625 0.75 C-5.32037505 -0.24713635 -2.89171193 -0.13144145 0 0 Z" transform="translate(29,17)" data-v-730d2ac5></path><path class="morph-path" d="M0 0 C1.32 0 2.64 0 4 0 C4 3.63 4 7.26 4 11 C0.23312136 9.11656068 -0.79421646 8.30867531 -3 5 C-1.125 1.125 -1.125 1.125 0 0 Z" transform="translate(25,23)" data-v-730d2ac5></path><path class="morph-path" d="M0 0 C5.29441695 -0.50423019 7.81413519 0.81076967 12 4 C11.01 5.32 10.02 6.64 9 8 C5.6885981 7.42906864 4.24945577 6.45395174 2 4 C1.34 3.67 0.68 3.34 0 3 C0 2.01 0 1.02 0 0 Z" transform="translate(29,20)" data-v-730d2ac5></path>',8)])],2),n("g",{class:Te(["logo-group amd-group",{active:l.value==="amd"}])},[...r[1]||(r[1]=[n("path",{class:"morph-path",d:"M0 0 C16.83 0 33.66 0 51 0 C51 16.83 51 33.66 51 51 C48.69 49.02 46.38 47.04 44 45 C43.27417725 44.44562256 42.54835449 43.89124512 41.80053711 43.32006836 C38.81899562 40.84913766 37.20846555 39.06230495 36.44970703 35.19580078 C36.31170153 31.95595732 36.38764439 28.80021093 36.5625 25.5625 C36.59408203 24.44939453 36.62566406 23.33628906 36.65820312 22.18945312 C36.74029762 19.45687928 36.85504989 16.72984059 37 14 C36.01157104 14.10211792 36.01157104 14.10211792 35.00317383 14.20629883 C14.83637543 16.01467235 14.83637543 16.01467235 8.51171875 11.140625 C5.23950088 8.05852675 2.52477592 4.71319584 0 1 C0 0.67 0 0.34 0 0 Z",transform:"translate(9,12)"},null,-1),n("path",{class:"morph-path",d:"M0 0 C0 6.6 0 13.2 0 20 C6.6 20 13.2 20 20 20 C18.02 22.31 16.04 24.62 14 27 C13.42822021 27.72582275 12.85644043 28.45164551 12.26733398 29.19946289 C9.88914075 31.98841686 8.12555493 33.75449963 4.47705078 34.55029297 C1.63912549 34.68763628 -1.10220242 34.61385822 -3.9375 34.4375 C-4.90751953 34.40591797 -5.87753906 34.37433594 -6.87695312 34.34179688 C-9.25449905 34.25981253 -11.62561699 34.14518805 -14 34 C-16.06963753 16.73016067 -16.06963753 16.73016067 -12.74023438 10.72949219 C-10.29011715 7.6376776 -4.19941795 0 0 0 Z",transform:"translate(22,30)"},null,-1)])],2),n("g",{class:Te(["logo-group intel-group",{active:l.value==="intel"}])},[...r[2]||(r[2]=[ea('<path class="morph-path" d="M0 0 C4.66018963 1.7027616 7.47755931 3.70250846 10 8 C10.33 10.97 10.66 13.94 11 17 C0.605 17.495 0.605 17.495 -10 18 C-7.44764651 21.22333274 -7.44764651 21.22333274 -4.80859375 21.109375 C-4.02613281 20.99078125 -3.24367188 20.8721875 -2.4375 20.75 C-1.65246094 20.64171875 -0.86742188 20.5334375 -0.05859375 20.421875 C2.05183551 20.08180814 2.05183551 20.08180814 4 19 C5.32 19.99 6.64 20.98 8 22 C7.05708604 24.35728489 6.4290911 25.7267671 4.2578125 27.109375 C-0.02942315 28.8005337 -4.47792027 28.5242991 -9 28 C-12.85432136 26.21049365 -14.49773376 24.73665715 -16.875 21.25 C-18.2388688 17.30993459 -18.73319703 14.11908446 -18 10 C-14.17920383 2.35840766 -8.43449648 -1.38325742 0 0 Z" transform="translate(91,28)" data-v-730d2ac5></path><path class="morph-path" d="M0 0 C2.31 0 4.62 0 7 0 C7.33 0.99 7.66 1.98 8 3 C8.515625 2.505 9.03125 2.01 9.5625 1.5 C12.92584256 -0.56974927 15.10277407 -0.4031613 19 0 C22.70339505 1.28194444 24.48363039 2.22240812 26.66015625 5.5 C28.41579632 10.08616181 28.33015601 14.01738 28.1875 18.875 C28.16719727 20.19371094 28.16719727 20.19371094 28.14648438 21.5390625 C28.11136623 23.69297552 28.05756694 25.84657004 28 28 C25.36 28 22.72 28 20 28 C19.98541748 27.43490723 19.97083496 26.86981445 19.95581055 26.28759766 C19.88143942 23.73269981 19.78474758 21.17912502 19.6875 18.625 C19.66494141 17.73554687 19.64238281 16.84609375 19.61914062 15.9296875 C19.5659668 14.65351562 19.5659668 14.65351562 19.51171875 13.3515625 C19.48553467 12.56604004 19.45935059 11.78051758 19.43237305 10.97119141 C19.15110403 8.59959844 19.15110403 8.59959844 16 7 C12.92334973 7.08221709 12.92334973 7.08221709 10 8 C8.0243438 10.96348429 7.73623141 11.68020373 7.5859375 15.01171875 C7.54726563 15.76904297 7.50859375 16.52636719 7.46875 17.30664062 C7.4378125 18.09232422 7.406875 18.87800781 7.375 19.6875 C7.33632813 20.48478516 7.29765625 21.28207031 7.2578125 22.10351562 C7.16367506 24.06863475 7.08075368 26.0342854 7 28 C4.69 28 2.38 28 0 28 C0 18.76 0 9.52 0 0 Z" transform="translate(27,28)" data-v-730d2ac5></path><path class="morph-path" d="M0 0 C2.64 0 5.28 0 8 0 C8 3.3 8 6.6 8 10 C9.65 10 11.3 10 13 10 C13 12.31 13 14.62 13 17 C11.35 17 9.7 17 8 17 C8.33 21.29 8.66 25.58 9 30 C10.32 30.33 11.64 30.66 13 31 C13 33.31 13 35.62 13 38 C8.56356484 38.43494462 6.67136622 38.54001196 3.125 35.6875 C-0.20289126 31.47869634 -0.11969945 28.36876926 -0.09765625 23.14453125 C-0.0962413 22.48289474 -0.09482635 21.82125824 -0.09336853 21.13957214 C-0.08777996 19.03050172 -0.07522965 16.92153823 -0.0625 14.8125 C-0.05748352 13.38086091 -0.05292087 11.94922015 -0.04882812 10.51757812 C-0.0378143 7.01168412 -0.02055755 3.5058525 0 0 Z" transform="translate(58,18)" data-v-730d2ac5></path><path class="morph-path" d="M0 0 C2.64 0 5.28 0 8 0 C8 13.2 8 26.4 8 40 C5.36 40 2.72 40 0 40 C0 26.8 0 13.6 0 0 Z" transform="translate(105,16)" data-v-730d2ac5></path><path class="morph-path" d="M0 0 C2.64 0 5.28 0 8 0 C8 9.24 8 18.48 8 28 C5.36 28 2.72 28 0 28 C0 18.76 0 9.52 0 0 Z" transform="translate(15,28)" data-v-730d2ac5></path><path class="morph-path" d="M0 0 C3.88095252 0.45658265 5.45400707 1.64150707 8.1875 4.375 C8.1875 5.035 8.1875 5.695 8.1875 6.375 C3.2375 6.375 -1.7125 6.375 -6.8125 6.375 C-3.88392857 0.51785714 -3.88392857 0.51785714 0 0 Z" transform="translate(86.8125,33.625)" data-v-730d2ac5></path><path class="morph-path" d="M0 0 C2.64 0 5.28 0 8 0 C8 2.64 8 5.28 8 8 C5.36 8 2.72 8 0 8 C0 5.36 0 2.72 0 0 Z" transform="translate(15,16)" data-v-730d2ac5></path><path class="morph-path" d="M0 0 C0.99 0.33 1.98 0.66 3 1 C3.33 1.99 3.66 2.98 4 4 C3.67 4.66 3.34 5.32 3 6 C1.35 5.67 -0.3 5.34 -2 5 C-2 3.68 -2 2.36 -2 1 C-1.34 0.67 -0.68 0.34 0 0 Z" transform="translate(118,50)" data-v-730d2ac5></path>',8)])],2)])),n("div",Ig,[n("span",{class:Te(["morph-text",{active:l.value==="nvidia"}])},[...r[3]||(r[3]=[$e(" NVIDIA ",-1),n("span",{class:"sub-brand-text"},"RTX",-1)])],2),n("span",{class:Te(["morph-text",{active:l.value==="amd"}])},[...r[4]||(r[4]=[$e(" AMD ",-1),n("span",{class:"sub-brand-text"},"Radeon",-1)])],2),n("span",{class:Te(["morph-text",{active:l.value==="intel"}])},[...r[5]||(r[5]=[$e(" Intel ",-1),n("span",{class:"sub-brand-text"},"CORE x Arc",-1)])],2)])])],2)],2)):T("",!0)}}),xg=We(Sg,[["__scopeId","data-v-730d2ac5"]]),Ks=w(null),Gs=w(!1),On=w(!1);function Ag(e){if(typeof e=="string"&&(e==="user"||e==="admin"||e==="qiuchenly"))return e;const t={0:"user",1:"admin",2:"qiuchenly"},s=typeof e=="number"?e:parseInt(String(e||0));return t[s]||"user"}function yr(e){return{...e,role:Ag(e.role)}}function Ts(){const e=async()=>{var r;const i=localStorage.getItem("token");if(!i){Ks.value=null,Gs.value=!1;return}try{const p=await Y.getAuthStatus(),d=p.data;d&&p.success===!0?(Ks.value=yr(d),Gs.value=!0):(Ks.value=null,Gs.value=!1,localStorage.removeItem("token"),localStorage.removeItem("refreshToken"))}catch(c){console.error("检查登录状态失败:",c),((r=c.response)==null?void 0:r.status)===401?(Ks.value=null,Gs.value=!1,localStorage.removeItem("token"),localStorage.removeItem("refreshToken")):i||(Ks.value=null,Gs.value=!1)}},t=async i=>{var r,c,p;On.value=!0;try{const d=await Y.login(i);return d.success&&((r=d.data)!=null&&r.user)?(Ks.value=yr(d.data.user),Gs.value=!0,e().catch(()=>{}),{success:!0,message:d.message||"登录成功"}):{success:!1,message:d.message||"登录失败"}}catch(d){return{success:!1,message:((p=(c=d.response)==null?void 0:c.data)==null?void 0:p.message)||d.message||"登录失败"}}finally{On.value=!1}},s=async i=>{var r,c;On.value=!0;try{const p=await Y.register(i);return p.success?(await e(),{success:!0,message:p.message||"注册成功"}):{success:!1,message:p.message||"注册失败"}}catch(p){return{success:!1,message:((c=(r=p.response)==null?void 0:r.data)==null?void 0:c.message)||p.message||"注册失败"}}finally{On.value=!1}},o=async()=>{try{await Y.logout(),await e()}catch(i){console.error("登出失败:",i),await e()}},a=ge(()=>Ks.value),l=ge(()=>Gs.value);return{user:a,isLoggedIn:l,loading:ge(()=>On.value),login:t,register:s,logout:o,checkAuthStatus:e}}const Tg=Object.freeze(Object.defineProperty({__proto__:null,useAuth:Ts},Symbol.toStringTag,{value:"Module"})),Eg={class:"dialog-header"},Rg={class:"header-content"},Ug={class:"header-icon-wrapper"},Pg={class:"dialog-tabs"},Mg={class:"dialog-content"},Dg={class:"form-group"},Lg={class:"form-label"},Ng={class:"input-wrapper"},Og={class:"form-group"},Fg={class:"form-label"},Vg={class:"input-wrapper"},Bg={key:0,class:"error-message"},jg=["disabled"],qg={key:1,class:"loading-spinner"},Hg={class:"form-group"},zg={class:"form-label"},Wg={class:"input-wrapper"},Kg={class:"form-group"},Gg={class:"form-label"},Qg={class:"input-wrapper"},Jg={class:"form-group"},Xg={class:"form-label"},Zg={class:"input-wrapper"},Yg={class:"form-group"},e1={class:"form-label"},t1={class:"input-wrapper"},s1={key:0,class:"error-message"},n1=["disabled"],o1={key:1,class:"loading-spinner"},a1=ze({__name:"LoginDialog",props:{show:{type:Boolean}},emits:["close","success"],setup(e,{emit:t}){const s=e,o=t,{login:a,register:l,loading:i}=Ts(),{success:r}=_t(),c=w("login"),p=w({username:"",password:""}),d=w({username:"",password:"",nickName:"",email:""}),v=w(""),b=w(""),_=()=>{o("close"),v.value="",b.value="",p.value={username:"",password:""},d.value={username:"",password:"",nickName:"",email:""}},y=async()=>{v.value="";const C=await a(p.value);C.success?(r("登录成功",2e3),o("success"),_()):v.value=C.message},S=async()=>{b.value="";const C=await l(d.value);C.success?(r("注册成功",2e3),o("success"),_()):b.value=C.message};return Xe(()=>s.show,C=>{C&&(c.value="login",v.value="",b.value="")}),(C,I)=>(u(),Ne(gt,{name:"dialog-fade"},{default:lt(()=>[e.show?(u(),f("div",{key:0,class:"login-overlay",onClick:Oe(_,["self"])},[n("div",{class:"login-dialog",onClick:I[8]||(I[8]=Oe(()=>{},["stop"]))},[n("div",Eg,[n("div",Rg,[n("div",Ug,[m(k,{icon:"fluent-color:phone-laptop-16",class:"header-icon"})]),I[9]||(I[9]=n("h2",{class:"dialog-title"},"登录 / 注册",-1))]),n("button",{onClick:_,class:"close-button","aria-label":"关闭"},[m(k,{icon:"fluent-color:dismiss-circle-24",class:"close-icon"})])]),n("div",Pg,[n("button",{class:Te(["tab-button",{active:c.value==="login"}]),onClick:I[0]||(I[0]=x=>c.value="login")},[m(k,{icon:"fluent-emoji-flat:backhand-index-pointing-right",class:"tab-icon"}),I[10]||(I[10]=n("span",null,"登录",-1))],2),n("button",{class:Te(["tab-button",{active:c.value==="register"}]),onClick:I[1]||(I[1]=x=>c.value="register")},[m(k,{icon:"fluent-color:person-add-24",class:"tab-icon"}),I[11]||(I[11]=n("span",null,"注册",-1))],2)]),n("div",Mg,[c.value==="login"?(u(),f("form",{key:0,onSubmit:Oe(y,["prevent"]),class:"login-form"},[n("div",Dg,[n("label",Lg,[m(k,{icon:"fluent-color:person-24",class:"label-icon"}),I[12]||(I[12]=n("span",null,"用户名",-1))]),n("div",Ng,[m(k,{icon:"fluent-color:person-20",class:"input-icon"}),Ve(n("input",{"onUpdate:modelValue":I[2]||(I[2]=x=>p.value.username=x),type:"text",class:"form-input",placeholder:"请输入用户名",required:"",autocomplete:"username"},null,512),[[Ke,p.value.username]])])]),n("div",Og,[n("label",Fg,[m(k,{icon:"fluent-color:lock-closed-24",class:"label-icon"}),I[13]||(I[13]=n("span",null,"密码",-1))]),n("div",Vg,[m(k,{icon:"fluent-color:lock-closed-20",class:"input-icon"}),Ve(n("input",{"onUpdate:modelValue":I[3]||(I[3]=x=>p.value.password=x),type:"password",class:"form-input",placeholder:"请输入密码",required:"",autocomplete:"current-password"},null,512),[[Ke,p.value.password]])])]),v.value?(u(),f("div",Bg,[m(k,{icon:"fluent-color:error-circle-24-filled",class:"error-icon"}),n("span",null,h(v.value),1)])):T("",!0),n("button",{type:"submit",class:"btn btn-primary",disabled:se(i)},[se(i)?(u(),f("div",qg)):(u(),Ne(k,{key:0,icon:"fluent-emoji-flat:backhand-index-pointing-right",class:"btn-icon"})),n("span",null,h(se(i)?"登录中...":"登录"),1)],8,jg)],32)):T("",!0),c.value==="register"?(u(),f("form",{key:1,onSubmit:Oe(S,["prevent"]),class:"login-form"},[n("div",Hg,[n("label",zg,[m(k,{icon:"fluent-color:person-24",class:"label-icon"}),I[14]||(I[14]=n("span",null,"用户名",-1))]),n("div",Wg,[m(k,{icon:"fluent-color:person-20",class:"input-icon"}),Ve(n("input",{"onUpdate:modelValue":I[4]||(I[4]=x=>d.value.username=x),type:"text",class:"form-input",placeholder:"请输入用户名",required:"",autocomplete:"username"},null,512),[[Ke,d.value.username]])])]),n("div",Kg,[n("label",Gg,[m(k,{icon:"fluent-color:lock-closed-24",class:"label-icon"}),I[15]||(I[15]=n("span",null,"密码",-1))]),n("div",Qg,[m(k,{icon:"fluent-color:lock-closed-20",class:"input-icon"}),Ve(n("input",{"onUpdate:modelValue":I[5]||(I[5]=x=>d.value.password=x),type:"password",class:"form-input",placeholder:"请输入密码",required:"",autocomplete:"new-password"},null,512),[[Ke,d.value.password]])])]),n("div",Jg,[n("label",Xg,[m(k,{icon:"fluent-color:certificate-16",class:"label-icon"}),I[16]||(I[16]=n("span",null,"昵称(可选)",-1))]),n("div",Zg,[m(k,{icon:"fluent-color:certificate-16",class:"input-icon"}),Ve(n("input",{"onUpdate:modelValue":I[6]||(I[6]=x=>d.value.nickName=x),type:"text",class:"form-input",placeholder:"请输入昵称",autocomplete:"nickname"},null,512),[[Ke,d.value.nickName]])])]),n("div",Yg,[n("label",e1,[m(k,{icon:"fluent-color:mail-24",class:"label-icon"}),I[17]||(I[17]=n("span",null,"邮箱(可选)",-1))]),n("div",t1,[m(k,{icon:"fluent-color:mail-20",class:"input-icon"}),Ve(n("input",{"onUpdate:modelValue":I[7]||(I[7]=x=>d.value.email=x),type:"email",class:"form-input",placeholder:"请输入邮箱",autocomplete:"email"},null,512),[[Ke,d.value.email]])])]),b.value?(u(),f("div",s1,[m(k,{icon:"fluent-color:error-circle-24-filled",class:"error-icon"}),n("span",null,h(b.value),1)])):T("",!0),n("button",{type:"submit",class:"btn btn-primary",disabled:se(i)},[se(i)?(u(),f("div",o1)):(u(),Ne(k,{key:0,icon:"fluent-color:person-add-24",class:"btn-icon"})),n("span",null,h(se(i)?"注册中...":"注册"),1)],8,n1)],32)):T("",!0)])])])):T("",!0)]),_:1}))}}),Qu=We(a1,[["__scopeId","data-v-34074855"]]),l1={class:"version-list-container"},i1={key:0,class:"empty"},r1={key:1},c1={class:"version-filters"},u1={class:"versions-list"},d1={class:"version-info"},f1={class:"version-number-wrapper"},p1={key:0,class:"version-tag beta-tag"},v1={key:1,class:"version-tag release-tag"},m1={class:"version-number"},h1={key:0,class:"version-full"},g1={key:0,class:"version-url"},y1=["onClick","disabled"],b1={key:"spinner",class:"spinner-small"},_1=ze({__name:"VersionList",props:{bundleId:{default:""},versions:{default:()=>[]}},setup(e){const t=e,s=ge(()=>t.versions);w(!1),w("");const o=w([]),a=w([]),l=w("all"),{toasts:i,success:r,error:c,removeToast:p}=_t(),d=ge(()=>l.value==="all"?s.value||[]:l.value==="release"?s.value.filter(_=>!_.beta):s.value.filter(_=>_.beta)),v=_=>{try{const S=new URL(_).pathname,C=S.lastIndexOf("/");if(C!==-1&&C<S.length-1){let I=S.substring(C+1);try{I=decodeURIComponent(I)}catch{console.warn("URL解码失败:",I)}return I}}catch{console.warn("解析URL失败:",_)}return""},b=async(_,y)=>{var S,C;if(!_.url){c("版本URL为空");return}o.value.push(y);try{const I=v(_.url);if((await Y.startDownload(_.url,I||void 0)).taskId){const E=_.beta?`${_.version} (Beta)`:_.version;r(`下载已启动: ${E}`,3e3),o.value=o.value.filter(F=>F!==y),a.value.push(y),setTimeout(()=>{a.value=a.value.filter(F=>F!==y)},2e3)}else throw new Error("下载任务创建失败")}catch(I){console.error("启动下载失败:",I);const x=_.beta?`${_.version} (Beta)`:_.version,E=((C=(S=I.response)==null?void 0:S.data)==null?void 0:C.message)||I.message||"下载启动失败";c(`下载启动失败: ${x} - ${E}`,4e3),setTimeout(()=>{o.value=o.value.filter(F=>F!==y)},300)}};return(_,y)=>(u(),f(ye,null,[n("div",l1,[s.value.length===0?(u(),f("div",i1,[m(k,{icon:"mdi:package-variant",class:"empty-icon"}),y[3]||(y[3]=n("p",null,"暂无可用版本",-1))])):(u(),f("div",r1,[n("div",c1,[n("button",{class:Te(["filter-btn",{active:l.value==="all"}]),onClick:y[0]||(y[0]=S=>l.value="all")}," 全部 ",2),n("button",{class:Te(["filter-btn",{active:l.value==="release"}]),onClick:y[1]||(y[1]=S=>l.value="release")}," 正式版 ",2),n("button",{class:Te(["filter-btn",{active:l.value==="beta"}]),onClick:y[2]||(y[2]=S=>l.value="beta")}," 测试版 ",2)]),n("div",u1,[(u(!0),f(ye,null,Ee(d.value,(S,C)=>(u(),f("div",{key:C,class:Te(["version-item",{downloading:o.value.includes(C)}])},[n("div",d1,[n("div",f1,[S.beta?(u(),f("span",p1,"测试版")):(u(),f("span",v1,"正式版")),n("span",m1,[$e(h(S.version)+" ",1),S.fullVersion?(u(),f("span",h1," ("+h(S.fullVersion)+") ",1)):T("",!0)])]),S.url?(u(),f("span",g1,[m(k,{icon:"mdi:link",class:"url-icon"}),$e(" "+h(S.url),1)])):T("",!0)]),n("button",{class:Te(["btn btn-sm",{"btn-primary":!o.value.includes(C)&&!a.value.includes(C),"btn-downloading":o.value.includes(C),"btn-success-state":a.value.includes(C)}]),onClick:I=>b(S,C),disabled:o.value.includes(C)||a.value.includes(C)},[m(gt,{name:"fade",mode:"out-in"},{default:lt(()=>[!o.value.includes(C)&&!a.value.includes(C)?(u(),Ne(k,{key:"icon-download",icon:"mdi:download",class:"btn-icon"})):o.value.includes(C)?(u(),f("div",b1)):(u(),Ne(k,{key:"icon-success",icon:"mdi:check-circle",class:"btn-icon"}))]),_:2},1024),m(gt,{name:"fade",mode:"out-in"},{default:lt(()=>[(u(),f("span",{key:o.value.includes(C)?"downloading":a.value.includes(C)?"success":"download"},h(o.value.includes(C)?"下载中...":a.value.includes(C)?"已启动":"下载"),1))]),_:2},1024)],10,y1)],2))),128))])]))]),m(Yt,{toasts:se(i),onRemove:se(p)},null,8,["toasts","onRemove"])],64))}}),Ju=We(_1,[["__scopeId","data-v-40d6ac3b"]]),w1={class:"dialog-header"},k1={class:"header-content"},$1={class:"app-info"},C1={class:"app-icon-wrapper"},I1=["src","alt"],S1={key:1,class:"app-icon-placeholder"},x1={class:"app-details"},A1={class:"app-name"},T1={class:"app-bundle-id"},E1={class:"dialog-content"},R1=ze({__name:"VersionSelectorDialog",props:{visible:{type:Boolean},app:{}},emits:["close"],setup(e,{emit:t}){const s=e,o=t,a=ge(()=>{var r;return(r=s.app)!=null&&r.hasIcon?Y.getAppIconUrl(s.app.bundleId):null}),l=()=>{o("close")},i=r=>{r.target===r.currentTarget&&l()};return(r,c)=>(u(),Ne(Ot,{to:"body"},[m(gt,{name:"dialog-fade"},{default:lt(()=>{var p,d;return[e.visible&&e.app?(u(),f("div",{key:0,class:"version-dialog-overlay",onClick:i},[n("div",{class:"version-dialog-container",onClick:c[0]||(c[0]=Oe(()=>{},["stop"]))},[n("div",w1,[n("div",k1,[n("div",$1,[n("div",C1,[a.value?(u(),f("img",{key:0,src:a.value,alt:e.app.name,class:"app-icon"},null,8,I1)):(u(),f("div",S1,h(e.app.name.charAt(0).toUpperCase()),1))]),n("div",x1,[n("h2",A1,h(e.app.name),1),n("p",T1,h(e.app.bundleId),1)])]),n("button",{class:"close-button",onClick:l,"aria-label":"关闭"},[m(k,{icon:"mdi:close"})])])]),n("div",E1,[e.app?(u(),Ne(Ju,{key:0,bundleId:e.app.bundleId,versions:((d=(p=e.app)==null?void 0:p.update)==null?void 0:d.versions)||[]},null,8,["bundleId","versions"])):T("",!0)])])])):T("",!0)]}),_:1})]))}}),U1=We(R1,[["__scopeId","data-v-22d36606"]]),P1={class:"search-box"},M1=["placeholder"],D1={class:"search-actions"},L1=["disabled"],N1={key:0,class:"focus-indicator"},O1={class:"history-content"},F1={key:0,class:"history-section"},V1={class:"history-text"},B1={key:1,class:"history-section"},j1={class:"history-header"},q1=["onClick"],H1={class:"history-text"},z1=["onClick"],W1={key:2,class:"empty-history"},br="search_history",Po=10,K1=ze({__name:"SearchBox",props:{modelValue:{default:""},placeholder:{default:"搜索应用、游戏等"},width:{default:400}},emits:["update:modelValue","search","clear"],setup(e,{emit:t}){const s=e,o=t,a=w(s.modelValue),l=w(!1),i=w(null),r=w([]);let c=null,p=null;const d=ge(()=>l.value&&(a.value.trim()||r.value.length>0)),v=ge(()=>{if(!a.value.trim())return r.value.slice(0,Po);const D=a.value.trim().toLowerCase();return r.value.filter(U=>U.toLowerCase().includes(D)).slice(0,Po)}),b=()=>{try{const D=localStorage.getItem(br);D?r.value=JSON.parse(D):(r.value=["QQ","腾讯QQ","QQ邮箱","微信","QQ音乐","Photoshop","Lightroom","Final Cut Pro","Sketch","Sublime Text"],_())}catch(D){console.error("加载搜索历史失败:",D),r.value=[]}},_=()=>{try{localStorage.setItem(br,JSON.stringify(r.value))}catch(D){console.error("保存搜索历史失败:",D)}},y=D=>{if(!D.trim())return;const U=r.value.indexOf(D);U!==-1&&r.value.splice(U,1),r.value.unshift(D),r.value.length>Po&&(r.value=r.value.slice(0,Po)),_()},S=D=>{r.value.splice(D,1),_()},C=()=>{r.value=[],_()},I=D=>{a.value=D,o("update:modelValue",D),E()};Xe(()=>s.modelValue,D=>{a.value=D});const x=()=>{o("update:modelValue",a.value),c&&clearTimeout(c),c=window.setTimeout(()=>{a.value.trim()&&o("search",a.value.trim())},300)},E=()=>{var D;c&&clearTimeout(c),a.value.trim()&&(y(a.value.trim()),o("search",a.value.trim())),(D=i.value)==null||D.blur()},F=()=>{var D;a.value="",o("update:modelValue",""),o("clear"),(D=i.value)==null||D.focus()},W=()=>{p&&(clearTimeout(p),p=null),l.value=!0},G=()=>{p=window.setTimeout(()=>{l.value=!1},200)},re=()=>{var D;(D=i.value)==null||D.blur()};return nt(()=>{b()}),(D,U)=>(u(),f("div",P1,[n("div",{class:"search-wrapper",style:St({width:typeof s.width=="number"?`${s.width}px`:s.width})},[n("div",{class:Te(["search-container",{"is-focused":l.value}])},[Ve(n("input",{ref_key:"inputRef",ref:i,"onUpdate:modelValue":U[0]||(U[0]=O=>a.value=O),type:"text",class:"search-input",placeholder:e.placeholder,onInput:x,onKeydown:[en(E,["enter"]),en(re,["escape"])],onFocus:W,onBlur:G},null,40,M1),[[Ke,a.value]]),n("div",D1,[a.value?(u(),f("button",{key:0,class:"action-button clear-button",onClick:F,onMousedown:U[1]||(U[1]=Oe(()=>{},["prevent"]))},[m(k,{icon:"mdi:close-circle",class:"action-icon"})],32)):T("",!0),n("button",{class:"action-button search-button",disabled:!a.value.trim(),onClick:E,onMousedown:U[2]||(U[2]=Oe(()=>{},["prevent"]))},[m(k,{icon:"mdi:magnify",class:"action-icon"})],40,L1)])],2),l.value?(u(),f("div",N1)):T("",!0),l.value&&d.value?(u(),f("div",{key:1,class:"history-dropdown",onMousedown:U[6]||(U[6]=Oe(()=>{},["prevent"]))},[n("div",O1,[a.value.trim()?(u(),f("div",F1,[n("div",{class:"history-item suggestion-item",onClick:U[3]||(U[3]=O=>I(a.value.trim()))},[m(k,{icon:"fluent-color:search-sparkle-24",class:"history-icon"}),n("span",V1,h(a.value.trim()),1)])])):T("",!0),r.value.length>0?(u(),f("div",B1,[n("div",j1,[U[7]||(U[7]=n("span",{class:"history-title"},"历史搜索",-1)),n("button",{class:"clear-history-btn",onClick:C,onMousedown:U[4]||(U[4]=Oe(()=>{},["prevent"]))}," 清除 ",32)]),(u(!0),f(ye,null,Ee(v.value,(O,$)=>(u(),f("div",{key:$,class:"history-item",onClick:R=>I(O)},[m(k,{icon:"fluent-color:clock-24",class:"history-icon"}),n("span",H1,h(O),1),n("button",{class:"delete-history-btn",onClick:Oe(R=>S($),["stop"]),onMousedown:U[5]||(U[5]=Oe(()=>{},["prevent"]))},[m(k,{icon:"fluent-color:dismiss-circle-24",class:"delete-icon"})],40,z1)],8,q1))),128))])):T("",!0),!a.value.trim()&&r.value.length===0?(u(),f("div",W1,[m(k,{icon:"fluent-color:history-24",class:"empty-icon"}),U[8]||(U[8]=n("span",{class:"empty-text"},"暂无搜索历史",-1))])):T("",!0)])],32)):T("",!0)],4)]))}}),G1=We(K1,[["__scopeId","data-v-0fed5efb"]]),Q1={class:"sidebar"},J1={key:0,class:"sidebar-group top-group"},X1=["onClick"],Z1={class:"item-content"},Y1={key:1,class:"item-text"},ey={key:0,class:"item-badge"},ty={key:1,class:"sidebar-group bottom-group"},sy=["onClick"],ny={class:"item-content"},oy={key:1,class:"item-text"},ay={key:0,class:"item-badge"},ly=ze({__name:"Sidebar",props:{items:{default:()=>[]},activeItem:{default:""}},emits:["item-click"],setup(e,{emit:t}){const s=e,o=t,a=ge(()=>s.items.filter(r=>!r.group||r.group==="top")),l=ge(()=>s.items.filter(r=>r.group==="bottom")),i=(r,c)=>{o("item-click",r,c)};return(r,c)=>(u(),f("div",Q1,[a.value.length>0?(u(),f("div",J1,[(u(!0),f(ye,null,Ee(a.value,(p,d)=>(u(),f("div",{key:p.id||d,class:Te(["sidebar-item",{active:p.id===e.activeItem}]),onClick:v=>i(p,d)},[c[0]||(c[0]=n("div",{class:"item-indicator"},null,-1)),n("div",Z1,[hn(r.$slots,"item",{item:p,index:d},()=>[p.icon?(u(),Ne(k,{key:0,icon:p.icon,class:"item-icon"},null,8,["icon"])):T("",!0),p.label?(u(),f("span",Y1,h(p.label),1)):T("",!0)]),p.badge&&p.badge>0?(u(),f("span",ey,h(p.badge>99?"99+":p.badge),1)):T("",!0)])],10,X1))),128))])):T("",!0),c[2]||(c[2]=n("div",{class:"sidebar-spacer"},null,-1)),l.value.length>0?(u(),f("div",ty,[(u(!0),f(ye,null,Ee(l.value,(p,d)=>(u(),f("div",{key:p.id||`bottom-${d}`,class:Te(["sidebar-item",{active:p.id===e.activeItem}]),onClick:v=>i(p,a.value.length+d)},[c[1]||(c[1]=n("div",{class:"item-indicator"},null,-1)),n("div",ny,[hn(r.$slots,"item",{item:p,index:a.value.length+d},()=>[p.icon?(u(),Ne(k,{key:0,icon:p.icon,class:"item-icon"},null,8,["icon"])):T("",!0),p.label?(u(),f("span",oy,h(p.label),1)):T("",!0)]),p.badge&&p.badge>0?(u(),f("span",ay,h(p.badge>99?"99+":p.badge),1)):T("",!0)])],10,sy))),128))])):T("",!0)]))}}),iy=We(ly,[["__scopeId","data-v-04e1a9dc"]]),Ja=new Map;async function Xu(e,t){if(!e||e.trim()==="")return"";const s=`avatar-${e}`;if(Ja.has(s))return Ja.get(s);try{const o=await Y.getImage(e,80,200,200);return o&&o.trim()!==""?(Ja.set(s,o),o):""}catch(o){return console.error("获取用户头像图片失败:",o,"avatarId:",e),""}}const ry=["src","alt"],cy={key:1,class:"avatar-placeholder"},uy=ze({__name:"Avatar",props:{avatarId:{default:void 0},userId:{default:void 0},userName:{default:void 0},size:{default:"medium"},width:{default:void 0},height:{default:void 0},onAvatarLoaded:{type:Function,default:void 0}},setup(e){const t=e,s=w(""),o=w("User"),a=w(null),l=ge(()=>{const v={};return t.width&&(v.width=typeof t.width=="number"?`${t.width}px`:t.width,v.minWidth=v.width,v.maxWidth=v.width),t.height&&(v.height=typeof t.height=="number"?`${t.height}px`:t.height,v.minHeight=v.height,v.maxHeight=v.height),v}),i=async()=>{if(t.userName&&(o.value=t.userName),t.avatarId&&t.avatarId.trim()!==""){await r(t.avatarId);return}if(t.userId)try{const v=await Y.getUserInfo(t.userId);if(v&&(o.value=v.nickName||v.username||"User",v.avatar&&v.avatar.trim()!=="")){await r(v.avatar);return}}catch(v){console.error("查询用户信息失败:",v)}s.value=""},r=async v=>{if(!v||v.trim()===""){s.value="";return}try{const b=await Xu(v,o.value);s.value=b}catch(b){console.error("加载头像失败:",b),s.value=""}},c=()=>{s.value=""},p=async()=>{if(!(!t.onAvatarLoaded||!s.value))try{if(s.value.startsWith("blob:")){const y=await(await fetch(s.value)).blob();t.onAvatarLoaded(y);return}const v=await fetch(s.value);if(!v.ok){console.error("获取头像图片失败:",v.statusText);return}const b=await v.blob();t.onAvatarLoaded(b)}catch(v){console.error("转换头像为 blob 失败:",v)}},d=()=>{if(!o.value||o.value==="User")return"U";const v=o.value.charAt(0);return/[\u4e00-\u9fa5]/.test(v)?v:v.toUpperCase()};return Xe(()=>[t.avatarId,t.userId,t.userName],()=>{i()},{immediate:!0}),nt(()=>{i()}),(v,b)=>(u(),f("div",{class:Te(["avatar-wrapper",{small:e.size==="small",medium:e.size==="medium",large:e.size==="large"}]),style:St(l.value)},[s.value&&s.value.trim()!==""?(u(),f("img",{key:0,ref_key:"avatarImageRef",ref:a,src:s.value,alt:o.value||e.userName||"User",class:"avatar-image",onError:c,onLoad:p},null,40,ry)):(u(),f("div",cy,h(d()),1))],6))}}),Et=We(uy,[["__scopeId","data-v-51ee3bf9"]]);/*!
|
||
* vue-router v4.5.1
|
||
* (c) 2025 Eduardo San Martin Morote
|
||
* @license MIT
|
||
*/const rn=typeof document<"u";function Zu(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function dy(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&Zu(e.default)}const ct=Object.assign;function Xa(e,t){const s={};for(const o in t){const a=t[o];s[o]=us(a)?a.map(e):e(a)}return s}const Zn=()=>{},us=Array.isArray,Yu=/#/g,fy=/&/g,py=/\//g,vy=/=/g,my=/\?/g,ed=/\+/g,hy=/%5B/g,gy=/%5D/g,td=/%5E/g,yy=/%60/g,sd=/%7B/g,by=/%7C/g,nd=/%7D/g,_y=/%20/g;function Xl(e){return encodeURI(""+e).replace(by,"|").replace(hy,"[").replace(gy,"]")}function wy(e){return Xl(e).replace(sd,"{").replace(nd,"}").replace(td,"^")}function Cl(e){return Xl(e).replace(ed,"%2B").replace(_y,"+").replace(Yu,"%23").replace(fy,"%26").replace(yy,"`").replace(sd,"{").replace(nd,"}").replace(td,"^")}function ky(e){return Cl(e).replace(vy,"%3D")}function $y(e){return Xl(e).replace(Yu,"%23").replace(my,"%3F")}function Cy(e){return e==null?"":$y(e).replace(py,"%2F")}function uo(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const Iy=/\/$/,Sy=e=>e.replace(Iy,"");function Za(e,t,s="/"){let o,a={},l="",i="";const r=t.indexOf("#");let c=t.indexOf("?");return r<c&&r>=0&&(c=-1),c>-1&&(o=t.slice(0,c),l=t.slice(c+1,r>-1?r:t.length),a=e(l)),r>-1&&(o=o||t.slice(0,r),i=t.slice(r,t.length)),o=Ey(o??t,s),{fullPath:o+(l&&"?")+l+i,path:o,query:a,hash:uo(i)}}function xy(e,t){const s=t.query?e(t.query):"";return t.path+(s&&"?")+s+(t.hash||"")}function _r(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Ay(e,t,s){const o=t.matched.length-1,a=s.matched.length-1;return o>-1&&o===a&&wn(t.matched[o],s.matched[a])&&od(t.params,s.params)&&e(t.query)===e(s.query)&&t.hash===s.hash}function wn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function od(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const s in e)if(!Ty(e[s],t[s]))return!1;return!0}function Ty(e,t){return us(e)?wr(e,t):us(t)?wr(t,e):e===t}function wr(e,t){return us(t)?e.length===t.length&&e.every((s,o)=>s===t[o]):e.length===1&&e[0]===t}function Ey(e,t){if(e.startsWith("/"))return e;if(!e)return t;const s=t.split("/"),o=e.split("/"),a=o[o.length-1];(a===".."||a===".")&&o.push("");let l=s.length-1,i,r;for(i=0;i<o.length;i++)if(r=o[i],r!==".")if(r==="..")l>1&&l--;else break;return s.slice(0,l).join("/")+"/"+o.slice(i).join("/")}const Us={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};var fo;(function(e){e.pop="pop",e.push="push"})(fo||(fo={}));var Yn;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Yn||(Yn={}));function Ry(e){if(!e)if(rn){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Sy(e)}const Uy=/^[^#]+#/;function Py(e,t){return e.replace(Uy,"#")+t}function My(e,t){const s=document.documentElement.getBoundingClientRect(),o=e.getBoundingClientRect();return{behavior:t.behavior,left:o.left-s.left-(t.left||0),top:o.top-s.top-(t.top||0)}}const xa=()=>({left:window.scrollX,top:window.scrollY});function Dy(e){let t;if("el"in e){const s=e.el,o=typeof s=="string"&&s.startsWith("#"),a=typeof s=="string"?o?document.getElementById(s.slice(1)):document.querySelector(s):s;if(!a)return;t=My(a,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function kr(e,t){return(history.state?history.state.position-t:-1)+e}const Il=new Map;function Ly(e,t){Il.set(e,t)}function Ny(e){const t=Il.get(e);return Il.delete(e),t}let Oy=()=>location.protocol+"//"+location.host;function ad(e,t){const{pathname:s,search:o,hash:a}=t,l=e.indexOf("#");if(l>-1){let r=a.includes(e.slice(l))?e.slice(l).length:1,c=a.slice(r);return c[0]!=="/"&&(c="/"+c),_r(c,"")}return _r(s,e)+o+a}function Fy(e,t,s,o){let a=[],l=[],i=null;const r=({state:b})=>{const _=ad(e,location),y=s.value,S=t.value;let C=0;if(b){if(s.value=_,t.value=b,i&&i===y){i=null;return}C=S?b.position-S.position:0}else o(_);a.forEach(I=>{I(s.value,y,{delta:C,type:fo.pop,direction:C?C>0?Yn.forward:Yn.back:Yn.unknown})})};function c(){i=s.value}function p(b){a.push(b);const _=()=>{const y=a.indexOf(b);y>-1&&a.splice(y,1)};return l.push(_),_}function d(){const{history:b}=window;b.state&&b.replaceState(ct({},b.state,{scroll:xa()}),"")}function v(){for(const b of l)b();l=[],window.removeEventListener("popstate",r),window.removeEventListener("beforeunload",d)}return window.addEventListener("popstate",r),window.addEventListener("beforeunload",d,{passive:!0}),{pauseListeners:c,listen:p,destroy:v}}function $r(e,t,s,o=!1,a=!1){return{back:e,current:t,forward:s,replaced:o,position:window.history.length,scroll:a?xa():null}}function Vy(e){const{history:t,location:s}=window,o={value:ad(e,s)},a={value:t.state};a.value||l(o.value,{back:null,current:o.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function l(c,p,d){const v=e.indexOf("#"),b=v>-1?(s.host&&document.querySelector("base")?e:e.slice(v))+c:Oy()+e+c;try{t[d?"replaceState":"pushState"](p,"",b),a.value=p}catch(_){console.error(_),s[d?"replace":"assign"](b)}}function i(c,p){const d=ct({},t.state,$r(a.value.back,c,a.value.forward,!0),p,{position:a.value.position});l(c,d,!0),o.value=c}function r(c,p){const d=ct({},a.value,t.state,{forward:c,scroll:xa()});l(d.current,d,!0);const v=ct({},$r(o.value,c,null),{position:d.position+1},p);l(c,v,!1),o.value=c}return{location:o,state:a,push:r,replace:i}}function By(e){e=Ry(e);const t=Vy(e),s=Fy(e,t.state,t.location,t.replace);function o(l,i=!0){i||s.pauseListeners(),history.go(l)}const a=ct({location:"",base:e,go:o,createHref:Py.bind(null,e)},t,s);return Object.defineProperty(a,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(a,"state",{enumerable:!0,get:()=>t.state.value}),a}function jy(e){return typeof e=="string"||e&&typeof e=="object"}function ld(e){return typeof e=="string"||typeof e=="symbol"}const id=Symbol("");var Cr;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(Cr||(Cr={}));function kn(e,t){return ct(new Error,{type:e,[id]:!0},t)}function _s(e,t){return e instanceof Error&&id in e&&(t==null||!!(e.type&t))}const Ir="[^/]+?",qy={sensitive:!1,strict:!1,start:!0,end:!0},Hy=/[.+*?^${}()[\]/\\]/g;function zy(e,t){const s=ct({},qy,t),o=[];let a=s.start?"^":"";const l=[];for(const p of e){const d=p.length?[]:[90];s.strict&&!p.length&&(a+="/");for(let v=0;v<p.length;v++){const b=p[v];let _=40+(s.sensitive?.25:0);if(b.type===0)v||(a+="/"),a+=b.value.replace(Hy,"\\$&"),_+=40;else if(b.type===1){const{value:y,repeatable:S,optional:C,regexp:I}=b;l.push({name:y,repeatable:S,optional:C});const x=I||Ir;if(x!==Ir){_+=10;try{new RegExp(`(${x})`)}catch(F){throw new Error(`Invalid custom RegExp for param "${y}" (${x}): `+F.message)}}let E=S?`((?:${x})(?:/(?:${x}))*)`:`(${x})`;v||(E=C&&p.length<2?`(?:/${E})`:"/"+E),C&&(E+="?"),a+=E,_+=20,C&&(_+=-8),S&&(_+=-20),x===".*"&&(_+=-50)}d.push(_)}o.push(d)}if(s.strict&&s.end){const p=o.length-1;o[p][o[p].length-1]+=.7000000000000001}s.strict||(a+="/?"),s.end?a+="$":s.strict&&!a.endsWith("/")&&(a+="(?:/|$)");const i=new RegExp(a,s.sensitive?"":"i");function r(p){const d=p.match(i),v={};if(!d)return null;for(let b=1;b<d.length;b++){const _=d[b]||"",y=l[b-1];v[y.name]=_&&y.repeatable?_.split("/"):_}return v}function c(p){let d="",v=!1;for(const b of e){(!v||!d.endsWith("/"))&&(d+="/"),v=!1;for(const _ of b)if(_.type===0)d+=_.value;else if(_.type===1){const{value:y,repeatable:S,optional:C}=_,I=y in p?p[y]:"";if(us(I)&&!S)throw new Error(`Provided param "${y}" is an array but it is not repeatable (* or + modifiers)`);const x=us(I)?I.join("/"):I;if(!x)if(C)b.length<2&&(d.endsWith("/")?d=d.slice(0,-1):v=!0);else throw new Error(`Missing required param "${y}"`);d+=x}}return d||"/"}return{re:i,score:o,keys:l,parse:r,stringify:c}}function Wy(e,t){let s=0;for(;s<e.length&&s<t.length;){const o=t[s]-e[s];if(o)return o;s++}return e.length<t.length?e.length===1&&e[0]===80?-1:1:e.length>t.length?t.length===1&&t[0]===80?1:-1:0}function rd(e,t){let s=0;const o=e.score,a=t.score;for(;s<o.length&&s<a.length;){const l=Wy(o[s],a[s]);if(l)return l;s++}if(Math.abs(a.length-o.length)===1){if(Sr(o))return 1;if(Sr(a))return-1}return a.length-o.length}function Sr(e){const t=e[e.length-1];return e.length>0&&t[t.length-1]<0}const Ky={type:0,value:""},Gy=/[a-zA-Z0-9_]/;function Qy(e){if(!e)return[[]];if(e==="/")return[[Ky]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(_){throw new Error(`ERR (${s})/"${p}": ${_}`)}let s=0,o=s;const a=[];let l;function i(){l&&a.push(l),l=[]}let r=0,c,p="",d="";function v(){p&&(s===0?l.push({type:0,value:p}):s===1||s===2||s===3?(l.length>1&&(c==="*"||c==="+")&&t(`A repeatable param (${p}) must be alone in its segment. eg: '/:ids+.`),l.push({type:1,value:p,regexp:d,repeatable:c==="*"||c==="+",optional:c==="*"||c==="?"})):t("Invalid state to consume buffer"),p="")}function b(){p+=c}for(;r<e.length;){if(c=e[r++],c==="\\"&&s!==2){o=s,s=4;continue}switch(s){case 0:c==="/"?(p&&v(),i()):c===":"?(v(),s=1):b();break;case 4:b(),s=o;break;case 1:c==="("?s=2:Gy.test(c)?b():(v(),s=0,c!=="*"&&c!=="?"&&c!=="+"&&r--);break;case 2:c===")"?d[d.length-1]=="\\"?d=d.slice(0,-1)+c:s=3:d+=c;break;case 3:v(),s=0,c!=="*"&&c!=="?"&&c!=="+"&&r--,d="";break;default:t("Unknown state");break}}return s===2&&t(`Unfinished custom RegExp for param "${p}"`),v(),i(),a}function Jy(e,t,s){const o=zy(Qy(e.path),s),a=ct(o,{record:e,parent:t,children:[],alias:[]});return t&&!a.record.aliasOf==!t.record.aliasOf&&t.children.push(a),a}function Xy(e,t){const s=[],o=new Map;t=Er({strict:!1,end:!0,sensitive:!1},t);function a(v){return o.get(v)}function l(v,b,_){const y=!_,S=Ar(v);S.aliasOf=_&&_.record;const C=Er(t,v),I=[S];if("alias"in v){const F=typeof v.alias=="string"?[v.alias]:v.alias;for(const W of F)I.push(Ar(ct({},S,{components:_?_.record.components:S.components,path:W,aliasOf:_?_.record:S})))}let x,E;for(const F of I){const{path:W}=F;if(b&&W[0]!=="/"){const G=b.record.path,re=G[G.length-1]==="/"?"":"/";F.path=b.record.path+(W&&re+W)}if(x=Jy(F,b,C),_?_.alias.push(x):(E=E||x,E!==x&&E.alias.push(x),y&&v.name&&!Tr(x)&&i(v.name)),cd(x)&&c(x),S.children){const G=S.children;for(let re=0;re<G.length;re++)l(G[re],x,_&&_.children[re])}_=_||x}return E?()=>{i(E)}:Zn}function i(v){if(ld(v)){const b=o.get(v);b&&(o.delete(v),s.splice(s.indexOf(b),1),b.children.forEach(i),b.alias.forEach(i))}else{const b=s.indexOf(v);b>-1&&(s.splice(b,1),v.record.name&&o.delete(v.record.name),v.children.forEach(i),v.alias.forEach(i))}}function r(){return s}function c(v){const b=eb(v,s);s.splice(b,0,v),v.record.name&&!Tr(v)&&o.set(v.record.name,v)}function p(v,b){let _,y={},S,C;if("name"in v&&v.name){if(_=o.get(v.name),!_)throw kn(1,{location:v});C=_.record.name,y=ct(xr(b.params,_.keys.filter(E=>!E.optional).concat(_.parent?_.parent.keys.filter(E=>E.optional):[]).map(E=>E.name)),v.params&&xr(v.params,_.keys.map(E=>E.name))),S=_.stringify(y)}else if(v.path!=null)S=v.path,_=s.find(E=>E.re.test(S)),_&&(y=_.parse(S),C=_.record.name);else{if(_=b.name?o.get(b.name):s.find(E=>E.re.test(b.path)),!_)throw kn(1,{location:v,currentLocation:b});C=_.record.name,y=ct({},b.params,v.params),S=_.stringify(y)}const I=[];let x=_;for(;x;)I.unshift(x.record),x=x.parent;return{name:C,path:S,params:y,matched:I,meta:Yy(I)}}e.forEach(v=>l(v));function d(){s.length=0,o.clear()}return{addRoute:l,resolve:p,removeRoute:i,clearRoutes:d,getRoutes:r,getRecordMatcher:a}}function xr(e,t){const s={};for(const o of t)o in e&&(s[o]=e[o]);return s}function Ar(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Zy(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function Zy(e){const t={},s=e.props||!1;if("component"in e)t.default=s;else for(const o in e.components)t[o]=typeof s=="object"?s[o]:s;return t}function Tr(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Yy(e){return e.reduce((t,s)=>ct(t,s.meta),{})}function Er(e,t){const s={};for(const o in e)s[o]=o in t?t[o]:e[o];return s}function eb(e,t){let s=0,o=t.length;for(;s!==o;){const l=s+o>>1;rd(e,t[l])<0?o=l:s=l+1}const a=tb(e);return a&&(o=t.lastIndexOf(a,o-1)),o}function tb(e){let t=e;for(;t=t.parent;)if(cd(t)&&rd(e,t)===0)return t}function cd({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function sb(e){const t={};if(e===""||e==="?")return t;const o=(e[0]==="?"?e.slice(1):e).split("&");for(let a=0;a<o.length;++a){const l=o[a].replace(ed," "),i=l.indexOf("="),r=uo(i<0?l:l.slice(0,i)),c=i<0?null:uo(l.slice(i+1));if(r in t){let p=t[r];us(p)||(p=t[r]=[p]),p.push(c)}else t[r]=c}return t}function Rr(e){let t="";for(let s in e){const o=e[s];if(s=ky(s),o==null){o!==void 0&&(t+=(t.length?"&":"")+s);continue}(us(o)?o.map(l=>l&&Cl(l)):[o&&Cl(o)]).forEach(l=>{l!==void 0&&(t+=(t.length?"&":"")+s,l!=null&&(t+="="+l))})}return t}function nb(e){const t={};for(const s in e){const o=e[s];o!==void 0&&(t[s]=us(o)?o.map(a=>a==null?null:""+a):o==null?o:""+o)}return t}const ob=Symbol(""),Ur=Symbol(""),Aa=Symbol(""),Zl=Symbol(""),Sl=Symbol("");function Fn(){let e=[];function t(o){return e.push(o),()=>{const a=e.indexOf(o);a>-1&&e.splice(a,1)}}function s(){e=[]}return{add:t,list:()=>e.slice(),reset:s}}function Ls(e,t,s,o,a,l=i=>i()){const i=o&&(o.enterCallbacks[a]=o.enterCallbacks[a]||[]);return()=>new Promise((r,c)=>{const p=b=>{b===!1?c(kn(4,{from:s,to:t})):b instanceof Error?c(b):jy(b)?c(kn(2,{from:t,to:b})):(i&&o.enterCallbacks[a]===i&&typeof b=="function"&&i.push(b),r())},d=l(()=>e.call(o&&o.instances[a],t,s,p));let v=Promise.resolve(d);e.length<3&&(v=v.then(p)),v.catch(b=>c(b))})}function Ya(e,t,s,o,a=l=>l()){const l=[];for(const i of e)for(const r in i.components){let c=i.components[r];if(!(t!=="beforeRouteEnter"&&!i.instances[r]))if(Zu(c)){const d=(c.__vccOpts||c)[t];d&&l.push(Ls(d,s,o,i,r,a))}else{let p=c();l.push(()=>p.then(d=>{if(!d)throw new Error(`Couldn't resolve component "${r}" at "${i.path}"`);const v=dy(d)?d.default:d;i.mods[r]=d,i.components[r]=v;const _=(v.__vccOpts||v)[t];return _&&Ls(_,s,o,i,r,a)()}))}}return l}function Pr(e){const t=as(Aa),s=as(Zl),o=ge(()=>{const c=se(e.to);return t.resolve(c)}),a=ge(()=>{const{matched:c}=o.value,{length:p}=c,d=c[p-1],v=s.matched;if(!d||!v.length)return-1;const b=v.findIndex(wn.bind(null,d));if(b>-1)return b;const _=Mr(c[p-2]);return p>1&&Mr(d)===_&&v[v.length-1].path!==_?v.findIndex(wn.bind(null,c[p-2])):b}),l=ge(()=>a.value>-1&&cb(s.params,o.value.params)),i=ge(()=>a.value>-1&&a.value===s.matched.length-1&&od(s.params,o.value.params));function r(c={}){if(rb(c)){const p=t[se(e.replace)?"replace":"push"](se(e.to)).catch(Zn);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>p),p}return Promise.resolve()}return{route:o,href:ge(()=>o.value.href),isActive:l,isExactActive:i,navigate:r}}function ab(e){return e.length===1?e[0]:e}const lb=ze({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Pr,setup(e,{slots:t}){const s=fa(Pr(e)),{options:o}=as(Aa),a=ge(()=>({[Dr(e.activeClass,o.linkActiveClass,"router-link-active")]:s.isActive,[Dr(e.exactActiveClass,o.linkExactActiveClass,"router-link-exact-active")]:s.isExactActive}));return()=>{const l=t.default&&ab(t.default(s));return e.custom?l:ro("a",{"aria-current":s.isExactActive?e.ariaCurrentValue:null,href:s.href,onClick:s.navigate,class:a.value},l)}}}),ib=lb;function rb(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function cb(e,t){for(const s in t){const o=t[s],a=e[s];if(typeof o=="string"){if(o!==a)return!1}else if(!us(a)||a.length!==o.length||o.some((l,i)=>l!==a[i]))return!1}return!0}function Mr(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Dr=(e,t,s)=>e??t??s,ub=ze({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:s}){const o=as(Sl),a=ge(()=>e.route||o.value),l=as(Ur,0),i=ge(()=>{let p=se(l);const{matched:d}=a.value;let v;for(;(v=d[p])&&!v.components;)p++;return p}),r=ge(()=>a.value.matched[i.value]);Lo(Ur,ge(()=>i.value+1)),Lo(ob,r),Lo(Sl,a);const c=w();return Xe(()=>[c.value,r.value,e.name],([p,d,v],[b,_,y])=>{d&&(d.instances[v]=p,_&&_!==d&&p&&p===b&&(d.leaveGuards.size||(d.leaveGuards=_.leaveGuards),d.updateGuards.size||(d.updateGuards=_.updateGuards))),p&&d&&(!_||!wn(d,_)||!b)&&(d.enterCallbacks[v]||[]).forEach(S=>S(p))},{flush:"post"}),()=>{const p=a.value,d=e.name,v=r.value,b=v&&v.components[d];if(!b)return Lr(s.default,{Component:b,route:p});const _=v.props[d],y=_?_===!0?p.params:typeof _=="function"?_(p):_:null,C=ro(b,ct({},y,t,{onVnodeUnmounted:I=>{I.component.isUnmounted&&(v.instances[d]=null)},ref:c}));return Lr(s.default,{Component:C,route:p})||C}}});function Lr(e,t){if(!e)return null;const s=e(t);return s.length===1?s[0]:s}const db=ub;function fb(e){const t=Xy(e.routes,e),s=e.parseQuery||sb,o=e.stringifyQuery||Rr,a=e.history,l=Fn(),i=Fn(),r=Fn(),c=so(Us);let p=Us;rn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const d=Xa.bind(null,le=>""+le),v=Xa.bind(null,Cy),b=Xa.bind(null,uo);function _(le,xe){let K,ae;return ld(le)?(K=t.getRecordMatcher(le),ae=xe):ae=le,t.addRoute(ae,K)}function y(le){const xe=t.getRecordMatcher(le);xe&&t.removeRoute(xe)}function S(){return t.getRoutes().map(le=>le.record)}function C(le){return!!t.getRecordMatcher(le)}function I(le,xe){if(xe=ct({},xe||c.value),typeof le=="string"){const A=Za(s,le,xe.path),z=t.resolve({path:A.path},xe),Q=a.createHref(A.fullPath);return ct(A,z,{params:b(z.params),hash:uo(A.hash),redirectedFrom:void 0,href:Q})}let K;if(le.path!=null)K=ct({},le,{path:Za(s,le.path,xe.path).path});else{const A=ct({},le.params);for(const z in A)A[z]==null&&delete A[z];K=ct({},le,{params:v(A)}),xe.params=v(xe.params)}const ae=t.resolve(K,xe),Fe=le.hash||"";ae.params=d(b(ae.params));const P=xy(o,ct({},le,{hash:wy(Fe),path:ae.path})),g=a.createHref(P);return ct({fullPath:P,hash:Fe,query:o===Rr?nb(le.query):le.query||{}},ae,{redirectedFrom:void 0,href:g})}function x(le){return typeof le=="string"?Za(s,le,c.value.path):ct({},le)}function E(le,xe){if(p!==le)return kn(8,{from:xe,to:le})}function F(le){return re(le)}function W(le){return F(ct(x(le),{replace:!0}))}function G(le){const xe=le.matched[le.matched.length-1];if(xe&&xe.redirect){const{redirect:K}=xe;let ae=typeof K=="function"?K(le):K;return typeof ae=="string"&&(ae=ae.includes("?")||ae.includes("#")?ae=x(ae):{path:ae},ae.params={}),ct({query:le.query,hash:le.hash,params:ae.path!=null?{}:le.params},ae)}}function re(le,xe){const K=p=I(le),ae=c.value,Fe=le.state,P=le.force,g=le.replace===!0,A=G(K);if(A)return re(ct(x(A),{state:typeof A=="object"?ct({},Fe,A.state):Fe,force:P,replace:g}),xe||K);const z=K;z.redirectedFrom=xe;let Q;return!P&&Ay(o,ae,K)&&(Q=kn(16,{to:z,from:ae}),ue(ae,ae,!0,!1)),(Q?Promise.resolve(Q):O(z,ae)).catch(j=>_s(j)?_s(j,2)?j:de(j):ee(j,z,ae)).then(j=>{if(j){if(_s(j,2))return re(ct({replace:g},x(j.to),{state:typeof j.to=="object"?ct({},Fe,j.to.state):Fe,force:P}),xe||z)}else j=R(z,ae,!0,g,Fe);return $(z,ae,j),j})}function D(le,xe){const K=E(le,xe);return K?Promise.reject(K):Promise.resolve()}function U(le){const xe=ie.values().next().value;return xe&&typeof xe.runWithContext=="function"?xe.runWithContext(le):le()}function O(le,xe){let K;const[ae,Fe,P]=pb(le,xe);K=Ya(ae.reverse(),"beforeRouteLeave",le,xe);for(const A of ae)A.leaveGuards.forEach(z=>{K.push(Ls(z,le,xe))});const g=D.bind(null,le,xe);return K.push(g),je(K).then(()=>{K=[];for(const A of l.list())K.push(Ls(A,le,xe));return K.push(g),je(K)}).then(()=>{K=Ya(Fe,"beforeRouteUpdate",le,xe);for(const A of Fe)A.updateGuards.forEach(z=>{K.push(Ls(z,le,xe))});return K.push(g),je(K)}).then(()=>{K=[];for(const A of P)if(A.beforeEnter)if(us(A.beforeEnter))for(const z of A.beforeEnter)K.push(Ls(z,le,xe));else K.push(Ls(A.beforeEnter,le,xe));return K.push(g),je(K)}).then(()=>(le.matched.forEach(A=>A.enterCallbacks={}),K=Ya(P,"beforeRouteEnter",le,xe,U),K.push(g),je(K))).then(()=>{K=[];for(const A of i.list())K.push(Ls(A,le,xe));return K.push(g),je(K)}).catch(A=>_s(A,8)?A:Promise.reject(A))}function $(le,xe,K){r.list().forEach(ae=>U(()=>ae(le,xe,K)))}function R(le,xe,K,ae,Fe){const P=E(le,xe);if(P)return P;const g=xe===Us,A=rn?history.state:{};K&&(ae||g?a.replace(le.fullPath,ct({scroll:g&&A&&A.scroll},Fe)):a.push(le.fullPath,Fe)),c.value=le,ue(le,xe,K,g),de()}let M;function N(){M||(M=a.listen((le,xe,K)=>{if(!Pe.listening)return;const ae=I(le),Fe=G(ae);if(Fe){re(ct(Fe,{replace:!0,force:!0}),ae).catch(Zn);return}p=ae;const P=c.value;rn&&Ly(kr(P.fullPath,K.delta),xa()),O(ae,P).catch(g=>_s(g,12)?g:_s(g,2)?(re(ct(x(g.to),{force:!0}),ae).then(A=>{_s(A,20)&&!K.delta&&K.type===fo.pop&&a.go(-1,!1)}).catch(Zn),Promise.reject()):(K.delta&&a.go(-K.delta,!1),ee(g,ae,P))).then(g=>{g=g||R(ae,P,!1),g&&(K.delta&&!_s(g,8)?a.go(-K.delta,!1):K.type===fo.pop&&_s(g,20)&&a.go(-1,!1)),$(ae,P,g)}).catch(Zn)}))}let L=Fn(),X=Fn(),ne;function ee(le,xe,K){de(le);const ae=X.list();return ae.length?ae.forEach(Fe=>Fe(le,xe,K)):console.error(le),Promise.reject(le)}function we(){return ne&&c.value!==Us?Promise.resolve():new Promise((le,xe)=>{L.add([le,xe])})}function de(le){return ne||(ne=!le,N(),L.list().forEach(([xe,K])=>le?K(le):xe()),L.reset()),le}function ue(le,xe,K,ae){const{scrollBehavior:Fe}=e;if(!rn||!Fe)return Promise.resolve();const P=!K&&Ny(kr(le.fullPath,0))||(ae||!K)&&history.state&&history.state.scroll||null;return pt().then(()=>Fe(le,xe,P)).then(g=>g&&Dy(g)).catch(g=>ee(g,le,xe))}const Z=le=>a.go(le);let q;const ie=new Set,Pe={currentRoute:c,listening:!0,addRoute:_,removeRoute:y,clearRoutes:t.clearRoutes,hasRoute:C,getRoutes:S,resolve:I,options:e,push:F,replace:W,go:Z,back:()=>Z(-1),forward:()=>Z(1),beforeEach:l.add,beforeResolve:i.add,afterEach:r.add,onError:X.add,isReady:we,install(le){const xe=this;le.component("RouterLink",ib),le.component("RouterView",db),le.config.globalProperties.$router=xe,Object.defineProperty(le.config.globalProperties,"$route",{enumerable:!0,get:()=>se(c)}),rn&&!q&&c.value===Us&&(q=!0,F(a.location).catch(Fe=>{}));const K={};for(const Fe in Us)Object.defineProperty(K,Fe,{get:()=>c.value[Fe],enumerable:!0});le.provide(Aa,xe),le.provide(Zl,uc(K)),le.provide(Sl,c);const ae=le.unmount;ie.add(le),le.unmount=function(){ie.delete(le),ie.size<1&&(p=Us,M&&M(),M=null,c.value=Us,q=!1,ne=!1),ae()}}};function je(le){return le.reduce((xe,K)=>xe.then(()=>U(K)),Promise.resolve())}return Pe}function pb(e,t){const s=[],o=[],a=[],l=Math.max(t.matched.length,e.matched.length);for(let i=0;i<l;i++){const r=t.matched[i];r&&(e.matched.find(p=>wn(p,r))?o.push(r):s.push(r));const c=e.matched[i];c&&(t.matched.find(p=>wn(p,c))||a.push(c))}return[s,o,a]}function Gt(){return as(Aa)}function xn(e){return as(Zl)}function An(){const{user:e,isLoggedIn:t}=Ts(),s={user:10,admin:90,qiuchenly:9999},o=ge(()=>!t.value||!e.value?!1:(e.value.roleWeight||0)>=s.admin),a=ge(()=>!t.value||!e.value?!1:(e.value.roleWeight||0)>=s.qiuchenly),l=r=>!t.value||!e.value?!1:(e.value.roleWeight||0)>=s[r],i=ge(()=>!t.value||!e.value?!1:(e.value.roleWeight||0)<s.admin);return{isAdmin:o,isQiuChenLy:a,isUser:i,hasPermission:l}}const vb=Object.freeze(Object.defineProperty({__proto__:null,usePermission:An},Symbol.toStringTag,{value:"Module"})),Vn=w({visible:!1,text:"加载中..."}),js=()=>({loadingState:Vn,show:s=>{Vn.value.visible=!0,Vn.value.text=s||"加载中..."},hide:()=>{Vn.value.visible=!1,Vn.value.text="加载中..."}}),mb={key:0,class:"loading-overlay"},hb={class:"loading-content"},gb=ze({__name:"LoadingDialog",setup(e){const{loadingState:t}=js();return(s,o)=>(u(),Ne(Ot,{to:"body"},[m(gt,{name:"fade"},{default:lt(()=>[se(t).visible?(u(),f("div",mb,[n("div",hb,[o[0]||(o[0]=n("div",{class:"spinner"},null,-1)),n("p",null,h(se(t).text),1)])])):T("",!0)]),_:1})]))}}),ud=We(gb,[["__scopeId","data-v-b54fe5a1"]]),yb={id:"app"},bb={key:3,class:"app-layout"},_b={class:"top-bar"},wb={class:"top-bar-center"},kb={class:"top-bar-right"},$b={class:"user-avatar"},Cb={class:"user-menu-dropdown"},Ib={class:"menu-header"},Sb={class:"user-info"},xb={class:"user-avatar-large"},Ab={class:"user-details"},Tb={class:"user-name"},Eb={class:"user-email"},Rb={class:"user-role"},Ub={class:"main-content"},Pb={class:"main-content-left"},Mb={key:1,class:"item-text"},Db={class:"main-content-right"},Lb=ze({__name:"App",setup(e){const t=so([]),s=so([]),o=w(!1);Gu();const{user:a,isLoggedIn:l,logout:i,checkAuthStatus:r}=Ts(),{isAdmin:c,isQiuChenLy:p}=An(),d=gs(),v=w(!1),b=w(!1),_=w(null),y=Gt(),S=xn(),C=w(S.query.search||"");Xe(()=>S.query.search,A=>{C.value=A||""});const I=A=>{A.trim()?S.path!=="/"?y.push({path:"/",query:{search:A.trim()}}):y.push({query:{...S.query,search:A.trim()}}):x()},x=()=>{if(C.value="",S.path==="/"){const A={...S.query};delete A.search,y.push({query:A})}else y.push({path:"/",query:{}})},E=()=>{v.value=!0},F=A=>{_.value=A.detail,b.value=!0};nt(()=>{window.addEventListener("open-login-dialog",E),window.addEventListener("open-version-dialog",F)}),At(()=>{window.removeEventListener("open-login-dialog",E),window.removeEventListener("open-version-dialog",F)}),w(!0);const W=w(!1),G=w(!1),re=w(null),D=()=>{W.value=!1},U=()=>{G.value=!1,re.value=null,W.value=!1,O()},O=async()=>{try{(await Y.getAllSettings()).download_path?(W.value=!1,G.value=!1,await r()):(W.value=!0,G.value=!1)}catch(A){console.error("检查设置状态失败:",A);const z=Mm(A);z?(re.value=z,G.value=!0,W.value=!1):(W.value=!0,G.value=!1)}},$=ge(()=>{const A={total:t.value.length,injected:0,update:0,unsupported:0,store:0};for(const z of t.value)z.status==="injected"?A.injected++:z.status==="upgrade_available"?A.update++:z.status==="unsupported"&&A.unsupported++,z.update!==null&&A.store++;return A});ge(()=>$.value.total),ge(()=>$.value.injected),ge(()=>$.value.update),ge(()=>$.value.unsupported),ge(()=>$.value.store),ge(()=>{if(s.value.length===0)return 0;let A=0;for(const z of s.value)z.status==="downloading"&&A++;return A});const R=async()=>{try{t.value=await Y.getApps(),o.value=!0}catch(A){console.error("加载应用列表失败:",A),o.value=!1}},M=async()=>{try{s.value=await Y.getAllDownloads()}catch(A){console.error("加载下载列表失败:",A)}};let N=null,L=null;const X=()=>{const A=()=>{const z=s.value.some(Q=>Q.status==="downloading"||Q.status==="pending");N!==null&&(clearInterval(N),N=null),z?N=window.setInterval(M,2e3):N=window.setInterval(M,1e4),M()};A(),L!==null&&clearInterval(L),L=window.setInterval(A,5e3)},ne=w(0),ee=w(null),we=async()=>{if(!l.value){ne.value=0;return}try{const A=await Y.getUnreadMessageCount();A.success&&A.data&&(ne.value=A.data.count||0)}catch(A){console.error("获取未读私信数量失败:",A),ne.value=0}};Xe(l,A=>{ee.value!==null&&(clearInterval(ee.value),ee.value=null),A?(we(),ee.value=window.setInterval(()=>{we()},5e3)):ne.value=0},{immediate:!0}),nt(()=>{r(),R(),M(),X(),l.value&&(we(),ee.value=window.setInterval(()=>{we()},5e3)),document.addEventListener("visibilitychange",()=>{!document.hidden&&l.value&&we()}),window.addEventListener("focus",()=>{l.value&&we()}),window.addEventListener("messages:conversations-updated",()=>{l.value&&we()})}),At(()=>{N!==null&&clearInterval(N),L!==null&&clearInterval(L),ee.value!==null&&(clearInterval(ee.value),ee.value=null)});const de=A=>{if(!A)return"用户";switch(A){case"admin":return"管理员";case"qiuchenly":return"超级管理员";default:return"用户"}},ue=async()=>{await d.show({title:"登出确认",message:"确定要登出吗?",type:"warning",confirmText:"登出",cancelText:"取消"})&&(await i(),y.push("/"))},Z=()=>{},q=w(null),ie=()=>a.value&&(a.value.nickName||a.value.username)||"用户",Pe=()=>{v.value=!0},je=()=>{y.push("/profile")},le=()=>{console.log("发送反馈")},xe=()=>{y.push("/settings")},K=w("apps"),ae=ge(()=>K.value),Fe=[{id:"home",label:"主页",icon:"fluent-color:home-24",group:"top"},{id:"apps",label:"应用",icon:"fluent-color:apps-24",group:"top"},{id:"official",label:"来自官方",icon:"fluent-color:shield-checkmark-24",group:"top"},{id:"discussion",label:"讨论区",icon:"fluent-color:chat-bubbles-question-24",group:"top"},{id:"admin",label:"管理员",icon:"fluent-color:layer-diagonal-person-24",group:"top",adminOnly:!0},{id:"new",label:"新增功能",icon:"fluent-color:megaphone-loud-24",group:"top"},{id:"downloads",label:"下载",icon:"fluent-color:cloud-24",group:"bottom"},{id:"notifications",label:"消息",icon:"fluent-color:comment-multiple-32",group:"bottom"},{id:"settings",label:"设置",icon:"fluent-color:settings-24",group:"bottom"}],P=ge(()=>Fe.filter(z=>!z.adminOnly||c.value).map(z=>z.id==="notifications"?{...z,badge:ne.value>0?ne.value:void 0}:z)),g=(A,z)=>{console.log("点击了按钮:",A.label||A.id,"ID:",A.id,"索引:",z),K.value=A.id,A.id==="home"?y.push("/"):A.id==="apps"?y.push("/apps"):A.id==="official"?y.push("/official"):A.id==="downloads"?y.push("/downloads"):A.id==="settings"?y.push("/settings"):A.id==="new"?y.push("/new-features"):A.id==="discussion"?y.push("/discussion"):A.id==="admin"?y.push("/admin"):A.id==="notifications"?y.push("/notifications"):console.log("Sidebar item clicked:",A,z)};return Xe(()=>S.path,A=>{A==="/"||A==="/home"?K.value="home":A==="/apps"?K.value="apps":A==="/official"?K.value="official":A.startsWith("/downloads")?K.value="downloads":A.startsWith("/settings")?K.value="settings":A.startsWith("/new-features")?K.value="new":A.startsWith("/discussion")?K.value="discussion":A.startsWith("/admin")?K.value="admin":A.startsWith("/notifications")?K.value="notifications":A.startsWith("/messages")&&(K.value="")},{immediate:!0}),(A,z)=>{var j,V,B,ve,me,Le,Ue,Be,Ce,Qe;const Q=Pc("router-view");return u(),f("div",yb,[m(xg),G.value?(u(),Ne(kg,{key:1,onRetry:U,"error-message":(j=re.value)==null?void 0:j.message,"error-code":(V=re.value)==null?void 0:V.code,"request-url":(B=re.value)==null?void 0:B.requestUrl,"status-code":(ve=re.value)==null?void 0:ve.statusCode},null,8,["error-message","error-code","request-url","status-code"])):W.value?(u(),Ne(lg,{key:2,onComplete:D})):(u(),f("div",bb,[n("div",_b,[z[12]||(z[12]=n("div",{class:"top-bar-left"},[n("div",{class:"brand-name"},"QiuChenly")],-1)),n("div",wb,[m(G1,{modelValue:C.value,"onUpdate:modelValue":z[0]||(z[0]=Ge=>C.value=Ge),onSearch:I,onClear:x},null,8,["modelValue"])]),n("div",kb,[n("div",{class:"user-menu-wrapper",ref_key:"userMenuRef",ref:q},[n("div",$b,[se(l)?(u(),Ne(Et,{key:1,userId:(me=se(a))==null?void 0:me._id,width:36,height:36},null,8,["userId"])):(u(),Ne(k,{key:0,icon:"fluent-color:person-24",class:"avatar-icon"}))]),n("div",Cb,[se(l)?(u(),f(ye,{key:1},[n("div",Ib,[n("div",Sb,[n("div",xb,[m(Et,{userId:(Le=se(a))==null?void 0:Le._id,"user-name":ie(),size:"large"},null,8,["userId","user-name"])]),n("div",Ab,[n("div",Tb,h(((Ue=se(a))==null?void 0:Ue.nickName)||((Be=se(a))==null?void 0:Be.username)||"用户"),1),n("div",Eb,h(((Ce=se(a))==null?void 0:Ce.email)||"未设置邮箱"),1),n("div",Rb,h(de((Qe=se(a))==null?void 0:Qe.role)),1)])])]),z[10]||(z[10]=n("div",{class:"menu-divider"},null,-1)),n("div",{class:"menu-item",onClick:je},[m(k,{icon:"fluent-color:person-24",class:"menu-icon"}),z[6]||(z[6]=n("span",{class:"menu-text"},"个人中心",-1))]),n("div",{class:"menu-item",onClick:le},[m(k,{icon:"fluent-color:chat-24",class:"menu-icon"}),z[7]||(z[7]=n("span",{class:"menu-text"},"发送反馈",-1))]),n("div",{class:"menu-item",onClick:xe},[m(k,{icon:"fluent-color:settings-24",class:"menu-icon"}),z[8]||(z[8]=n("span",{class:"menu-text"},"存储设置",-1))]),z[11]||(z[11]=n("div",{class:"menu-divider"},null,-1)),n("div",{class:"menu-item",onClick:ue},[m(k,{icon:"fluent-color:dismiss-circle-24",class:"menu-icon"}),z[9]||(z[9]=n("span",{class:"menu-text"},"登出",-1))])],64)):(u(),f(ye,{key:0},[n("div",{class:"menu-item",onClick:Pe},[m(k,{icon:"fluent-color:person-add-24",class:"menu-icon"}),z[3]||(z[3]=n("span",{class:"menu-text"},"登录",-1))]),n("div",{class:"menu-item",onClick:le},[m(k,{icon:"fluent-color:chat-24",class:"menu-icon"}),z[4]||(z[4]=n("span",{class:"menu-text"},"发送反馈",-1))]),n("div",{class:"menu-item",onClick:xe},[m(k,{icon:"fluent-color:settings-24",class:"menu-icon"}),z[5]||(z[5]=n("span",{class:"menu-text"},"存储设置",-1))])],64))])],512)])]),n("div",Ub,[n("div",Pb,[m(iy,{items:P.value,"active-item":ae.value,onItemClick:g},{item:lt(({item:Ge})=>[Ge.icon?(u(),Ne(k,{key:0,icon:Ge.icon,class:"item-icon"},null,8,["icon"])):T("",!0),Ge.label?(u(),f("span",Mb,h(Ge.label),1)):T("",!0)]),_:1},8,["items","active-item"])]),n("div",Db,[m(Q)])])])),m(Qu,{show:v.value,onClose:z[1]||(z[1]=Ge=>v.value=!1),onSuccess:Z},null,8,["show"]),m(U1,{visible:b.value,app:_.value,onClose:z[2]||(z[2]=Ge=>b.value=!1)},null,8,["visible","app"]),m(Sn,{visible:se(d).visible.value,title:se(d).config.value.title||"",message:se(d).config.value.message||"",type:se(d).config.value.type,"confirm-text":se(d).config.value.confirmText,"cancel-text":se(d).config.value.cancelText,onConfirm:se(d).handleConfirm,onCancel:se(d).handleCancel},null,8,["visible","title","message","type","confirm-text","cancel-text","onConfirm","onCancel"]),m(ud)])}}}),Nb=We(Lb,[["__scopeId","data-v-3658452c"]]),Ob="modulepreload",Fb=function(e){return"/"+e},Nr={},Or=function(t,s,o){let a=Promise.resolve();if(s&&s.length>0){document.getElementsByTagName("link");const i=document.querySelector("meta[property=csp-nonce]"),r=(i==null?void 0:i.nonce)||(i==null?void 0:i.getAttribute("nonce"));a=Promise.allSettled(s.map(c=>{if(c=Fb(c),c in Nr)return;Nr[c]=!0;const p=c.endsWith(".css"),d=p?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${d}`))return;const v=document.createElement("link");if(v.rel=p?"stylesheet":Ob,p||(v.as="script"),v.crossOrigin="",v.href=c,r&&v.setAttribute("nonce",r),document.head.appendChild(v),p)return new Promise((b,_)=>{v.addEventListener("load",b),v.addEventListener("error",()=>_(new Error(`Unable to preload CSS for ${c}`)))})}))}function l(i){const r=new Event("vite:preloadError",{cancelable:!0});if(r.payload=i,window.dispatchEvent(r),!r.defaultPrevented)throw i}return a.then(i=>{for(const r of i||[])r.status==="rejected"&&l(r.reason);return t().catch(l)})},Vb={class:"modal-header"},Bb={class:"modal-title"},jb={class:"modal-body"},qb={class:"log-time"},Hb={class:"log-message"},zb={key:0,class:"log-line loading"},Wb={class:"modal-footer"},Kb={class:"footer-status"},Gb={key:0,class:"status-success"},Qb={key:1,class:"status-error"},Jb={key:2,class:"status-loading"},Xb={class:"footer-actions"},Zb=ze({__name:"LogModal",props:{visible:{type:Boolean},title:{default:"操作日志"},logs:{default:()=>[]},loading:{type:Boolean,default:!1},status:{default:"idle"},canClose:{type:Boolean,default:!0}},emits:["close"],setup(e,{emit:t}){const s=e,o=t,a=w(null),l=()=>{a.value&&(a.value.scrollTop=a.value.scrollHeight)};Xe(()=>s.logs,async()=>{await pt(),l()},{deep:!0,flush:"post"}),Xe(()=>s.loading,async()=>{await pt(),l()});const i=()=>{switch(s.status){case"success":return"mdi:check-circle";case"error":return"mdi:alert-circle";case"loading":return"mdi:loading";default:return"mdi:information"}},r=d=>d.level?`log-${d.level}`:"log-info",c=()=>{o("close")},p=()=>{s.canClose&&c()};return(d,v)=>(u(),Ne(Ot,{to:"body"},[m(gt,{name:"modal"},{default:lt(()=>[e.visible?(u(),f("div",{key:0,class:"modal-overlay",onClick:p},[n("div",{class:"modal-container",onClick:v[0]||(v[0]=Oe(()=>{},["stop"]))},[n("div",Vb,[n("h2",Bb,[m(k,{icon:i(),class:"modal-icon"},null,8,["icon"]),$e(" "+h(e.title),1)]),e.canClose?(u(),f("button",{key:0,onClick:c,class:"modal-close","aria-label":"关闭"},[m(k,{icon:"mdi:close"})])):T("",!0)]),n("div",jb,[n("div",{ref_key:"logContainer",ref:a,class:"log-container"},[(u(!0),f(ye,null,Ee(e.logs,(b,_)=>(u(),f("div",{key:_,class:Te(["log-line",r(b)])},[n("span",qb,h(b.time),1),n("span",Hb,h(b.message),1)],2))),128)),e.loading?(u(),f("div",zb,[...v[1]||(v[1]=[n("div",{class:"spinner-small"},null,-1),n("span",{class:"log-message"},"处理中...",-1)])])):T("",!0)],512)]),n("div",Wb,[n("div",Kb,[e.status==="success"?(u(),f("span",Gb,[m(k,{icon:"mdi:check-circle"}),v[2]||(v[2]=$e(" 操作成功 ",-1))])):e.status==="error"?(u(),f("span",Qb,[m(k,{icon:"mdi:alert-circle"}),v[3]||(v[3]=$e(" 操作失败 ",-1))])):e.loading?(u(),f("span",Jb,[...v[4]||(v[4]=[n("div",{class:"spinner-small"},null,-1),$e(" 处理中... ",-1)])])):T("",!0)]),n("div",Xb,[e.canClose?(u(),f("button",{key:0,onClick:c,class:"btn btn-outline"}," 关闭 ")):T("",!0)])])])])):T("",!0)]),_:1})]))}}),dd=We(Zb,[["__scopeId","data-v-07320b59"]]);function Yb(){const e=w(!1),t=w(""),s=w([]),o=w("idle");return{modalVisible:e,modalTitle:t,logs:s,modalStatus:o,addLog:(p,d="info")=>{const v=new Date,b=`${v.getHours().toString().padStart(2,"0")}:${v.getMinutes().toString().padStart(2,"0")}:${v.getSeconds().toString().padStart(2,"0")}`;s.value.push({time:b,message:p,level:d})},showModal:p=>{t.value=p,s.value=[],o.value="loading",e.value=!0},hideModal:()=>{e.value=!1},setSuccess:()=>{o.value="success"},setError:()=>{o.value="error"}}}function fd(e){const t=w(!1),{onRefresh:s}=e,{modalVisible:o,modalTitle:a,logs:l,modalStatus:i,addLog:r,showModal:c,hideModal:p,setSuccess:d,setError:v}=Yb();return{updating:t,modalVisible:o,modalTitle:a,logs:l,modalStatus:i,handleUpdate:async y=>{t.value=!0,c(y.status==="injected"?"更新应用":"注入应用"),r(`开始处理应用: ${y.name}`),r(`Bundle ID: ${y.bundleId}`),r(`当前版本: ${y.version}`);try{r("正在连接到服务器...");const S=await Y.updateApp(y.bundleId);S.logs&&S.logs.length>0&&S.logs.forEach(C=>{r(C,"info")}),S.success?(r("操作成功完成!","success"),d(),r("正在刷新应用状态..."),await s(),r("应用状态已更新","success")):(r(`操作失败: ${S.message}`,"error"),v())}catch(S){console.error("更新应用失败:",S),r(`网络错误: ${S}`,"error"),v()}finally{t.value=!1}},handleReinstall:async()=>{console.log("重新安装功能待实现")},hideModal:p}}const e0={key:0,class:"status-badge"},t0={key:0,class:"badge upgrade"},s0={key:1,class:"badge injected"},n0={class:"card-content"},o0={class:"app-icon-wrapper"},a0={class:"app-icon"},l0=["src","alt"],i0={class:"app-info"},r0={class:"app-name"},c0={key:0,class:"app-rating"},u0={class:"category-tag"},d0={key:1,class:"version-info"},f0={key:0,class:"version-item"},p0={class:"version-value"},v0={key:1,class:"version-item latest"},m0={class:"version-label"},h0={class:"version-value"},g0={key:2,class:"version-item bundle-id"},y0={class:"version-value bundle-id-value"},b0={key:2,class:"app-description"},_0={class:"app-actions"},w0=["disabled","title"],k0={key:4,class:"button-tooltip"},$0=ze({__name:"AppCard",props:{app:{},mode:{default:"list"},showDescription:{type:Boolean,default:!1}},emits:["updated","openVersionDialog"],setup(e,{emit:t}){const s=e,o=t,a=Gt(),l=w(!1),i=w(!1),{toasts:r,warning:c,removeToast:p}=_t(),d=ge(()=>s.app.hasIcon?Y.getAppIconUrl(s.app.bundleId):null),{updating:v,modalVisible:b,modalTitle:_,logs:y,modalStatus:S,handleUpdate:C,handleReinstall:I,hideModal:x}=fd({onRefresh:async()=>{try{const N=await Y.getApp(s.app.bundleId);return o("updated",s.app.bundleId),N}catch(N){throw console.error("刷新应用状态失败:",N),N}}}),E=()=>{const N=s.app.bundleId.toLowerCase();return N.includes("social")||N.includes("chat")||N.includes("qq")||N.includes("wechat")?"社交":N.includes("music")||N.includes("video")||N.includes("player")?"娱乐":N.includes("design")||N.includes("photo")||N.includes("edit")?"设计":N.includes("tool")||N.includes("util")?"工具":"应用"},F=()=>`${s.app.name}是一款优秀的应用程序,提供丰富的功能和良好的用户体验。`,W=ge(()=>{const N=s.app.status==="upgrade_available",L=s.app.update!==null&&s.app.update.hasUpdate===!0;return N||L}),G=ge(()=>{var N;return s.app.path?!1:!((N=s.app.update)!=null&&N.versions)||s.app.update.versions.length===0}),re=()=>{var N;return v.value?"处理中...":s.app.path?W.value?"更新":s.app.status==="injected"?"已安装":s.app.status==="supported"?"一键激活":s.app.status==="unsupported"?"不支持":"一键激活":((N=s.app.update)!=null&&N.versions&&s.app.update.versions.length>0,"下载")},D=()=>!s.app.path&&G.value?"该应用暂无可用的下载版本":v.value?"正在处理中...":"",U=()=>!s.app.path&&G.value?"disabled":W.value?"warning":s.app.status==="injected"?"success":s.app.status==="supported"?"primary":s.app.status==="unsupported"?"disabled":"primary",O=()=>{a.push(`/app/${s.app.bundleId}`)},$=()=>{var N,L;if(!s.app.path){(N=s.app.update)!=null&&N.versions&&s.app.update.versions.length>0?window.dispatchEvent(new CustomEvent("open-version-dialog",{detail:s.app})):c("该应用暂无可用的下载版本",3e3);return}W.value&&((L=s.app.update)!=null&&L.versions)&&s.app.update.versions.length>0?window.dispatchEvent(new CustomEvent("open-version-dialog",{detail:s.app})):W.value||s.app.status==="supported"?C(s.app):s.app.status!=="injected"&&s.app.status!=="unsupported"&&I(s.app)},R=()=>{l.value=!0,i.value=!1},M=()=>{l.value=!1,i.value=!0};return(N,L)=>{var X;return u(),f("div",{class:Te(["app-card",[`mode-${e.mode}`]]),onClick:O},[e.mode==="list"?(u(),f("div",e0,[W.value?(u(),f("div",t0,[...L[0]||(L[0]=[n("span",null,"可更新",-1)])])):e.app.status==="injected"?(u(),f("div",s0,[...L[1]||(L[1]=[n("span",null,"已注入",-1)])])):T("",!0)])):T("",!0),n("div",n0,[n("div",o0,[n("div",a0,[d.value?Ve((u(),f("img",{key:0,src:d.value,alt:e.app.name,onLoad:R,onError:M},null,40,l0)),[[ls,l.value&&!i.value]]):T("",!0),Ve(n("div",{class:"icon-placeholder"},h(e.app.name.charAt(0).toUpperCase()),513),[[ls,!d.value||!l.value||i.value]])])]),n("div",i0,[n("h3",r0,h(e.app.name),1),e.mode==="search"?(u(),f("div",c0,[m(k,{icon:"fluent-color:star-24",class:"star-icon"}),L[2]||(L[2]=n("span",null,"4.5",-1))])):T("",!0),n("div",u0,[n("span",null,h(E()),1)]),e.mode==="list"?(u(),f("div",d0,[e.app.path?(u(),f("div",f0,[L[3]||(L[3]=n("span",{class:"version-label"},"当前",-1)),n("span",p0,h(e.app.version||"未知"),1)])):T("",!0),(X=e.app.update)!=null&&X.latestVersion?(u(),f("div",v0,[n("span",m0,h(e.app.path?"最新":"版本"),1),n("span",h0,h(e.app.update.latestVersion),1)])):T("",!0),e.app.path?T("",!0):(u(),f("div",g0,[L[4]||(L[4]=n("span",{class:"version-label"},"包名",-1)),n("span",y0,h(e.app.bundleId),1)]))])):T("",!0),e.mode==="search"&&e.showDescription?(u(),f("div",b0,h(F()),1)):T("",!0)]),n("div",_0,[n("button",{class:Te(["action-button",U()]),onClick:Oe($,["stop"]),disabled:se(v)||G.value,title:D()},[W.value?(u(),Ne(k,{key:0,icon:"mdi:arrow-down-circle",class:"button-icon"})):s.app.status==="supported"?(u(),Ne(k,{key:1,icon:"mdi:key",class:"button-icon"})):s.app.status==="injected"?(u(),Ne(k,{key:2,icon:"mdi:check-circle",class:"button-icon"})):s.app.path?T("",!0):(u(),Ne(k,{key:3,icon:"mdi:download",class:"button-icon"})),n("span",null,h(re()),1),G.value&&!s.app.path?(u(),f("span",k0," 该应用暂无可用的下载版本 ")):T("",!0)],10,w0)])]),m(dd,{visible:se(b),title:se(_),logs:se(y),loading:se(v),status:se(S),"can-close":se(S)!=="loading",onClose:se(x)},null,8,["visible","title","logs","loading","status","can-close","onClose"]),m(Yt,{toasts:se(r),onRemove:se(p)},null,8,["toasts","onRemove"])],2)}}}),po=We($0,[["__scopeId","data-v-052f9dd3"]]),C0={class:"carousel-wrapper"},I0={class:"slide-background"},S0=["src"],x0={class:"slide-content"},A0={class:"content-wrapper"},T0={key:0,class:"app-icon-wrapper"},E0=["src","alt"],R0={class:"app-info"},U0={key:0,class:"app-price"},P0={class:"app-title"},M0={key:1,class:"app-description"},D0={class:"app-actions"},L0=["onClick"],N0=["onClick"],O0=["disabled"],F0=["disabled"],V0=["viewBox"],B0=["cx","cy","r"],j0=["d"],q0={key:3,class:"carousel-indicators"},H0=["onClick"],z0=ze({__name:"HeroBanner",props:{items:{},autoPlay:{type:Boolean,default:!0},autoPlayInterval:{default:5e3},progressSize:{default:18}},emits:["action","slideChange"],setup(e,{emit:t}){const s=e,o=t,a=w(0);let l=!1;const i=w(0);let r=null,c=0;const p=w([]),d=w(!1),v=ge(()=>{const L=s.progressSize,X=24,ne=X/2,ee=X/2,we=X/2*.75;return{size:L,viewBox:`0 0 ${X} ${X}`,centerX:ne,centerY:ee,radius:we}}),b=L=>L.imageUrl?{backgroundImage:`url(${L.imageUrl})`}:L.imageId?{backgroundImage:`url(${Y.getImageUrl(L.imageId,80,1920,1080)})`}:{background:"linear-gradient(135deg, #0078d4 0%, #106ebe 100%)"},_=L=>{var X;if((X=L.app)!=null&&X.bundleId)return Y.getAppIconUrl(L.app.bundleId)},y=L=>{const X=L.target;X.style.display="none"},S=(L,X)=>{o("action",L,X)},C=(L=!1)=>{a.value<s.items.length-1?a.value++:a.value=0,L||D(),F(),pt(()=>{G()})},I=()=>{C(!1)},x=()=>{a.value>0?a.value--:a.value=s.items.length-1,D(),F(),pt(()=>{G()})},E=L=>{L>=0&&L<s.items.length&&(a.value=L,D(),F(),pt(()=>{G()}))},F=()=>{s.items[a.value]&&o("slideChange",a.value,s.items[a.value])},W=(L,X)=>{L&&(p.value[X]=L)},G=()=>{pt(()=>{p.value.forEach((L,X)=>{L&&(X===a.value?L.play().catch(()=>{}):(L.pause(),L.currentTime=0))})})},re=()=>{const L=v.value.centerX,X=v.value.centerY,ne=v.value.radius;if(i.value<=0)return"";if(i.value>=100)return`M ${L} ${X} m -${ne} 0 a ${ne} ${ne} 0 1 1 ${ne*2} 0 a ${ne} ${ne} 0 1 1 -${ne*2} 0`;const we=(i.value/100*360-90)*Math.PI/180,de=L+ne*Math.cos(we),ue=X+ne*Math.sin(we),Z=i.value>50?1:0,q=L,ie=X-ne;return`M ${L} ${X} L ${q} ${ie} A ${ne} ${ne} 0 ${Z} 1 ${de} ${ue} Z`},D=()=>{i.value=0,c=Date.now()},U=()=>{if(!s.autoPlay||l||s.items.length<=1)return;const X=(Date.now()-c)/s.autoPlayInterval*100;X>=100?(D(),C(!0)):i.value=X},O=()=>{d.value=!0,R()},$=()=>{d.value=!1,M()},R=()=>{l||(l=!0,r&&(clearInterval(r),r=null))},M=()=>{if(!l||!s.autoPlay||s.items.length<=1)return;l=!1;const L=i.value/100*s.autoPlayInterval;c=Date.now()-L,N(!1)},N=(L=!1)=>{r&&clearInterval(r),L&&D(),r=window.setInterval(()=>{l||U()},50)};return Xe(()=>s.items,()=>{a.value>=s.items.length&&(a.value=0),p.value=new Array(s.items.length).fill(null),s.autoPlay&&s.items.length>1&&N(!0),pt(()=>{G()})},{immediate:!0}),Xe(()=>a.value,()=>{G()}),nt(()=>{s.autoPlay&&s.items.length>1&&N(!0),pt(()=>{G()})}),At(()=>{r&&(clearInterval(r),r=null)}),(L,X)=>(u(),f("div",{class:"hero-carousel",onMouseenter:O,onMouseleave:$},[n("div",C0,[n("div",{class:"carousel-container",style:St({transform:`translateX(-${a.value*100}%)`})},[(u(!0),f(ye,null,Ee(e.items,(ne,ee)=>(u(),f("div",{key:ne.id||ee,class:Te(["carousel-slide",{active:ee===a.value}])},[n("div",I0,[ne.type==="video"&&ne.videoUrl?(u(),f("video",{key:0,ref_for:!0,ref:we=>W(we,ee),class:Te(["background-video",{active:ee===a.value}]),src:ne.videoUrl,muted:"",loop:"",playsinline:""},null,10,S0)):(u(),f("div",{key:1,class:"background-image",style:St(b(ne))},null,4)),X[0]||(X[0]=n("div",{class:"background-overlay"},null,-1))]),n("div",x0,[n("div",A0,[_(ne)?(u(),f("div",T0,[n("img",{src:_(ne),alt:ne.title,class:"app-icon",onError:y},null,40,E0)])):T("",!0),n("div",R0,[ne.price?(u(),f("div",U0,h(ne.price),1)):T("",!0),n("h2",P0,h(ne.title),1),ne.description?(u(),f("p",M0,h(ne.description),1)):T("",!0)]),n("div",D0,[ne.primaryAction?(u(),f("button",{key:0,class:"action-button primary",onClick:we=>S("primary",ne)},h(ne.primaryAction.label),9,L0)):T("",!0),ne.secondaryAction?(u(),f("button",{key:1,class:"action-button secondary",onClick:we=>S("secondary",ne)},h(ne.secondaryAction.label),9,N0)):T("",!0)])])])],2))),128))],4)]),e.items.length>1?(u(),f("button",{key:0,class:Te(["nav-arrow nav-arrow-left",{visible:d.value}]),onClick:x,disabled:a.value===0},[m(k,{icon:"mdi:triangle",class:"arrow-icon arrow-icon-left"})],10,O0)):T("",!0),e.items.length>1?(u(),f("button",{key:1,class:Te(["nav-arrow nav-arrow-right",{visible:d.value}]),onClick:I,disabled:a.value===e.items.length-1},[m(k,{icon:"mdi:triangle",class:"arrow-icon arrow-icon-right"})],10,F0)):T("",!0),e.items.length>1&&e.autoPlay?(u(),f("div",{key:2,class:"progress-indicator",style:St({width:`${v.value.size}px`,height:`${v.value.size}px`})},[(u(),f("svg",{class:"progress-circle",viewBox:v.value.viewBox,xmlns:"http://www.w3.org/2000/svg"},[n("circle",{class:"progress-track",cx:v.value.centerX,cy:v.value.centerY,r:v.value.radius,fill:"rgba(255, 255, 255, 0.2)"},null,8,B0),n("path",{class:"progress-bar",d:re(),fill:"white"},null,8,j0)],8,V0))],4)):T("",!0),e.items.length>1?(u(),f("div",q0,[(u(!0),f(ye,null,Ee(e.items,(ne,ee)=>(u(),f("button",{key:ne.id||ee,class:Te(["indicator",{active:ee===a.value}]),onClick:we=>E(ee)},null,10,H0))),128))])):T("",!0)],32))}}),W0=We(z0,[["__scopeId","data-v-ed76f4a9"]]),K0={class:"right-sidebar"},G0={key:0,class:"featured-app-card"},Q0={class:"featured-app-content"},J0={class:"featured-app-icon"},X0=["src","alt"],Z0={class:"featured-app-info"},Y0={key:0,class:"app-price"},e_={class:"app-name"},t_={key:1,class:"app-version"},s_={key:2,class:"app-description"},n_={class:"bottom-cards"},o_={key:0,class:"card image-viewer-card"},a_={class:"card-icon-container"},l_={class:"main-icon"},i_=["src"],r_={class:"format-icons"},c_={class:"card-title"},u_={key:1,class:"card entertainment-card"},d_={class:"app-icons-grid"},f_=["onClick"],p_=["src","alt"],v_={class:"card-title"},m_=ze({__name:"RightSidebar",props:{entertainmentData:{default:void 0},imageViewerData:{default:void 0},featuredAppData:{default:void 0}},emits:["appClick"],setup(e,{emit:t}){const s=e,o=t,a=r=>{o("appClick",r)},l=()=>{var r;return(r=s.featuredAppData)!=null&&r.screenshotUrl?{backgroundImage:`url(${s.featuredAppData.screenshotUrl})`}:{backgroundImage:"url(https://cn.bing.com/th?id=OHR.LagoonNebula_ZH-CN3890147543_1920x1080.jpg)"}},i=()=>{var r;return(r=s.imageViewerData)!=null&&r.backgroundUrl?{backgroundImage:`url(${s.imageViewerData.backgroundUrl})`}:{backgroundImage:"url(https://cn.bing.com/th?id=OHR.LagoonNebula_ZH-CN3890147543_1920x1080.jpg)"}};return(r,c)=>(u(),f("div",K0,[e.featuredAppData?(u(),f("div",G0,[n("div",{class:"featured-app-background",style:St(l())},null,4),n("div",Q0,[n("div",J0,[e.featuredAppData.iconUrl?(u(),f("img",{key:0,src:e.featuredAppData.iconUrl,alt:e.featuredAppData.name},null,8,X0)):(u(),Ne(k,{key:1,icon:"fluent-color:apps-24",class:"default-icon"}))]),n("div",Z0,[e.featuredAppData.price?(u(),f("div",Y0,h(e.featuredAppData.price),1)):T("",!0),n("div",e_,h(e.featuredAppData.name),1),e.featuredAppData.version?(u(),f("div",t_,h(e.featuredAppData.version),1)):T("",!0),e.featuredAppData.description?(u(),f("div",s_,h(e.featuredAppData.description),1)):T("",!0)])])])):T("",!0),n("div",n_,[e.imageViewerData?(u(),f("div",o_,[n("div",{class:"image-viewer-background",style:St(i())},null,4),n("div",a_,[n("div",l_,[e.imageViewerData.iconUrl?(u(),f("img",{key:0,src:e.imageViewerData.iconUrl,alt:"",class:"icon-image"},null,8,i_)):(u(),Ne(k,{key:1,icon:"fluent-color:image-24",class:"icon-large"}))]),n("div",r_,[(u(!0),f(ye,null,Ee(e.imageViewerData.tags,(p,d)=>(u(),f("span",{key:d,class:"format-tag"},h(p),1))),128))])]),n("div",c_,h(e.imageViewerData.title),1)])):T("",!0),e.entertainmentData?(u(),f("div",u_,[n("div",d_,[(u(!0),f(ye,null,Ee(e.entertainmentData.apps,(p,d)=>(u(),f("div",{class:"app-icon",key:d,onClick:Oe(v=>a(p),["stop"])},[p.iconUrl?(u(),f("img",{key:0,src:p.iconUrl,alt:p.name,class:"app-icon-image"},null,8,p_)):(u(),Ne(k,{key:1,icon:"fluent-color:play-circle-24"}))],8,f_))),128))]),n("div",v_,h(e.entertainmentData.title),1)])):T("",!0)])]))}}),h_=We(m_,[["__scopeId","data-v-b53155f3"]]),g_={class:"featured-scroll-wrapper"},y_={class:"featured-list"},b_=["onClick"],__={class:"featured-icon-wrapper"},w_=["src","alt"],k_={key:1,class:"featured-icon-placeholder"},$_={class:"featured-name"},C_={class:"featured-category"},I_={class:"category-tag"},S_=["onClick"],Fr=400,x_=ze({__name:"FeaturedApps",props:{apps:{}},emits:["appClick","action"],setup(e,{emit:t}){const s=e,o=t,a=w(null),l=w(!1),i=w(0),r=ge(()=>i.value>0),c=ge(()=>{if(!a.value)return!1;const E=a.value;return E.scrollWidth>E.clientWidth&&i.value<E.scrollWidth-E.clientWidth-1}),p=()=>{a.value&&(i.value=a.value.scrollLeft)},d=()=>{a.value&&a.value.scrollBy({left:-Fr,behavior:"smooth"})},v=()=>{a.value&&a.value.scrollBy({left:Fr,behavior:"smooth"})},b=E=>Y.getAppIconUrl(E.bundleId),_=()=>{},y=E=>{const F=E.bundleId.toLowerCase();return F.includes("social")||F.includes("chat")||F.includes("qq")||F.includes("wechat")?"社交":F.includes("music")||F.includes("video")||F.includes("player")?"娱乐":F.includes("design")||F.includes("photo")||F.includes("edit")?"设计":F.includes("tool")||F.includes("util")?"工具":"应用"},S=E=>E.status==="upgrade_available"?"更新":E.status==="injected"?"已安装":(E.status==="supported","获取"),C=E=>{o("appClick",E)},I=E=>{o("action",E)};Xe(()=>s.apps,()=>{pt(()=>{p()})},{immediate:!0});const x=()=>{pt(()=>{p()})};return nt(()=>{pt(()=>{p(),a.value&&a.value.addEventListener("scroll",p)}),window.addEventListener("resize",x)}),At(()=>{a.value&&a.value.removeEventListener("scroll",p),window.removeEventListener("resize",x)}),(E,F)=>(u(),f("div",{class:"featured-apps",onMouseenter:F[0]||(F[0]=W=>l.value=!0),onMouseleave:F[1]||(F[1]=W=>l.value=!1)},[F[2]||(F[2]=n("h3",{class:"section-title"},"推荐应用",-1)),n("div",g_,[n("div",{class:"featured-scroll",ref_key:"scrollContainer",ref:a},[n("div",y_,[(u(!0),f(ye,null,Ee(e.apps,W=>(u(),f("div",{key:W.bundleId,class:"featured-card",onClick:G=>C(W)},[n("div",__,[b(W)?(u(),f("img",{key:0,src:b(W),alt:W.name,class:"featured-icon",onError:_},null,40,w_)):(u(),f("div",k_,h(W.name.charAt(0).toUpperCase()),1))]),n("h4",$_,h(W.name),1),n("div",C_,[n("span",I_,h(y(W)),1)]),n("button",{class:"featured-button",onClick:Oe(G=>I(W),["stop"])},h(S(W)),9,S_)],8,b_))),128))])],512),r.value?(u(),f("button",{key:0,class:Te(["scroll-button scroll-button-left",{visible:l.value}]),onClick:d},[m(k,{icon:"mdi:chevron-left"})],2)):T("",!0),c.value?(u(),f("button",{key:1,class:Te(["scroll-button scroll-button-right",{visible:l.value}]),onClick:v},[m(k,{icon:"mdi:chevron-right"})],2)):T("",!0)])],32))}}),A_=We(x_,[["__scopeId","data-v-b2fac49e"]]),T_={class:"category-section"},E_={class:"category-content"},R_={class:"category-left"},U_={class:"featured-list"},P_=["onClick"],M_={class:"featured-large-icon-wrapper"},D_=["src","alt"],L_={key:1,class:"featured-large-icon-placeholder"},N_={class:"featured-large-info"},O_={class:"featured-large-name"},F_={class:"featured-large-desc"},V_=["onClick"],B_={class:"category-right"},j_={class:"category-grid"},q_=["onClick"],H_={class:"category-icon"},z_={class:"category-name"},W_=ze({__name:"CategorySection",props:{featuredApps:{},categories:{default:()=>[{id:"tools",name:"工具",icon:"fluent-color:wrench-24"},{id:"social",name:"社交",icon:"fluent-color:people-24"},{id:"entertainment",name:"娱乐",icon:"fluent-color:video-24"},{id:"design",name:"设计",icon:"fluent-color:paint-brush-24"},{id:"education",name:"教育",icon:"fluent-color:book-24"},{id:"productivity",name:"效率",icon:"fluent-color:briefcase-24"},{id:"photo",name:"摄影",icon:"fluent-color:camera-24"},{id:"music",name:"音乐",icon:"fluent-color:headphones-48"},{id:"news",name:"新闻",icon:"fluent-color:news-24"},{id:"health",name:"健康",icon:"fluent-color:heart-24"},{id:"finance",name:"财务",icon:"fluent-color:coin-multiple-48"},{id:"travel",name:"旅行",icon:"fluent-color:globe-24"}]}},emits:["appClick","action","categoryClick"],setup(e,{emit:t}){const s=t,o=p=>Y.getAppIconUrl(p.bundleId),a=()=>{},l=p=>p.status==="upgrade_available"?"更新":p.status==="injected"?"已安装":(p.status==="supported","获取"),i=p=>{s("appClick",p)},r=p=>{s("action",p)},c=p=>{s("categoryClick",p)};return(p,d)=>(u(),f("div",T_,[n("div",E_,[n("div",R_,[d[0]||(d[0]=n("h3",{class:"section-title"},"特色应用",-1)),n("div",U_,[(u(!0),f(ye,null,Ee(e.featuredApps.slice(0,2),v=>(u(),f("div",{key:v.bundleId,class:"featured-large-card",onClick:b=>i(v)},[n("div",M_,[o(v)?(u(),f("img",{key:0,src:o(v),alt:v.name,class:"featured-large-icon",onError:a},null,40,D_)):(u(),f("div",L_,h(v.name.charAt(0).toUpperCase()),1))]),n("div",N_,[n("h4",O_,h(v.name),1),n("p",F_,h(v.bundleId),1),n("button",{class:"featured-large-button",onClick:Oe(b=>r(v),["stop"])},h(l(v)),9,V_)])],8,P_))),128))])]),n("div",B_,[d[1]||(d[1]=n("h3",{class:"section-title"},"分类",-1)),n("div",j_,[(u(!0),f(ye,null,Ee(e.categories,v=>(u(),f("div",{key:v.id,class:"category-card",onClick:b=>c(v)},[n("div",H_,[m(k,{icon:v.icon},null,8,["icon"])]),n("span",z_,h(v.name),1)],8,q_))),128))])])])]))}}),K_=We(W_,[["__scopeId","data-v-c6a81573"]]),G_={class:"select-selected"},Q_=["onClick"],J_=ze({__name:"CustomSelect",props:{modelValue:{},options:{},placeholder:{default:"请选择"}},emits:["update:modelValue"],setup(e,{emit:t}){const s=e,o=t,a=w(!1),l=w(null),i=w(null),r=w({top:"0px",left:"0px",width:"200px"}),c=ge(()=>s.options.find(_=>_.value===s.modelValue)||null),p=()=>{!a.value||!l.value||pt(()=>{const _=l.value.getBoundingClientRect(),y=s.options.length*48+16,S=window.innerHeight-_.bottom,C=_.top;let I=_.bottom+8,x=_.left,E=_.width;S<y&&C>S&&(I=_.top-y-8),x+E>window.innerWidth&&(x=window.innerWidth-E-16),x<16&&(x=16),I<16&&(I=16),I+y>window.innerHeight-16&&(I=window.innerHeight-y-16),r.value={top:`${I}px`,left:`${x}px`,width:`${E}px`}})},d=()=>{a.value=!a.value,a.value&&p()},v=_=>{o("update:modelValue",_),a.value=!1},b=_=>{const y=_.target;l.value&&l.value.contains(y)||i.value&&i.value.contains(y)||(a.value=!1)};return Xe(a,_=>{_?(p(),window.addEventListener("scroll",p,!0),window.addEventListener("resize",p)):(window.removeEventListener("scroll",p,!0),window.removeEventListener("resize",p))}),nt(()=>{document.addEventListener("click",b)}),At(()=>{document.removeEventListener("click",b),window.removeEventListener("scroll",p,!0),window.removeEventListener("resize",p)}),(_,y)=>{var S,C;return u(),f("div",{class:"custom-select-wrapper",ref_key:"wrapperRef",ref:l},[n("div",{class:Te(["custom-select",{open:a.value}]),onClick:d},[n("div",G_,[m(k,{icon:((S=c.value)==null?void 0:S.icon)||"",class:"select-icon"},null,8,["icon"]),n("span",null,h(((C=c.value)==null?void 0:C.label)||e.placeholder),1),m(k,{icon:"fluent-color:chevron-down-24",class:Te(["select-arrow",{rotated:a.value}])},null,8,["class"])])],2),(u(),Ne(Ot,{to:"body"},[m(gt,{name:"dropdown-fade"},{default:lt(()=>[a.value?(u(),f("div",{key:0,ref_key:"dropdownRef",ref:i,class:"select-dropdown",style:St(r.value),onClick:y[0]||(y[0]=Oe(()=>{},["stop"]))},[(u(!0),f(ye,null,Ee(e.options,I=>(u(),f("div",{key:I.value,class:Te(["select-option",{active:e.modelValue===I.value}]),onClick:x=>v(I.value)},[m(k,{icon:I.icon,class:"option-icon"},null,8,["icon"]),n("span",null,h(I.label),1),e.modelValue===I.value?(u(),Ne(k,{key:0,icon:"fluent-color:checkmark-24",class:"option-check"})):T("",!0)],10,Q_))),128))],4)):T("",!0)]),_:1})]))],512)}}}),is=We(J_,[["__scopeId","data-v-d18bbb86"]]),X_={class:"app-list"},Z_={class:"search-header"},Y_={class:"search-title"},e2={class:"search-filters"},t2={class:"filter-tags"},s2={key:0,class:"loading"},n2={key:1,class:"error"},o2={key:2,class:"empty"},a2={key:3,class:"apps-grid search-results-grid"},l2={class:"hero-section"},i2={class:"list-section"},r2={class:"list-header"},c2={class:"section-title"},u2={class:"section-description"},d2={key:0,class:"loading"},f2={key:1,class:"error"},p2={key:2,class:"empty"},v2={key:3,class:"apps-grid"},m2={class:"list-footer"},h2={class:"footer-stats"},g2={class:"stat-item"},y2={class:"stat-value"},b2={class:"stat-item"},_2={class:"stat-value"},w2=ze({__name:"AppList",setup(e){const t=xn(),s=Gt(),o=so([]),a=w(!0),l=w(""),i=ge(()=>t.query.search||""),r=ge(()=>!!i.value),c=[{id:"all",label:"所有分类"},{id:"app",label:"应用"},{id:"game",label:"游戏"},{id:"mobile",label:"移动应用"}],p=w("all"),d=[{value:"all",label:"全部",icon:"fluent-color:text-bullet-list-square-sparkle-32"},{value:"injected",label:"已安装",icon:"fluent-color:checkmark-circle-24"},{value:"update",label:"可更新",icon:"fluent-color:arrow-download-24"},{value:"store",label:"商店应用",icon:"fluent-color:store-24"}],v=ge(()=>o.value.filter(N=>N.status==="injected"||N.status==="upgrade_available").slice(0,5)),b=ge(()=>{const N={id:"test-banner",type:"image",imageUrl:"https://cn.bing.com/th?id=OHR.LagoonNebula_ZH-CN3890147543_1920x1080.jpg",title:"测试横幅",description:"这是一个测试横幅展示",price:"",primaryAction:{label:"了解更多",action:"view"}},L=v.value.map(X=>{var de,ue;const ne=((de=X.update)==null?void 0:de.imageId)||[],ee=ne.length>0?ne[0]:void 0,we=ne.length>1;return{id:X.bundleId,type:we?"video":"image",imageId:ee,videoUrl:we&&ne[1]?Y.getImageUrl(ne[1],80,1920,1080):void 0,title:X.name,description:(ue=X.update)!=null&&ue.latestVersion?`版本 ${X.update.latestVersion}`:`版本 ${X.version}`,price:"",primaryAction:{label:X.status==="upgrade_available"?"查看详情":X.status==="injected"?"已安装":"获取",action:"view",route:`/app/${X.bundleId}`},secondaryAction:X.status==="upgrade_available"?{label:"更新",action:"update"}:void 0,app:X}});return[N,...L]}),_=ge(()=>o.value.length===0?{title:"App精选",apps:[]}:{title:"App精选",apps:[...o.value].sort(()=>Math.random()-.5).slice(0,6).map(ne=>({iconUrl:ne.hasIcon?Y.getAppIconUrl(ne.bundleId):void 0,name:ne.name,bundleId:ne.bundleId,...ne}))}),y=[["专业级应用,为您提供卓越的使用体验。","功能强大,界面简洁,操作便捷。","让您的工作和生活更加高效。"],["精心设计的应用,满足您的各种需求。","稳定可靠,性能优异,值得信赖。","为您带来全新的使用感受。"],["功能丰富,设计精美,体验流畅。","无论是工作还是娱乐,都能轻松应对。","让您的数字生活更加精彩。"],["强大的功能,简洁的界面,出色的性能。","为您提供专业级的解决方案。","让每一次使用都成为享受。"],["创新设计,卓越性能,完美体验。","满足您的专业需求和个人喜好。","让您的设备发挥最大潜力。"],["功能全面,操作简单,效果出色。","无论是新手还是专家都能轻松上手。","为您的工作和生活增添便利。"]],S=N=>{let L=0;for(let X=0;X<N.length;X++){const ne=N.charCodeAt(X);L=(L<<5)-L+ne,L=L&L}return Math.abs(L)},C=N=>{const L=S(N),X=L%y.length,ne=y[X],ee=L%2+2;return ne.slice(0,ee).join(" ")},I=ge(()=>{var ee,we;if(o.value.length===0)return;const N=v.value[0]||o.value.find(de=>de.update!==null)||o.value[0];if(!N)return;const L=N.hasIcon?Y.getAppIconUrl(N.bundleId):void 0,X=(ee=N.update)!=null&&ee.imageId&&N.update.imageId.length>0?Y.getImageUrl(N.update.imageId[0],80,800,600):void 0,ne=C(N.bundleId);return{name:N.name,iconUrl:L,version:((we=N.update)==null?void 0:we.latestVersion)||N.version,description:ne,price:"",screenshotUrl:X}}),x=ge(()=>{var we,de;if(o.value.length===0)return;const N=o.value.find(ue=>ue.update!==null)||o.value[0];if(!N)return;const L=N.hasIcon?Y.getAppIconUrl(N.bundleId):void 0,X=(we=N.update)!=null&&we.imageId&&N.update.imageId.length>0?Y.getImageUrl(N.update.imageId[0],80,800,600):void 0,ne=["JPG","PNG","GIF","HEIC","BMP","WEBP","TIFF","SVG","ICO","RAW","PSD","PDF"];let ee;if((de=N.update)!=null&&de.category&&N.update.category.length>0)ee=N.update.category;else{const ue=[...ne].sort(()=>Math.random()-.5),Z=Math.floor(Math.random()*2)+4;ee=ue.slice(0,Z)}return{title:N.name,iconUrl:L,tags:ee.slice(0,6),backgroundUrl:X}}),E=ge(()=>{let N=[...o.value];if(r.value&&i.value){const L=i.value.toLowerCase();N=N.filter(X=>X.name.toLowerCase().includes(L)||X.bundleId.toLowerCase().includes(L))}if(r.value&&p.value!=="all")switch(p.value){case"injected":N=N.filter(L=>L.status==="injected");break;case"update":N=N.filter(L=>L.status==="upgrade_available");break;case"store":N=N.filter(L=>L.update!==null);break}else if(!r.value){const L=t.query.filter;if(L)switch(L){case"injected":N=N.filter(X=>X.status==="injected");break;case"update":N=N.filter(X=>X.status==="upgrade_available");break;case"unsupported":N=N.filter(X=>X.status==="unsupported");break;case"store":N=N.filter(X=>X.update!==null);break}}return N.sort((L,X)=>L.name.localeCompare(X.name)),N}),F=()=>{switch(t.query.filter){case"injected":return"已注入应用";case"update":return"可更新应用";case"unsupported":return"不支持的应用";case"store":return"应用商店";default:return"所有应用"}},W=()=>{switch(t.query.filter){case"store":return"浏览和下载应用更新版本";case"injected":return"已成功注入的应用列表";case"update":return"有新版本可用的应用";case"unsupported":return"当前版本不支持的应用";default:return"系统中所有已安装的应用"}},G=async()=>{a.value=!0,l.value="";try{const N=await Y.getApps();o.value=N}catch(N){console.error("加载应用列表失败:",N),l.value="加载应用列表失败,请检查服务是否运行",o.value=[]}finally{a.value=!1}},re=async N=>{console.log(`应用 ${N} 已更新`),await G()},D=N=>{s.push(`/app/${N.bundleId}`)},U=N=>{console.log("应用操作:",N)},O=N=>{if(N.bundleId){const L=o.value.find(X=>X.bundleId===N.bundleId);L?D(L):s.push(`/app/${N.bundleId}`)}},$=(N,L)=>{const X=N==="primary"?L.primaryAction:L.secondaryAction;X&&(X.route?s.push(X.route):X.url?window.open(X.url,"_blank"):X.action==="update"&&L.app&&console.log("更新应用:",L.app))},R=(N,L)=>{console.log("轮播切换到:",N,L.title)},M=N=>{console.log("分类点击:",N)};return nt(()=>{G()}),(N,L)=>(u(),f("div",X_,[r.value?(u(),f(ye,{key:0},[n("div",Z_,[n("h2",Y_,'"'+h(i.value)+'"',1)]),n("div",e2,[n("div",t2,[(u(),f(ye,null,Ee(c,X=>n("button",{key:X.id,class:"filter-tag"},h(X.label),1)),64))]),m(is,{modelValue:p.value,"onUpdate:modelValue":L[0]||(L[0]=X=>p.value=X),options:d},null,8,["modelValue"])]),a.value?(u(),f("div",s2,[...L[1]||(L[1]=[n("div",{class:"spinner"},null,-1),n("p",null,"加载应用中...",-1)])])):l.value?(u(),f("div",n2,[n("p",null,h(l.value),1),n("button",{onClick:G,class:"btn btn-primary"},"重试")])):E.value.length===0?(u(),f("div",o2,[m(k,{icon:"fluent-color:apps-24",class:"empty-icon"}),L[2]||(L[2]=n("p",null,"没有找到应用",-1)),L[3]||(L[3]=n("p",{class:"empty-hint"},"尝试调整搜索条件或筛选器",-1))])):(u(),f("div",a2,[(u(!0),f(ye,null,Ee(E.value,X=>(u(),Ne(po,{key:X.bundleId,app:X,mode:"search","show-description":!0,onUpdated:re},null,8,["app"]))),128))]))],64)):(u(),f(ye,{key:1},[n("div",l2,[b.value.length>0?(u(),Ne(W0,{key:0,items:b.value,"auto-play":!0,"auto-play-interval":5e3,onAction:$,onSlideChange:R},null,8,["items"])):T("",!0),m(h_,{"entertainment-data":_.value,"image-viewer-data":x.value,"featured-app-data":I.value,onAppClick:O},null,8,["entertainment-data","image-viewer-data","featured-app-data"])]),v.value.length>0?(u(),Ne(A_,{key:0,apps:v.value,onAppClick:D,onAction:U},null,8,["apps"])):T("",!0),v.value.length>0?(u(),Ne(K_,{key:1,"featured-apps":v.value.slice(0,2),onAppClick:D,onAction:U,onCategoryClick:M},null,8,["featured-apps"])):T("",!0),n("div",i2,[n("div",r2,[n("h2",c2,h(F()),1),n("p",u2,h(W()),1)]),a.value?(u(),f("div",d2,[...L[4]||(L[4]=[n("div",{class:"spinner"},null,-1),n("p",null,"加载应用中...",-1)])])):l.value?(u(),f("div",f2,[n("p",null,h(l.value),1),n("button",{onClick:G,class:"btn btn-primary"},"重试")])):E.value.length===0?(u(),f("div",p2,[m(k,{icon:"fluent-color:apps-24",class:"empty-icon"}),L[5]||(L[5]=n("p",null,"没有找到应用",-1)),L[6]||(L[6]=n("p",{class:"empty-hint"},"尝试调整筛选器",-1))])):(u(),f("div",v2,[(u(!0),f(ye,null,Ee(E.value,X=>(u(),Ne(po,{key:X.bundleId,app:X,mode:"list",onUpdated:re},null,8,["app"]))),128))])),n("div",m2,[n("div",h2,[n("span",g2,[L[7]||(L[7]=n("span",{class:"stat-label"},"总计:",-1)),n("span",y2,h(o.value.length),1)]),n("span",b2,[L[8]||(L[8]=n("span",{class:"stat-label"},"显示:",-1)),n("span",_2,h(E.value.length),1)])])])])],64))]))}}),k2=We(w2,[["__scopeId","data-v-920f0a59"]]),$2={class:"dialog-header"},C2={class:"dialog-tabs"},I2={class:"dialog-content"},S2={class:"tab-content"},x2={class:"upload-card"},A2={class:"card-header"},T2={class:"card-badge"},E2={class:"card-body"},R2={key:1,class:"screenshots-grid"},U2=["src","alt"],P2=["onClick"],M2={key:0,class:"thumbnail-badge"},D2={class:"thumbnail-number"},L2={class:"tab-content"},N2={class:"form-card"},O2={class:"card-header"},F2={class:"card-body"},V2={class:"app-header-section"},B2={class:"icon-section"},j2={class:"app-icon-display"},q2=["src","alt"],H2={class:"icon-upload-control"},z2={key:0,class:"icon-status"},W2={class:"name-section"},K2={class:"form-group"},G2={class:"form-group"},Q2={class:"form-group"},J2={class:"form-group"},X2={class:"form-group"},Z2={class:"checkbox-label"},Y2={class:"tab-content"},ew={class:"form-card"},tw={class:"card-header"},sw={class:"card-body"},nw={class:"array-field"},ow={class:"field-header"},aw={key:0,class:"empty-state"},lw={key:1,class:"array-items"},iw=["onUpdate:modelValue","placeholder"],rw=["onClick"],cw={class:"array-field"},uw={class:"field-header"},dw={key:0,class:"empty-state"},fw={key:1,class:"array-items"},pw=["onUpdate:modelValue"],vw=["onClick"],mw={class:"array-field"},hw={class:"field-header"},gw={key:0,class:"empty-state"},yw={key:1,class:"array-items"},bw=["onUpdate:modelValue"],_w=["onClick"],ww={class:"array-field"},kw={class:"field-header"},$w={key:0,class:"empty-state"},Cw={key:1,class:"array-items"},Iw=["onUpdate:modelValue"],Sw=["onClick"],xw={class:"array-field"},Aw={class:"field-header"},Tw={key:0,class:"empty-state"},Ew={key:1,class:"array-items"},Rw=["onUpdate:modelValue"],Uw=["onClick"],Pw={class:"array-field"},Mw={class:"field-header"},Dw={key:0,class:"empty-state"},Lw={key:1,class:"array-items"},Nw=["onUpdate:modelValue"],Ow=["onClick"],Fw={key:0,class:"upload-progress-bar"},Vw={class:"progress-info"},Bw={class:"progress-text"},jw={class:"progress-percent"},qw={class:"progress-bar"},Hw={key:1,class:"error-banner"},zw={class:"dialog-footer"},Ww=["disabled"],Kw=["disabled"],Gw=ze({__name:"AppInfoUploadDialog",props:{visible:{type:Boolean},app:{}},emits:["close","success"],setup(e,{emit:t}){const s=e,o=t,a=w("images"),l=w(null),i=w(null),r=w({bundleId:"",appName:"",appVersion:"",description:"",permissions:[],compatibility:[],architecture:[],language:[],category:[],developer:[],isDMCAed:!1}),c=w(null),p=w([]),d=w(!1),v=w(0),b=w(""),_=w(""),y=ge(()=>!d.value&&r.value.appName.trim()!=="");ge(()=>c.value?c.value.thumbnailUrl||c.value.preview:"");const S=ge(()=>c.value&&c.value.preview?c.value.preview:s.app?Y.getAppIconUrl(s.app.bundleId):"");Xe(()=>s.app,O=>{O&&(r.value.bundleId=O.bundleId,r.value.appName=O.name,r.value.appVersion=O.version)},{immediate:!0}),Xe(()=>s.visible,O=>{O&&(a.value="images")});const C=()=>{var O;(O=l.value)==null||O.click()},I=O=>{var N;const R=(N=O.target.files)==null?void 0:N[0];if(!R)return;const M=new FileReader;M.onload=L=>{var ne;const X=(ne=L.target)==null?void 0:ne.result;c.value={file:R,preview:X}},M.readAsDataURL(R)},x=()=>{var O;(O=i.value)==null||O.click()},E=O=>{const R=O.target.files;if(!R)return;const M=5-p.value.length;Array.from(R).slice(0,M).forEach(L=>{const X=new FileReader;X.onload=ne=>{var ee;p.value.push({file:L,preview:(ee=ne.target)==null?void 0:ee.result})},X.readAsDataURL(L)}),i.value&&(i.value.value="")},F=O=>{p.value.splice(O,1)},W=O=>{const $=r.value[O];Array.isArray($)&&$.push("")},G=(O,$)=>{const R=r.value[O];Array.isArray(R)&&R.splice($,1)},re=async()=>{var O,$;if(y.value){_.value="",d.value=!0,v.value=0,b.value="准备上传...";try{let R="",M=null;if(c.value&&c.value.file)M=c.value.file;else if(s.app){b.value="正在获取应用图标...",v.value=5;try{const we=Y.getAppIconUrl(s.app.bundleId),de=await fetch(we);if(!de.ok)throw new Error("获取应用图标失败");const ue=await de.blob();M=new File([ue],`${s.app.bundleId}.png`,{type:ue.type||"image/png"})}catch(we){throw new Error(`获取应用图标失败: ${we.message||"未知错误"}`)}}else throw new Error("请先选择应用图标或确保当前应用存在");if(!M)throw new Error("无法获取图标文件");b.value="正在上传图标...",v.value=10;const N=await Y.uploadImage("icon",M);if(!N.success||!((O=N.data)!=null&&O.fileId))throw new Error(N.message||"上传图标失败");R=N.data.fileId,v.value=30,b.value="正在上传截图...";const L=[];for(let we=0;we<p.value.length;we++){const de=p.value[we];v.value=30+we/p.value.length*30,b.value=`正在上传截图 ${we+1}/${p.value.length}...`;const ue=await Y.uploadImage("appImage",de.file);ue.success&&(($=ue.data)!=null&&$.fileId)?L.push(ue.data.fileId):console.warn(`截图 ${we+1} 上传失败:`,ue.message)}v.value=60,b.value="正在提交应用信息...";const X=new Date().toISOString(),ne={bundleId:r.value.bundleId,appName:r.value.appName.trim(),appVersion:r.value.appVersion,iconId:R,imageId:L,description:r.value.description.trim(),permissions:r.value.permissions.filter(we=>we.trim()!==""),releaseDate:X,updateDate:X,compatibility:r.value.compatibility.filter(we=>we.trim()!==""),architecture:r.value.architecture.filter(we=>we.trim()!==""),language:r.value.language.filter(we=>we.trim()!==""),category:r.value.category.filter(we=>we.trim()!==""),developer:r.value.developer.filter(we=>we.trim()!==""),isDMCAed:r.value.isDMCAed};v.value=80;const ee=await Y.uploadAppInfo(ne);if(!ee.success)throw new Error(ee.message||"上传应用信息失败");v.value=100,b.value="上传成功!",setTimeout(()=>{o("success"),D()},500)}catch(R){_.value=R.message||"上传失败,请重试",console.error("上传失败:",R)}finally{d.value=!1}}},D=()=>{var O,$,R;d.value||(o("close"),r.value={bundleId:((O=s.app)==null?void 0:O.bundleId)||"",appName:(($=s.app)==null?void 0:$.name)||"",appVersion:((R=s.app)==null?void 0:R.version)||"",description:"",permissions:[],compatibility:[],architecture:[],language:[],category:[],developer:[],isDMCAed:!1},c.value=null,p.value=[],_.value="",v.value=0,b.value="",a.value="images")},U=O=>{O.target===O.currentTarget&&!d.value&&D()};return(O,$)=>e.visible?(u(),f("div",{key:0,class:"dialog-overlay",onClick:U},[n("div",{class:"dialog-container",onClick:$[14]||($[14]=Oe(()=>{},["stop"]))},[n("div",$2,[$[15]||($[15]=n("h2",{class:"dialog-title"},"上传应用信息",-1)),n("button",{class:"dialog-close",onClick:D},[m(k,{icon:"mdi:close"})])]),n("div",C2,[n("button",{class:Te(["tab-button",{active:a.value==="images"}]),onClick:$[0]||($[0]=R=>a.value="images")},[m(k,{icon:"mdi:image",class:"tab-icon"}),$[16]||($[16]=$e(" 图片 ",-1))],2),n("button",{class:Te(["tab-button",{active:a.value==="basic"}]),onClick:$[1]||($[1]=R=>a.value="basic")},[m(k,{icon:"mdi:information",class:"tab-icon"}),$[17]||($[17]=$e(" 基本信息 ",-1))],2),n("button",{class:Te(["tab-button",{active:a.value==="details"}]),onClick:$[2]||($[2]=R=>a.value="details")},[m(k,{icon:"mdi:format-list-bulleted",class:"tab-icon"}),$[18]||($[18]=$e(" 详细信息 ",-1))],2)]),n("div",I2,[Ve(n("div",S2,[n("div",x2,[n("div",A2,[m(k,{icon:"mdi:image-multiple",class:"card-icon"}),$[19]||($[19]=n("h3",null,"应用截图",-1)),n("span",T2,h(p.value.length)+"/5",1)]),n("div",E2,[n("input",{ref_key:"screenshotInput",ref:i,type:"file",accept:"image/*",multiple:"",onChange:E,class:"file-input",style:{display:"none"}},null,544),p.value.length===0?(u(),f("div",{key:0,class:"upload-area",onClick:x},[m(k,{icon:"mdi:image-multiple-outline",class:"upload-icon"}),$[20]||($[20]=n("p",{class:"upload-text"},"点击选择截图",-1)),$[21]||($[21]=n("p",{class:"upload-hint"},"最多可选择5张图片",-1))])):(u(),f("div",R2,[(u(!0),f(ye,null,Ee(p.value,(R,M)=>(u(),f("div",{key:M,class:"thumbnail-box"},[n("img",{src:R.thumbnailUrl||R.preview,alt:`截图${M+1}`},null,8,U2),n("button",{onClick:N=>F(M),class:"thumbnail-remove"},[m(k,{icon:"mdi:close"})],8,P2),R.fileId?(u(),f("div",M2,[m(k,{icon:"mdi:check-circle"})])):T("",!0),n("div",D2,h(M+1),1)]))),128)),p.value.length<5?(u(),f("div",{key:0,class:"thumbnail-box add-more",onClick:x},[m(k,{icon:"mdi:plus",class:"add-icon"}),$[22]||($[22]=n("p",null,"添加更多",-1))])):T("",!0)]))])])],512),[[ls,a.value==="images"]]),Ve(n("div",L2,[n("div",N2,[n("div",O2,[m(k,{icon:"mdi:information",class:"card-icon"}),$[23]||($[23]=n("h3",null,"基本信息",-1))]),n("div",F2,[n("div",V2,[n("div",B2,[n("div",j2,[n("img",{src:S.value,alt:r.value.appName||"应用图标"},null,8,q2)]),n("div",H2,[n("input",{ref_key:"iconInput",ref:l,type:"file",accept:"image/*",onChange:I,class:"file-input",style:{display:"none"}},null,544),n("button",{onClick:C,class:"btn-icon-upload"},[m(k,{icon:"mdi:image-edit",class:"btn-icon"}),$e(" "+h(c.value?"更换图标":"上传图标"),1)]),c.value?(u(),f("div",z2,[m(k,{icon:"mdi:check-circle",class:"status-icon success"}),$[24]||($[24]=n("span",null,"已选择图标",-1))])):T("",!0)])]),n("div",W2,[n("div",K2,[$[25]||($[25]=n("label",{class:"form-label"},[$e(" 应用名称 "),n("span",{class:"required"},"*")],-1)),Ve(n("input",{"onUpdate:modelValue":$[3]||($[3]=R=>r.value.appName=R),type:"text",placeholder:"请输入应用名称",required:"",class:"form-input"},null,512),[[Ke,r.value.appName]])]),n("div",G2,[$[26]||($[26]=n("label",{class:"form-label"},"版本号",-1)),Ve(n("input",{"onUpdate:modelValue":$[4]||($[4]=R=>r.value.appVersion=R),type:"text",readonly:"",class:"form-input readonly-input"},null,512),[[Ke,r.value.appVersion]])])])]),n("div",Q2,[$[27]||($[27]=n("label",{class:"form-label"},"Bundle ID",-1)),Ve(n("input",{"onUpdate:modelValue":$[5]||($[5]=R=>r.value.bundleId=R),type:"text",readonly:"",class:"form-input readonly-input"},null,512),[[Ke,r.value.bundleId]])]),n("div",J2,[$[28]||($[28]=n("label",{class:"form-label"},"应用描述",-1)),Ve(n("textarea",{"onUpdate:modelValue":$[6]||($[6]=R=>r.value.description=R),placeholder:"请输入应用描述...",rows:"5",class:"form-textarea"},null,512),[[Ke,r.value.description]])]),n("div",X2,[n("label",Z2,[Ve(n("input",{"onUpdate:modelValue":$[7]||($[7]=R=>r.value.isDMCAed=R),type:"checkbox"},null,512),[[du,r.value.isDMCAed]]),$[29]||($[29]=n("span",null,"是否被DMCA",-1))])])])])],512),[[ls,a.value==="basic"]]),Ve(n("div",Y2,[n("div",ew,[n("div",tw,[m(k,{icon:"mdi:format-list-bulleted",class:"card-icon"}),$[30]||($[30]=n("h3",null,"详细信息",-1))]),n("div",sw,[n("div",nw,[n("div",ow,[$[32]||($[32]=n("label",null,"权限列表",-1)),n("button",{onClick:$[8]||($[8]=R=>W("permissions")),class:"btn-icon-text"},[m(k,{icon:"mdi:plus"}),$[31]||($[31]=$e(" 添加 ",-1))])]),r.value.permissions.length===0?(u(),f("div",aw,[m(k,{icon:"mdi:shield-off",class:"empty-icon"}),$[33]||($[33]=n("p",null,"暂无权限信息",-1))])):(u(),f("div",lw,[(u(!0),f(ye,null,Ee(r.value.permissions,(R,M)=>(u(),f("div",{key:M,class:"array-item-row"},[Ve(n("input",{"onUpdate:modelValue":N=>r.value.permissions[M]=N,type:"text",placeholder:`权限 ${M+1}`},null,8,iw),[[Ke,r.value.permissions[M]]]),n("button",{onClick:N=>G("permissions",M),class:"btn-icon-danger"},[m(k,{icon:"mdi:delete"})],8,rw)]))),128))]))]),n("div",cw,[n("div",uw,[$[35]||($[35]=n("label",null,"系统兼容性",-1)),n("button",{onClick:$[9]||($[9]=R=>W("compatibility")),class:"btn-icon-text"},[m(k,{icon:"mdi:plus"}),$[34]||($[34]=$e(" 添加 ",-1))])]),r.value.compatibility.length===0?(u(),f("div",dw,[m(k,{icon:"mdi:desktop-classic",class:"empty-icon"}),$[36]||($[36]=n("p",null,"暂无兼容性信息",-1))])):(u(),f("div",fw,[(u(!0),f(ye,null,Ee(r.value.compatibility,(R,M)=>(u(),f("div",{key:M,class:"array-item-row"},[Ve(n("input",{"onUpdate:modelValue":N=>r.value.compatibility[M]=N,type:"text",placeholder:"例如: macOS 10.15"},null,8,pw),[[Ke,r.value.compatibility[M]]]),n("button",{onClick:N=>G("compatibility",M),class:"btn-icon-danger"},[m(k,{icon:"mdi:delete"})],8,vw)]))),128))]))]),n("div",mw,[n("div",hw,[$[38]||($[38]=n("label",null,"系统架构",-1)),n("button",{onClick:$[10]||($[10]=R=>W("architecture")),class:"btn-icon-text"},[m(k,{icon:"mdi:plus"}),$[37]||($[37]=$e(" 添加 ",-1))])]),r.value.architecture.length===0?(u(),f("div",gw,[m(k,{icon:"mdi:cpu-64-bit",class:"empty-icon"}),$[39]||($[39]=n("p",null,"暂无架构信息",-1))])):(u(),f("div",yw,[(u(!0),f(ye,null,Ee(r.value.architecture,(R,M)=>(u(),f("div",{key:M,class:"array-item-row"},[Ve(n("input",{"onUpdate:modelValue":N=>r.value.architecture[M]=N,type:"text",placeholder:"例如: x86_64, arm64"},null,8,bw),[[Ke,r.value.architecture[M]]]),n("button",{onClick:N=>G("architecture",M),class:"btn-icon-danger"},[m(k,{icon:"mdi:delete"})],8,_w)]))),128))]))]),n("div",ww,[n("div",kw,[$[41]||($[41]=n("label",null,"支持语言",-1)),n("button",{onClick:$[11]||($[11]=R=>W("language")),class:"btn-icon-text"},[m(k,{icon:"mdi:plus"}),$[40]||($[40]=$e(" 添加 ",-1))])]),r.value.language.length===0?(u(),f("div",$w,[m(k,{icon:"mdi:translate",class:"empty-icon"}),$[42]||($[42]=n("p",null,"暂无语言信息",-1))])):(u(),f("div",Cw,[(u(!0),f(ye,null,Ee(r.value.language,(R,M)=>(u(),f("div",{key:M,class:"array-item-row"},[Ve(n("input",{"onUpdate:modelValue":N=>r.value.language[M]=N,type:"text",placeholder:"例如: English, Chinese"},null,8,Iw),[[Ke,r.value.language[M]]]),n("button",{onClick:N=>G("language",M),class:"btn-icon-danger"},[m(k,{icon:"mdi:delete"})],8,Sw)]))),128))]))]),n("div",xw,[n("div",Aw,[$[44]||($[44]=n("label",null,"应用分类",-1)),n("button",{onClick:$[12]||($[12]=R=>W("category")),class:"btn-icon-text"},[m(k,{icon:"mdi:plus"}),$[43]||($[43]=$e(" 添加 ",-1))])]),r.value.category.length===0?(u(),f("div",Tw,[m(k,{icon:"mdi:folder",class:"empty-icon"}),$[45]||($[45]=n("p",null,"暂无分类信息",-1))])):(u(),f("div",Ew,[(u(!0),f(ye,null,Ee(r.value.category,(R,M)=>(u(),f("div",{key:M,class:"array-item-row"},[Ve(n("input",{"onUpdate:modelValue":N=>r.value.category[M]=N,type:"text",placeholder:"例如: Productivity, Games"},null,8,Rw),[[Ke,r.value.category[M]]]),n("button",{onClick:N=>G("category",M),class:"btn-icon-danger"},[m(k,{icon:"mdi:delete"})],8,Uw)]))),128))]))]),n("div",Pw,[n("div",Mw,[$[47]||($[47]=n("label",null,"开发者",-1)),n("button",{onClick:$[13]||($[13]=R=>W("developer")),class:"btn-icon-text"},[m(k,{icon:"mdi:plus"}),$[46]||($[46]=$e(" 添加 ",-1))])]),r.value.developer.length===0?(u(),f("div",Dw,[m(k,{icon:"mdi:account",class:"empty-icon"}),$[48]||($[48]=n("p",null,"暂无开发者信息",-1))])):(u(),f("div",Lw,[(u(!0),f(ye,null,Ee(r.value.developer,(R,M)=>(u(),f("div",{key:M,class:"array-item-row"},[Ve(n("input",{"onUpdate:modelValue":N=>r.value.developer[M]=N,type:"text",placeholder:"例如: Apple Inc."},null,8,Nw),[[Ke,r.value.developer[M]]]),n("button",{onClick:N=>G("developer",M),class:"btn-icon-danger"},[m(k,{icon:"mdi:delete"})],8,Ow)]))),128))]))])])])],512),[[ls,a.value==="details"]]),d.value?(u(),f("div",Fw,[n("div",Vw,[m(k,{icon:"mdi:cloud-upload",class:"progress-icon"}),n("span",Bw,h(b.value),1),n("span",jw,h(v.value)+"%",1)]),n("div",qw,[n("div",{class:"progress-fill",style:St({width:`${v.value}%`})},null,4)])])):T("",!0),_.value?(u(),f("div",Hw,[m(k,{icon:"mdi:alert-circle",class:"error-icon"}),n("span",null,h(_.value),1)])):T("",!0)]),n("div",zw,[n("button",{onClick:D,class:"btn btn-secondary",disabled:d.value}," 取消 ",8,Ww),n("button",{onClick:re,class:"btn btn-primary",disabled:d.value||!y.value},[d.value?(u(),Ne(k,{key:0,icon:"mdi:loading",class:"btn-icon spinning"})):T("",!0),$e(" "+h(d.value?"上传中...":"确认上传"),1)],8,Kw)])])])):T("",!0)}}),Qw=We(Gw,[["__scopeId","data-v-6f782ff2"]]),Jw={class:"app-recommendations"},Xw={class:"recommendations-header"},Zw={key:0,class:"loading"},Yw={key:1,class:"error"},ek={key:2,class:"empty"},tk={key:3,class:"recommendations-list"},sk=["onClick"],nk={class:"app-icon-small"},ok=["src","alt"],ak={key:1,class:"icon-placeholder-small"},lk={class:"app-info-small"},ik={class:"app-name-small"},rk=["onClick"],ck=ze({__name:"AppRecommendations",props:{currentBundleId:{}},setup(e){const t=e,s=Gt(),o=w([]),a=w(!0),l=w(""),i=async()=>{a.value=!0,l.value="";try{const _=[...(await Y.getApps()).filter(y=>y.bundleId!==t.currentBundleId)].sort(()=>Math.random()-.5);o.value=_.slice(0,4)}catch(v){console.error("加载推荐应用失败:",v),l.value="加载推荐应用失败"}finally{a.value=!1}},r=v=>Y.getAppIconUrl(v),c=v=>{s.push(`/app/${v.bundleId}`).then(()=>{window.location.reload()})},p=v=>{s.push(`/app/${v.bundleId}`).then(()=>{window.location.reload()})},d=v=>{const b=v.target;b.style.display="none";const _=b.nextElementSibling;_&&(_.style.display="flex")};return nt(()=>{i()}),(v,b)=>(u(),f("div",Jw,[n("div",Xw,[b[0]||(b[0]=n("h2",null,"发现更多",-1)),m(k,{icon:"fluent-color:arrow-right-24"})]),a.value?(u(),f("div",Zw,[...b[1]||(b[1]=[n("div",{class:"spinner"},null,-1)])])):l.value?(u(),f("div",Yw,[n("p",null,h(l.value),1)])):o.value.length===0?(u(),f("div",ek,[...b[2]||(b[2]=[n("p",null,"暂无推荐应用",-1)])])):(u(),f("div",tk,[(u(!0),f(ye,null,Ee(o.value,_=>(u(),f("div",{key:_.bundleId,class:"recommendation-item",onClick:y=>c(_)},[n("div",nk,[_.hasIcon?(u(),f("img",{key:0,src:r(_.bundleId),alt:_.name,onError:d},null,40,ok)):(u(),f("div",ak,h(_.name.charAt(0).toUpperCase()),1))]),n("div",lk,[n("h3",ik,h(_.name),1),n("button",{class:"download-btn",onClick:Oe(y=>p(_),["stop"])}," 免费下载 ",8,rk)])],8,sk))),128))]))]))}}),uk=We(ck,[["__scopeId","data-v-c58086a4"]]);var ss=(e=>(e.PENDING="pending",e.APPROVED="approved",e.REJECTED="rejected",e))(ss||{});const Js={pornography:{label:"涉黄",icon:"mdi:eye-off-outline",colorClass:"type-pornography"},fraud:{label:"诈骗",icon:"mdi:shield-alert-outline",colorClass:"type-fraud"},malicious_drainage:{label:"恶意引流",icon:"mdi:link-variant-off",colorClass:"type-drainage"},abuse:{label:"侮辱谩骂",icon:"mdi:emoticon-angry-outline",colorClass:"type-abuse"},trolling:{label:"引战",icon:"mdi:fire",colorClass:"type-trolling"},against_values:{label:"不符合社会核心主义价值观",icon:"mdi:flag-outline",colorClass:"type-values"}};function pd(e){return Js[e]||{label:e,icon:"mdi:help-circle-outline",colorClass:""}}function vd(e){return pd(e).label}function md(e){return pd(e).colorClass}const dk={class:"image-container"},fk=["src","alt"],pk={key:1,class:"loading-state"},vk={key:2,class:"error-state"},mk={key:2,class:"image-info"},hk={class:"image-index"},gk={key:0,class:"image-size"},yk=ze({__name:"ImagePreviewModal",props:{visible:{type:Boolean},imageUrl:{default:null},images:{default:()=>[]},imagesInfo:{default:()=>[]},initialIndex:{default:0},showNavigation:{type:Boolean,default:!0},showInfo:{type:Boolean,default:!0}},emits:["close","indexChange"],setup(e,{emit:t}){const s=e,o=t,a=w(s.initialIndex),l=w(null),i=w(!1),r=w(!1),c=ge(()=>s.imagesInfo&&s.imagesInfo.length>0?s.imagesInfo.map(x=>x.url):s.images&&s.images.length>0?s.images:s.imageUrl?[s.imageUrl]:[]),p=ge(()=>{if(s.imagesInfo&&s.imagesInfo.length>0){const x=s.imagesInfo[a.value];return x==null?void 0:x.size}}),d=x=>x?x<1024?`${x} B`:x<1024*1024?`${(x/1024).toFixed(1)} KB`:`${(x/(1024*1024)).toFixed(1)} MB`:"",v=()=>{if(c.value.length===0){l.value=null;return}const x=c.value[a.value];if(!x){r.value=!0,l.value=null;return}i.value=!1,r.value=!1,l.value=x},b=()=>{a.value>0&&(a.value--,o("indexChange",a.value))},_=()=>{a.value<c.value.length-1&&(a.value++,o("indexChange",a.value))},y=()=>{o("close")},S=x=>{x.key==="Escape"?y():x.key==="ArrowLeft"?b():x.key==="ArrowRight"&&_()},C=()=>{r.value=!1},I=()=>{r.value=!0,l.value=null};return Xe(()=>s.visible,x=>{x?(a.value=s.initialIndex,v(),pt(()=>{const E=document.querySelector(".image-preview-modal");E&&E.focus()})):(l.value=null,i.value=!1,r.value=!1)},{immediate:!0}),Xe(a,()=>{v()}),Xe(()=>s.images,()=>{s.visible&&v()}),nt(()=>{s.visible&&v()}),(x,E)=>(u(),Ne(Ot,{to:"body"},[m(gt,{name:"preview-fade"},{default:lt(()=>[e.visible?(u(),f("div",{key:0,class:"image-preview-modal",onClick:y,onKeydown:S,tabindex:"-1"},[n("div",{class:"preview-content",onClick:E[0]||(E[0]=Oe(()=>{},["stop"]))},[e.showNavigation&&a.value>0?(u(),f("button",{key:0,class:"nav-btn prev-btn",onClick:Oe(b,["stop"]),title:"上一张 (←)"},[m(k,{icon:"mdi:chevron-left"})])):T("",!0),n("div",dk,[l.value?(u(),f("img",{key:0,src:l.value,alt:`图片 ${a.value+1}`,onLoad:C,onError:I},null,40,fk)):i.value?(u(),f("div",pk,[...E[1]||(E[1]=[n("div",{class:"spinner"},null,-1),n("p",null,"加载中...",-1)])])):r.value?(u(),f("div",vk,[m(k,{icon:"mdi:image-broken"}),E[2]||(E[2]=n("p",null,"图片加载失败",-1))])):T("",!0)]),e.showNavigation&&a.value<c.value.length-1?(u(),f("button",{key:1,class:"nav-btn next-btn",onClick:Oe(_,["stop"]),title:"下一张 (→)"},[m(k,{icon:"mdi:chevron-right"})])):T("",!0),n("button",{class:"close-preview-btn",onClick:Oe(y,["stop"]),title:"关闭 (ESC)"},[m(k,{icon:"mdi:close"})]),e.showInfo&&c.value.length>0?(u(),f("div",mk,[n("span",hk,h(a.value+1)+" / "+h(c.value.length),1),p.value?(u(),f("span",gk,h(d(p.value)),1)):T("",!0)])):T("",!0)])],32)):T("",!0)]),_:1})]))}}),Tn=We(yk,[["__scopeId","data-v-ba76c315"]]),bk={key:0,class:"image-list"},_k=["onClick"],wk={class:"image-wrapper"},kk=["src","alt","onError"],$k={key:1,class:"image-error"},Ck={key:0,class:"image-index"},Ik=ze({__name:"ImageList",props:{images:{},showIndex:{type:Boolean,default:!1},columns:{default:3},maxWidth:{default:void 0}},emits:["imageClick"],setup(e,{emit:t}){xp(c=>({v7d5d96be:c.columns,d79a8c5a:l.value}));const s=e,o=t,a=w(new Map),l=ge(()=>s.maxWidth?`${s.maxWidth}px`:"none"),i=c=>{const p=s.images[c];o("imageClick",c,p)},r=c=>{a.value.set(c,!0)};return(c,p)=>e.images.length>0?(u(),f("div",bk,[(u(!0),f(ye,null,Ee(e.images,(d,v)=>(u(),f("div",{key:v,class:"image-item",onClick:b=>i(v)},[n("div",wk,[d&&!a.value.has(v)?(u(),f("img",{key:0,src:d,alt:`图片 ${v+1}`,onError:b=>r(v)},null,40,kk)):T("",!0),a.value.has(v)?(u(),f("div",$k,[m(k,{icon:"mdi:image-broken"}),p[0]||(p[0]=n("span",null,"加载失败",-1))])):T("",!0)]),e.showIndex?(u(),f("div",Ck,h(v+1)+"/"+h(e.images.length),1)):T("",!0)],8,_k))),128))])):T("",!0)}}),mn=We(Ik,[["__scopeId","data-v-77a5a861"]]),Sk={class:"reply-item"},xk={class:"reply-avatar"},Ak={class:"reply-content-wrapper"},Tk={class:"reply-header"},Ek={key:1,class:"replyer-name"},Rk={key:2,class:"reply-to-name"},Uk={key:3,class:"reply-to-name"},Pk={class:"reply-date"},Mk={class:"reply-text"},Dk={class:"reply-actions"},Lk={key:0,class:"nested-replies-list"},Nk=ze({__name:"ReplyItem",props:{reply:{},showReplyButton:{type:Boolean,default:!0}},emits:["like","dislike","reply","nestedLike","nestedDislike","userHover","userLeave"],setup(e,{emit:t}){const s=t,o=()=>{s("like")},a=()=>{s("dislike")},l=()=>{s("reply")},i=p=>{s("nestedLike",p)},r=p=>{s("nestedDislike",p)},c=p=>{try{const d=new Date(p),b=new Date().getTime()-d.getTime(),_=Math.floor(b/(1e3*60)),y=Math.floor(b/(1e3*60*60)),S=Math.floor(b/(1e3*60*60*24));return _<1?"刚刚":_<60?`${_}分钟前`:y<24?`${y}小时前`:S<30?`${S}天前`:S<365?`${Math.floor(S/30)}个月前`:`${Math.floor(S/365)}年前`}catch{return p}};return(p,d)=>{const v=Pc("ReplyItem",!0);return u(),f("div",Sk,[n("div",xk,[m(Et,{"avatar-id":e.reply.userAvatar,"user-name":e.reply.userName,size:"small"},null,8,["avatar-id","user-name"])]),n("div",Ak,[n("div",Tk,[e.reply.userId?(u(),f("span",{key:0,class:"replyer-name clickable",onMouseenter:d[0]||(d[0]=Oe(b=>p.$emit("userHover",b,e.reply.userId,e.reply.userName,e.reply.userAvatar),["stop"])),onMouseleave:d[1]||(d[1]=Oe(b=>p.$emit("userLeave"),["stop"]))},h(e.reply.userName),33)):(u(),f("span",Ek,h(e.reply.userName),1)),e.reply.replyToUserName&&e.reply.replyToUserId?(u(),f("span",Rk,[d[6]||(d[6]=$e(" 回复 ",-1)),n("span",{class:"reply-to-name-clickable clickable",onMouseenter:d[2]||(d[2]=Oe(b=>p.$emit("userHover",b,e.reply.replyToUserId,e.reply.replyToUserName,e.reply.replyToUserAvatar),["stop"])),onMouseleave:d[3]||(d[3]=Oe(b=>p.$emit("userLeave"),["stop"]))}," @"+h(e.reply.replyToUserName),33)])):e.reply.replyToUserName?(u(),f("span",Uk," 回复 @"+h(e.reply.replyToUserName),1)):T("",!0),n("span",Pk,h(c(e.reply.date)),1)]),n("p",Mk,h(e.reply.content),1),n("div",Dk,[n("button",{class:Te(["action-btn small",{active:e.reply.userLikeStatus==="liked"}]),onClick:o},[m(k,{icon:e.reply.userLikeStatus==="liked"?"mdi:thumb-up":"mdi:thumb-up-outline",class:"action-icon"},null,8,["icon"]),n("span",null,h(e.reply.likeCount),1)],2),n("button",{class:Te(["action-btn small",{active:e.reply.userLikeStatus==="disliked"}]),onClick:a},[m(k,{icon:e.reply.userLikeStatus==="disliked"?"mdi:thumb-down":"mdi:thumb-down-outline",class:"action-icon"},null,8,["icon"]),n("span",null,h(e.reply.dislikeCount),1)],2),e.showReplyButton?(u(),f("button",{key:0,class:"action-btn small reply-btn",onClick:l},[m(k,{icon:"mdi:reply-outline",class:"action-icon"}),d[7]||(d[7]=n("span",null,"回复",-1))])):T("",!0)]),hn(p.$slots,"nested-reply-form",{},void 0),e.reply.nestedReplies&&e.reply.nestedReplies.length>0?(u(),f("div",Lk,[(u(!0),f(ye,null,Ee(e.reply.nestedReplies,b=>(u(),Ne(v,{key:b.id,reply:b,"show-reply-button":!1,onLike:_=>i(b.id),onDislike:_=>r(b.id),onUserHover:d[4]||(d[4]=(_,y,S,C)=>s("userHover",_,y,S,C)),onUserLeave:d[5]||(d[5]=_=>s("userLeave"))},{"nested-reply-form":lt(({replyId:_})=>[hn(p.$slots,"nested-reply-form",{replyId:_},void 0,!0)]),_:3},8,["reply","onLike","onDislike"]))),128))])):T("",!0)])])}}}),Ok=We(Nk,[["__scopeId","data-v-682f95a5"]]),Fk={class:"comment-form"},Vk={class:"form-avatar"},Bk={class:"form-content"},jk={key:0,class:"reply-to-hint"},qk=["placeholder","rows","maxlength"],Hk={class:"form-actions"},zk={class:"image-upload-area"},Wk=["disabled"],Kk={key:0,class:"image-count"},Gk={class:"form-buttons"},Qk=["disabled"],Jk={key:1,class:"image-preview-list"},Xk=["src","alt"],Zk=["onClick"],Yk={key:0,class:"image-error"},e$=ze({__name:"CommentForm",props:{userAvatar:{},userName:{},isReply:{type:Boolean,default:!1},replyToUserName:{},modelValue:{},placeholder:{default:"写下你的想法..."},maxImages:{default:5},avatarSize:{default:"medium"},submitText:{default:"发表评论"}},emits:["update:modelValue","submit","cancel"],setup(e,{expose:t,emit:s}){const o=e,a=s,l=ge({get:()=>o.modelValue||"",set:S=>a("update:modelValue",S)}),i=w(null),r=w([]),c=ge(()=>l.value.trim().length>0||r.value.length>0),p=ge(()=>o.placeholder?o.placeholder:o.isReply&&o.replyToUserName?`回复 @${o.replyToUserName}...`:o.isReply?"写下你的回复...":"写下你的想法..."),d=()=>{var S;(S=i.value)==null||S.click()},v=S=>{const C=S.target,I=C.files;if(!I)return;const x=10*1024*1024,E=o.maxImages||5;Array.from(I).forEach(F=>{if(r.value.length>=E)return;if(!F.type.startsWith("image/")){r.value.push({file:F,preview:"",error:"只能上传图片文件"});return}if(F.size>x){r.value.push({file:F,preview:"",error:"图片大小不能超过10MB"});return}const W=new FileReader;W.onload=G=>{var D;const re=r.value.findIndex(U=>U.file===F);re!==-1&&(r.value[re].preview=(D=G.target)==null?void 0:D.result)},W.readAsDataURL(F),r.value.push({file:F,preview:""})}),C&&(C.value="")},b=S=>{r.value.splice(S,1)},_=()=>{if(!c.value)return;const S=r.value.filter(C=>!C.error).map(C=>C.file);a("submit",l.value.trim(),S)},y=()=>{a("cancel")};return t({clear:()=>{l.value="",r.value=[]}}),(S,C)=>(u(),f("div",{class:Te(["comment-form-container",{"reply-mode":e.isReply}])},[n("div",Fk,[n("div",Vk,[m(Et,{"avatar-id":e.userAvatar,"user-name":e.userName,size:e.avatarSize},null,8,["avatar-id","user-name","size"])]),n("div",Bk,[e.replyToUserName?(u(),f("div",jk," 回复 @"+h(e.replyToUserName),1)):T("",!0),Ve(n("textarea",{"onUpdate:modelValue":C[0]||(C[0]=I=>l.value=I),class:"comment-textarea",placeholder:p.value,rows:e.isReply?2:3,maxlength:e.isReply?500:1e3},null,8,qk),[[Ke,l.value]]),n("div",Hk,[n("div",zk,[n("input",{ref_key:"imageInput",ref:i,type:"file",accept:"image/*",multiple:"",onChange:v,style:{display:"none"}},null,544),n("button",{class:"upload-image-btn",onClick:d,disabled:r.value.length>=e.maxImages},[m(k,{icon:"fluent-color:image-24",class:"btn-icon"}),C[1]||(C[1]=$e(" 添加图片 ",-1))],8,Wk),r.value.length>0?(u(),f("span",Kk," 已选择 "+h(r.value.length)+"/"+h(e.maxImages),1)):T("",!0)]),n("div",Gk,[e.isReply?(u(),f("button",{key:0,class:"cancel-btn",onClick:y}," 取消 ")):T("",!0),n("button",{class:"submit-btn",onClick:_,disabled:!c.value},[m(k,{icon:(e.isReply,"fluent-color:chat-24"),class:"btn-icon"},null,8,["icon"]),$e(" "+h(e.submitText),1)],8,Qk)])]),r.value.length>0?(u(),f("div",Jk,[(u(!0),f(ye,null,Ee(r.value,(I,x)=>(u(),f("div",{key:x,class:"image-preview-item"},[n("img",{src:I.preview,alt:`预览图 ${x+1}`},null,8,Xk),n("button",{class:"remove-image-btn",onClick:E=>b(x)},[m(k,{icon:"mdi:close"})],8,Zk),I.error?(u(),f("div",Yk,h(I.error),1)):T("",!0)]))),128))])):T("",!0)])])],2))}}),el=We(e$,[["__scopeId","data-v-5dfa960a"]]),t$={class:"avatar-background"},s$={class:"background-avatar-blur"},n$=["src"],o$={class:"card-content"},a$={class:"content-layout"},l$={class:"avatar-wrapper"},i$={class:"user-info"},r$={class:"user-name"},c$={class:"action-buttons"},u$=ze({__name:"UserProfileCard",props:{visible:{type:Boolean,default:!1},userId:{default:""},userName:{default:""},position:{default:void 0},avatarUrl:{default:void 0},avatarId:{default:void 0}},emits:["close","sendMessage","blockUser","mouseEnter"],setup(e,{emit:t}){const s=e,o=t,a=w(null),l=w(null),i=w(""),r=C=>{i.value&&i.value.startsWith("blob:")&&URL.revokeObjectURL(i.value),i.value=URL.createObjectURL(C)},c=ge(()=>s.position?l.value?{left:`${l.value.x}px`,top:`${l.value.y}px`}:{left:`${s.position.x}px`,top:`${s.position.y}px`}:{}),p=()=>{if(!s.position||!a.value)return;const C=a.value.getBoundingClientRect(),I=C.width||260,x=C.height||240,E=16;let F=s.position.x,W=s.position.y;const G=window.innerWidth,re=window.innerHeight;F+I>G-E&&(F=G-I-E),F<E&&(F=E),W+x>re-E&&(s.position.y-E>=x?W=s.position.y-x-8:W=re-x-E),W<E&&(W=E),l.value={x:F,y:W}};Xe(()=>[s.visible,s.position],()=>{l.value=null,s.visible&&s.position&&pt(()=>{p()})},{immediate:!0});const d=w(null),v=()=>{d.value&&(clearTimeout(d.value),d.value=null),o("close")},b=()=>{d.value&&(clearTimeout(d.value),d.value=null),o("mouseEnter")},_=()=>{d.value=window.setTimeout(()=>{v()},300)},y=()=>{o("sendMessage",s.userId,s.userName),v()},S=()=>{o("blockUser",s.userId,s.userName),v()};return ho(()=>{i.value&&i.value.startsWith("blob:")&&URL.revokeObjectURL(i.value)}),Xe(()=>s.visible,C=>{!C&&i.value&&i.value.startsWith("blob:")&&(URL.revokeObjectURL(i.value),i.value="")}),(C,I)=>(u(),Ne(Ot,{to:"body"},[m(gt,{name:"card-fade"},{default:lt(()=>[e.visible?(u(),f("div",{key:0,class:"card-overlay",onClick:v},[n("div",{ref_key:"cardContainerRef",ref:a,class:"card-container",style:St(c.value),onClick:I[0]||(I[0]=Oe(()=>{},["stop"])),onMouseenter:b,onMouseleave:_},[n("div",t$,[n("div",s$,[i.value?(u(),f("img",{key:0,src:i.value,alt:"",class:"background-image"},null,8,n$)):T("",!0)]),I[1]||(I[1]=n("div",{class:"background-overlay"},null,-1))]),n("div",o$,[n("div",a$,[n("div",l$,[m(Et,{size:"large",userId:e.userId,"user-name":e.userName,"avatar-id":e.avatarId,width:80,height:80,"on-avatar-loaded":r},null,8,["userId","user-name","avatar-id"]),I[2]||(I[2]=n("div",{class:"online-indicator"},null,-1))]),n("div",i$,[n("div",r$,h(e.userName),1)])]),n("div",c$,[n("button",{class:"action-btn message-btn",onClick:y},[m(k,{icon:"fluent-color:comment-multiple-32",class:"btn-icon"}),I[3]||(I[3]=n("span",null,"私信",-1))]),n("button",{class:"action-btn block-btn",onClick:S},[m(k,{icon:"mdi:block-helper",class:"btn-icon"}),I[4]||(I[4]=n("span",null,"拉黑",-1))])])])],36)])):T("",!0)]),_:1})]))}}),Yl=We(u$,[["__scopeId","data-v-e3708e1e"]]);function d$(){const e=w(!1),t=w(void 0),s=w(""),o=w(""),a=w(void 0),l=w(null),i=w(null),r=ge(()=>a.value);return{showUserMenu:e,userMenuPosition:t,selectedUserId:s,selectedUserName:o,userAvatarId:r,handleAuthorHover:(b,_,y,S)=>{l.value&&clearTimeout(l.value),s.value=_,o.value=y,S&&S.trim()!==""?a.value=S:a.value=void 0,l.value=window.setTimeout(()=>{const C=b.target.getBoundingClientRect();t.value={x:C.left-100,y:C.bottom+8},e.value=!0},200)},handleAuthorLeave:()=>{l.value&&(clearTimeout(l.value),l.value=null),i.value&&(clearTimeout(i.value),i.value=null),i.value=window.setTimeout(()=>{e.value&&(e.value=!1)},200)},handleCardMouseEnter:()=>{i.value&&(clearTimeout(i.value),i.value=null)},handleCloseUserMenu:()=>{l.value&&(clearTimeout(l.value),l.value=null),i.value&&(clearTimeout(i.value),i.value=null),e.value=!1,a.value=void 0}}}function hd(){const e=w(!1),t=w({title:"",type:"info",confirmText:"确定"});let s=null;const o=l=>(t.value={...t.value,...l},e.value=!0,new Promise(i=>{s=i})),a=()=>{e.value=!1,s&&(s(),s=null)};return{visible:ge(()=>e.value),config:ge(()=>t.value),show:o,handleConfirm:a}}const f$={key:0,class:"dialog-icon"},p$={class:"dialog-title"},v$={key:1,class:"dialog-message"},m$={class:"dialog-actions"},h$=ze({__name:"AlertDialog",props:{visible:{type:Boolean},title:{},message:{},type:{default:"info"},confirmText:{default:"确定"},showIcon:{type:Boolean,default:!0}},emits:["confirm"],setup(e,{emit:t}){const s=e,o=t,a=ge(()=>({info:"fluent-color:info-24",success:"fluent-color:checkmark-circle-24",warning:"fluent-color:warning-24",error:"fluent-color:error-circle-24"})[s.type]),l=ge(()=>({info:"btn-primary",success:"btn-success",warning:"btn-warning",error:"btn-error"})[s.type]),i=()=>{o("confirm")};return(r,c)=>(u(),Ne(Ot,{to:"body"},[m(gt,{name:"fade"},{default:lt(()=>[e.visible?(u(),f("div",{key:0,class:"alert-dialog-overlay",onClick:Oe(i,["self"])},[n("div",{class:Te(["alert-dialog",`type-${e.type}`])},[e.showIcon?(u(),f("div",f$,[m(k,{icon:a.value},null,8,["icon"])])):T("",!0),n("h3",p$,h(e.title),1),e.message?(u(),f("p",v$,h(e.message),1)):T("",!0),n("div",m$,[n("button",{class:Te(["btn",l.value]),onClick:i},h(e.confirmText),3)])],2)])):T("",!0)]),_:1})]))}}),g$=We(h$,[["__scopeId","data-v-df63f188"]]),y$={class:"comments-section"},b$={class:"comments-header"},_$={class:"header-actions"},w$={key:0,class:"comments-count"},k$={key:3,class:"request-status"},$$={key:0,class:"comments-list"},C$={class:"comment-avatar"},I$={class:"comment-content-wrapper"},S$={class:"comment-header"},x$=["onMouseenter"],A$={key:1,class:"commenter-name"},T$={class:"comment-date"},E$={class:"comment-text"},R$={class:"comment-actions"},U$=["onClick"],P$=["onClick"],M$=["onClick"],D$={key:0,class:"reply-count"},L$={key:2,class:"replies-list"},N$={key:1,class:"no-comments"},O$=ze({__name:"CommentsSection",props:{bundleId:{},comments:{}},emits:["submitComment","likeComment","dislikeComment","likeReply","dislikeReply","submitReply"],setup(e,{emit:t}){const s=e,o=t,{isLoggedIn:a,user:l}=Ts(),i=Gt(),{error:r}=_t(),c=hd(),p=ge(()=>{var g,A;return((g=l.value)==null?void 0:g.nickName)||((A=l.value)==null?void 0:A.username)||"游客"}),d=ge(()=>a.value),v=w(!1),b=w(!1),_=w(""),y=async()=>{if(!s.bundleId){b.value=!1;return}try{const g=await Y.checkUserRequestStatus(s.bundleId);b.value=g.hasRequest&&g.status===ss.PENDING}catch(g){console.error("检查申请状态失败:",g),b.value=!1}},S=async()=>{if(!s.bundleId){v.value=!1;return}try{if(v.value=await Y.checkForumEnabled(s.bundleId),v.value){const g=await Y.getForumPermission(s.bundleId);_.value=(g==null?void 0:g.appName)||s.bundleId,b.value=!1}else{try{const g=await Y.getForumPermission(s.bundleId);_.value=(g==null?void 0:g.appName)||s.bundleId}catch{try{const A=await Y.getApp(s.bundleId);_.value=A.name}catch{_.value=s.bundleId}}await y()}}catch(g){console.error("检查讨论区权限失败:",g),v.value=!1,await y()}},C=()=>{s.bundleId&&i.push(`/discussion/${s.bundleId}`)},I=async()=>{var g,A;if(!(!s.bundleId||b.value))try{let z=_.value||s.bundleId;if(!_.value)try{const j=await Y.getApp(s.bundleId);z=j.name,_.value=j.name}catch{}const Q=await Y.requestForumOpen(s.bundleId,z);Q.success?(b.value=!0,await c.show({title:"申请成功",message:"讨论区开通申请已提交,等待管理员审核",type:"success"})):await c.show({title:"申请失败",message:Q.message||"申请失败,请稍后重试",type:"error"})}catch(z){console.error("申请开通失败:",z),await c.show({title:"申请失败",message:((A=(g=z.response)==null?void 0:g.data)==null?void 0:A.message)||z.message||"申请失败,请稍后重试",type:"error"})}};Xe(()=>s.bundleId,()=>{S()},{immediate:!0}),nt(()=>{S()});const x=ge(()=>s.comments||[]),E=w(""),F=w(null),W=w(null),G=w(""),{showUserMenu:re,userMenuPosition:D,selectedUserId:U,selectedUserName:O,userAvatarId:$,handleAuthorHover:R,handleAuthorLeave:M,handleCardMouseEnter:N,handleCloseUserMenu:L}=d$(),X=async(g,A)=>{if(!d.value){r("请先登录",2e3);return}o("submitComment",g,A),E.value=""},ne=g=>{if(!d.value){r("请先登录",2e3);return}o("likeComment",g)},ee=g=>{if(!d.value){r("请先登录",2e3);return}o("dislikeComment",g)},we=(g,A)=>{if(!d.value){r("请先登录",2e3);return}o("likeReply",g,A)},de=(g,A)=>{if(!d.value){r("请先登录",2e3);return}o("dislikeReply",g,A)},ue=g=>{if(!d.value){r("请先登录",2e3);return}F.value===g&&!W.value?(F.value=null,G.value=""):(F.value=g,W.value=null)},Z=(g,A,z,Q)=>{var j;if(!d.value){r("请先登录",2e3);return}F.value===g&&((j=W.value)==null?void 0:j.id)===A?(F.value=null,W.value=null,G.value=""):(F.value=g,W.value={id:A,userId:z,userName:Q})},q=()=>{F.value=null,W.value=null,G.value=""},ie=(g,A,z,Q,j,V)=>{var B,ve,me;o("submitReply",g,A,z,Q||((B=W.value)==null?void 0:B.id),j||((ve=W.value)==null?void 0:ve.userId),V||((me=W.value)==null?void 0:me.userName)),G.value="",F.value=null,W.value=null},Pe=w([]),je=w(0),le=w(!1),xe=(g,A)=>{A&&A.length>0?(Pe.value=A,je.value=A.indexOf(g),je.value===-1&&(je.value=0)):(Pe.value=[g],je.value=0),le.value=!0},K=()=>{le.value=!1,Pe.value=[],je.value=0},ae=(g,A)=>{i.push(`/messages?userId=${g}&userName=${encodeURIComponent(A)}`)},Fe=(g,A)=>{console.log("拉黑用户:",g,A),console.log(`已拉黑用户:${A}`)},P=g=>{try{const A=new Date(g),Q=new Date().getTime()-A.getTime(),j=Math.floor(Q/(1e3*60)),V=Math.floor(Q/(1e3*60*60)),B=Math.floor(Q/(1e3*60*60*24));return j<1?"刚刚":j<60?`${j}分钟前`:V<24?`${V}小时前`:B<30?`${B}天前`:B<365?`${Math.floor(B/30)}个月前`:`${Math.floor(B/365)}年前`}catch{return g}};return(g,A)=>{var z;return u(),f(ye,null,[n("div",y$,[n("div",b$,[A[8]||(A[8]=n("h2",{class:"section-title"},"大家都在说",-1)),n("div",_$,[x.value.length>0?(u(),f("span",w$,h(x.value.length)+"条评论 ",1)):T("",!0),v.value?(u(),f("button",{key:1,class:"goto-forum-btn",onClick:C},[m(k,{icon:"mdi:forum-outline",class:"btn-icon"}),A[5]||(A[5]=$e(" 跳转到讨论区 ",-1))])):b.value?b.value?(u(),f("span",k$,[m(k,{icon:"mdi:clock-outline",class:"status-icon"}),A[7]||(A[7]=$e(" 等待申请结果中 ",-1))])):T("",!0):(u(),f("button",{key:2,class:"request-forum-btn",onClick:I},[m(k,{icon:"mdi:forum-plus-outline",class:"btn-icon"}),A[6]||(A[6]=$e(" 申请开通讨论区 ",-1))]))])]),m(el,{"user-avatar":(z=se(l))==null?void 0:z.avatar,"user-name":p.value,modelValue:E.value,"onUpdate:modelValue":A[0]||(A[0]=Q=>E.value=Q),"max-images":5,"submit-text":"发表评论",placeholder:"写下你的想法...",onSubmit:X},null,8,["user-avatar","user-name","modelValue"]),x.value.length>0?(u(),f("div",$$,[(u(!0),f(ye,null,Ee(x.value,Q=>{var j;return u(),f("div",{key:Q.id,class:"comment-item"},[n("div",C$,[m(Et,{"avatar-id":Q.userAvatar,"user-name":Q.userName,size:"medium"},null,8,["avatar-id","user-name"])]),n("div",I$,[n("div",S$,[Q.userId?(u(),f("span",{key:0,class:"commenter-name clickable",onMouseenter:Oe(V=>se(R)(V,Q.userId,Q.userName,Q.userAvatar),["stop"]),onMouseleave:A[1]||(A[1]=Oe((...V)=>se(M)&&se(M)(...V),["stop"]))},h(Q.userName),41,x$)):(u(),f("span",A$,h(Q.userName),1)),n("span",T$,h(P(Q.date)),1)]),n("p",E$,h(Q.content),1),Q.images&&Q.images.length>0?(u(),Ne(mn,{key:0,images:Q.images,"show-index":!1,columns:3,"max-width":150,onImageClick:(V,B)=>xe(B,Q.images)},null,8,["images","onImageClick"])):T("",!0),n("div",R$,[n("button",{class:Te(["action-btn",{active:Q.userLikeStatus==="liked"}]),onClick:V=>ne(Q.id)},[m(k,{icon:Q.userLikeStatus==="liked"?"mdi:thumb-up":"mdi:thumb-up-outline",class:"action-icon"},null,8,["icon"]),n("span",null,h(Q.likeCount),1)],10,U$),n("button",{class:Te(["action-btn",{active:Q.userLikeStatus==="disliked"}]),onClick:V=>ee(Q.id)},[m(k,{icon:Q.userLikeStatus==="disliked"?"mdi:thumb-down":"mdi:thumb-down-outline",class:"action-icon"},null,8,["icon"]),n("span",null,h(Q.dislikeCount),1)],10,P$),n("button",{class:"action-btn reply-btn",onClick:V=>ue(Q.id)},[m(k,{icon:"mdi:reply-outline",class:"action-icon"}),A[9]||(A[9]=n("span",null,"回复",-1)),Q.replyCount?(u(),f("span",D$," ("+h(Q.replyCount)+") ",1)):T("",!0)],8,M$)]),F.value===Q.id&&!W.value?(u(),Ne(el,{key:1,"user-avatar":(j=se(l))==null?void 0:j.avatar,"user-name":p.value,modelValue:G.value,"onUpdate:modelValue":A[2]||(A[2]=V=>G.value=V),"is-reply":!0,"max-images":3,"submit-text":"发表回复",placeholder:"写下你的回复...",onSubmit:(V,B)=>ie(Q.id,V,B),onCancel:q},null,8,["user-avatar","user-name","modelValue","onSubmit"])):T("",!0),Q.replies&&Q.replies.length>0?(u(),f("div",L$,[(u(!0),f(ye,null,Ee(Q.replies,V=>(u(),Ne(Ok,{key:V.id,reply:V,onLike:B=>we(Q.id,V.id),onDislike:B=>de(Q.id,V.id),onReply:B=>Z(Q.id,V.id,V.userId||"",V.userName),onNestedLike:B=>we(Q.id,B),onNestedDislike:B=>de(Q.id,B),onUserHover:se(R),onUserLeave:se(M)},{"nested-reply-form":lt(({replyId:B})=>{var ve,me;return[F.value===Q.id&&((ve=W.value)==null?void 0:ve.id)===B?(u(),Ne(el,{key:0,"user-avatar":(me=se(l))==null?void 0:me.avatar,"user-name":p.value,modelValue:G.value,"onUpdate:modelValue":A[3]||(A[3]=Le=>G.value=Le),"is-reply":!0,"max-images":3,"reply-to-user-name":V.userName,"submit-text":"发表回复",onSubmit:(Le,Ue)=>ie(Q.id,Le,Ue,B,V.userId||"",V.userName),onCancel:q},null,8,["user-avatar","user-name","modelValue","reply-to-user-name","onSubmit"])):T("",!0)]}),_:2},1032,["reply","onLike","onDislike","onReply","onNestedLike","onNestedDislike","onUserHover","onUserLeave"]))),128))])):T("",!0)])])}),128))])):(u(),f("div",N$,[m(k,{icon:"mdi:comment-multiple-outline",class:"no-comments-icon"}),A[10]||(A[10]=n("p",null,"还没有评论,快来发表第一条吧!",-1))])),m(Tn,{visible:le.value,images:Pe.value,"initial-index":je.value,"show-navigation":Pe.value.length>1,"show-info":!1,onClose:K,onIndexChange:A[4]||(A[4]=Q=>je.value=Q)},null,8,["visible","images","initial-index","show-navigation"]),m(Yl,{visible:se(re),"user-id":se(U),"user-name":se(O),"avatar-id":se($),position:se(D),onClose:se(L),onSendMessage:ae,onBlockUser:Fe,onMouseEnter:se(N)},null,8,["visible","user-id","user-name","avatar-id","position","onClose","onMouseEnter"])]),m(g$,{visible:se(c).visible.value,title:se(c).config.value.title||"",message:se(c).config.value.message,type:se(c).config.value.type,"confirm-text":se(c).config.value.confirmText,onConfirm:se(c).handleConfirm},null,8,["visible","title","message","type","confirm-text","onConfirm"])],64)}}}),F$=We(O$,[["__scopeId","data-v-d388ddec"]]),V$={class:"dialog-header"},B$={class:"dialog-title"},j$={class:"dialog-content"},q$={class:"info-section"},H$={class:"info-grid"},z$={class:"info-item"},W$={class:"info-value"},K$={class:"info-item"},G$={class:"info-value"},Q$={class:"info-item"},J$={class:"info-value"},X$={class:"info-item"},Z$={class:"info-value"},Y$={class:"info-item"},e3={class:"info-value"},t3={class:"form-section"},s3={class:"section-title"},n3={class:"error-type-grid"},o3=["onClick"],a3={class:"type-label"},l3={class:"form-section"},i3={class:"section-title"},r3={class:"char-count"},c3={class:"form-section"},u3={class:"section-title"},d3={class:"upload-area"},f3={key:0,class:"screenshots-list"},p3=["src","alt"],v3=["onClick"],m3={key:0,class:"screenshot-error"},h3={class:"form-section"},g3={class:"section-title"},y3={class:"upload-area"},b3={key:0,class:"files-list"},_3={class:"file-name"},w3={class:"file-size"},k3=["onClick"],$3={class:"dialog-footer"},C3=["disabled"],I3=ze({__name:"ReportIssueDialog",props:{visible:{type:Boolean},appInfo:{}},emits:["close","submit"],setup(e,{emit:t}){const s=e,o=t,a=[{value:"crash",label:"打开崩溃",icon:"mdi:alert-octagon"},{value:"crack_failed",label:"破解失效",icon:"mdi:shield-off"},{value:"update_request",label:"请求更新",icon:"mdi:update"},{value:"unexpected_error",label:"意外错误",icon:"mdi:alert-circle"}],l=w(""),i=w(""),r=w([]),c=w([]),p=w(null),d=w(null),v=ge(()=>{const re=navigator.userAgent;let D="未知",U="未知";if(re.includes("Mac OS X")){const O=re.match(/Mac OS X (\d+[._]\d+)/);O?D=`macOS ${O[1].replace("_",".")}`:D="macOS"}else if(re.includes("Windows")){const O=re.match(/Windows NT (\d+\.\d+)/);O?D=`Windows ${O[1]}`:D="Windows"}else re.includes("Linux")&&(D="Linux");return navigator.platform.includes("Intel")||navigator.platform.includes("x86")?U="x86_64":navigator.platform.includes("ARM")||navigator.platform.includes("Apple")?U="ARM64":U=navigator.platform||"未知",{osVersion:D,architecture:U}}),b=ge(()=>l.value!==""&&i.value.trim().length>0),_=()=>{var re;(re=p.value)==null||re.click()},y=re=>{const D=re.target,U=D.files;if(!U)return;const O=10*1024*1024;Array.from(U).forEach($=>{if(!$.type.startsWith("image/")){r.value.push({file:$,preview:"",error:"只能上传图片文件"});return}if($.size>O){r.value.push({file:$,preview:"",error:"图片大小不能超过10MB"});return}const R=new FileReader;R.onload=M=>{var L;const N=r.value.findIndex(X=>X.file===$);N!==-1&&(r.value[N].preview=(L=M.target)==null?void 0:L.result)},R.readAsDataURL($),r.value.push({file:$,preview:""})}),D&&(D.value="")},S=re=>{r.value.splice(re,1)},C=()=>{var re;(re=d.value)==null||re.click()},I=re=>{const D=re.target,U=D.files;U&&(Array.from(U).forEach(O=>{c.value.push(O)}),D&&(D.value=""))},x=re=>{c.value.splice(re,1)},E=re=>{if(re===0)return"0 B";const D=1024,U=["B","KB","MB","GB"],O=Math.floor(Math.log(re)/Math.log(D));return Math.round(re/Math.pow(D,O)*100)/100+" "+U[O]},F=()=>{o("close")},W=()=>{F()},G=()=>{if(!b.value||!s.appInfo)return;const re={appName:s.appInfo.name,appVersion:s.appInfo.version,bundleId:s.appInfo.bundleId,osVersion:v.value.osVersion,architecture:v.value.architecture,errorType:l.value,description:i.value.trim(),screenshots:r.value.filter(D=>!D.error).map(D=>D.file),files:c.value};o("submit",re)};return Xe(()=>s.visible,re=>{re||(l.value="",i.value="",r.value=[],c.value=[])}),(re,D)=>(u(),Ne(gt,{name:"dialog-fade"},{default:lt(()=>[e.visible?(u(),f("div",{key:0,class:"report-issue-dialog-overlay",onClick:W},[n("div",{class:"report-issue-dialog",onClick:D[1]||(D[1]=Oe(()=>{},["stop"]))},[n("div",V$,[n("h2",B$,[m(k,{icon:"mdi:alert-circle",class:"title-icon"}),D[2]||(D[2]=$e(" 报告问题 ",-1))]),n("button",{class:"close-btn",onClick:F},[m(k,{icon:"mdi:close"})])]),n("div",j$,[n("div",q$,[D[8]||(D[8]=n("h3",{class:"section-title"},"应用信息",-1)),n("div",H$,[n("div",z$,[D[3]||(D[3]=n("span",{class:"info-label"},"应用名称",-1)),n("span",W$,h(e.appInfo.name),1)]),n("div",K$,[D[4]||(D[4]=n("span",{class:"info-label"},"版本",-1)),n("span",G$,h(e.appInfo.version),1)]),n("div",Q$,[D[5]||(D[5]=n("span",{class:"info-label"},"包名",-1)),n("span",J$,h(e.appInfo.bundleId),1)]),n("div",X$,[D[6]||(D[6]=n("span",{class:"info-label"},"系统版本",-1)),n("span",Z$,h(v.value.osVersion),1)]),n("div",Y$,[D[7]||(D[7]=n("span",{class:"info-label"},"架构",-1)),n("span",e3,h(v.value.architecture),1)])])]),n("div",t3,[n("h3",s3,[m(k,{icon:"mdi:tag-outline",class:"section-icon"}),D[9]||(D[9]=$e(" 错误类型 ",-1)),D[10]||(D[10]=n("span",{class:"required"},"*",-1))]),n("div",n3,[(u(),f(ye,null,Ee(a,U=>n("button",{key:U.value,class:Te(["error-type-btn",{active:l.value===U.value}]),onClick:O=>l.value=U.value},[m(k,{icon:U.icon,class:"type-icon"},null,8,["icon"]),n("span",a3,h(U.label),1)],10,o3)),64))])]),n("div",l3,[n("h3",i3,[m(k,{icon:"mdi:text-box-outline",class:"section-icon"}),D[11]||(D[11]=$e(" 问题描述 ",-1)),D[12]||(D[12]=n("span",{class:"required"},"*",-1))]),Ve(n("textarea",{"onUpdate:modelValue":D[0]||(D[0]=U=>i.value=U),class:"description-textarea",placeholder:"请详细描述遇到的问题,包括操作步骤、预期结果和实际结果...",rows:"6",maxlength:"2000"},null,512),[[Ke,i.value]]),n("div",r3,h(i.value.length)+"/2000",1)]),n("div",c3,[n("h3",u3,[m(k,{icon:"mdi:image-outline",class:"section-icon"}),D[13]||(D[13]=$e(" 报错截图 ",-1))]),n("div",d3,[n("input",{ref_key:"screenshotInput",ref:p,type:"file",accept:"image/*",multiple:"",onChange:y,style:{display:"none"}},null,544),n("button",{class:"upload-btn",onClick:_},[m(k,{icon:"fluent-color:image-24",class:"upload-icon"}),D[14]||(D[14]=n("span",null,"选择截图",-1))]),D[15]||(D[15]=n("span",{class:"upload-hint"},"支持多张图片,单张最大10MB",-1))]),r.value.length>0?(u(),f("div",f3,[(u(!0),f(ye,null,Ee(r.value,(U,O)=>(u(),f("div",{key:O,class:"screenshot-item"},[n("img",{src:U.preview,alt:`截图 ${O+1}`},null,8,p3),n("button",{class:"remove-screenshot-btn",onClick:$=>S(O)},[m(k,{icon:"mdi:close"})],8,v3),U.error?(u(),f("div",m3,h(U.error),1)):T("",!0)]))),128))])):T("",!0)]),n("div",h3,[n("h3",g3,[m(k,{icon:"mdi:file-upload-outline",class:"section-icon"}),D[16]||(D[16]=$e(" 报告文件 ",-1))]),n("div",y3,[n("input",{ref_key:"fileInput",ref:d,type:"file",multiple:"",onChange:I,style:{display:"none"}},null,544),n("button",{class:"upload-btn",onClick:C},[m(k,{icon:"mdi:file-upload-outline",class:"upload-icon"}),D[17]||(D[17]=n("span",null,"选择文件",-1))]),D[18]||(D[18]=n("span",{class:"upload-hint"},"可上传日志文件、配置文件等",-1))]),c.value.length>0?(u(),f("div",b3,[(u(!0),f(ye,null,Ee(c.value,(U,O)=>(u(),f("div",{key:O,class:"file-item"},[m(k,{icon:"mdi:file-document-outline",class:"file-icon"}),n("span",_3,h(U.name),1),n("span",w3,h(E(U.size)),1),n("button",{class:"remove-file-btn",onClick:$=>x(O)},[m(k,{icon:"mdi:close"})],8,k3)]))),128))])):T("",!0)])]),n("div",$3,[n("button",{class:"cancel-btn",onClick:F},"取消"),n("button",{class:"submit-btn",onClick:G,disabled:!b.value},[m(k,{icon:"mdi:send",class:"btn-icon"}),D[19]||(D[19]=$e(" 提交报告 ",-1))],8,C3)])])])):T("",!0)]),_:1}))}}),S3=We(I3,[["__scopeId","data-v-2b498d31"]]),x3={class:"info-tooltip-wrapper"},A3=ze({__name:"InfoTooltip",props:{position:{default:"bottom"},maxWidth:{default:"600px"}},setup(e){const t=e,s=ge(()=>({maxWidth:t.maxWidth}));return(o,a)=>(u(),f("div",x3,[hn(o.$slots,"trigger",{},()=>[m(k,{icon:"mdi:information-outline",class:"info-trigger-icon"})]),n("div",{class:"info-tooltip-content",style:St(s.value)},[hn(o.$slots,"default",{},void 0)],4)]))}}),T3=We(A3,[["__scopeId","data-v-8db7c0cc"]]),E3={class:"app-detail-page"},R3={key:0,class:"loading-container"},U3={key:1,class:"error-container"},P3={key:2,class:"detail-layout"},M3={class:"back-section"},D3={class:"main-content"},L3={class:"content-left"},N3={class:"app-header-section"},O3={class:"app-icon-container"},F3=["src","alt"],V3={key:1,class:"icon-loading"},B3={key:2,class:"icon-placeholder"},j3={class:"app-info-main"},q3={class:"app-info-section"},H3={class:"app-name"},z3={class:"app-meta-row"},W3={key:0,class:"rating-info"},K3={class:"rating-value"},G3={key:0,class:"rating-count"},Q3={key:1,class:"category-separator"},J3={key:2,class:"category-badge"},X3={class:"app-version-info"},Z3={class:"version-text"},Y3={key:0,class:"bundle-version-text"},eC={key:1,class:"injection-info"},tC={class:"app-detail-info"},sC={class:"detail-info-row"},nC={class:"detail-value"},oC={class:"detail-info-row"},aC={class:"detail-value"},lC={class:"description-compact"},iC={class:"description-text"},rC={class:"app-actions-compact"},cC=["disabled"],uC=["disabled"],dC=["disabled"],fC={key:4,class:"download-precracked-wrapper"},pC={key:1,class:"download-dropdown-wrapper"},vC=["onClick"],mC={class:"option-content"},hC={class:"option-version"},gC={key:0,class:"option-beta"},yC={key:0,class:"screenshots-section"},bC={class:"section-header"},_C={class:"view-all-btn"},wC={class:"screenshots-grid"},kC=["src","alt"],$C={key:1,class:"description-section"},CC={class:"description-content"},IC={key:0},SC={key:1},xC={class:"rating-section"},AC={key:0,class:"rating-overview"},TC={class:"rating-content-wrapper"},EC={class:"rating-left"},RC={class:"rating-summary"},UC={class:"rating-main"},PC={class:"rating-number"},MC={class:"rating-count"},DC={class:"rating-distribution"},LC={class:"bar-star-number"},NC={class:"bar-container"},OC={class:"bar-value"},FC={key:0,class:"app-info-card"},VC={class:"features-developer-column"},BC={key:0,class:"info-card-item features-item"},jC={class:"info-icon-wrapper"},qC={class:"info-content"},HC={class:"features-tags"},zC={key:1,class:"info-card-item developer-item"},WC={class:"info-icon-wrapper"},KC={class:"info-content"},GC={class:"info-value"},QC={key:0,class:"info-card-grid"},JC={key:0,class:"info-card-item"},XC={class:"info-icon-wrapper"},ZC={class:"info-content"},YC={class:"info-value"},e4={key:1,class:"info-card-item"},t4={class:"info-icon-wrapper"},s4={class:"info-content"},n4={class:"info-value"},o4={key:2,class:"info-card-item"},a4={class:"info-icon-wrapper"},l4={class:"info-content"},i4={class:"info-value"},r4={key:3,class:"info-card-item"},c4={class:"info-icon-wrapper"},u4={class:"info-content"},d4={class:"info-value"},f4={class:"rating-right"},p4={key:0,class:"info-card-item highlight"},v4={class:"info-icon-wrapper update"},m4={class:"info-content"},h4={class:"info-value update-value"},g4={key:1,class:"info-card-item highlight pre-cracked-card"},y4={class:"info-icon-wrapper pre-cracked"},b4={class:"info-content"},_4={class:"info-value pre-cracked-value"},w4={key:1,class:"no-rating"},k4={key:3,class:"rating-input-section"},$4={class:"star-rating-input"},C4=["onClick","onMouseenter"],I4={key:0,class:"star-rating-tooltip"},S4={key:0,class:"rating-submit-section"},x4={key:2,class:"versions-section"},A4={class:"content-right"},T4={key:0,class:"sticky-header"},E4={class:"sticky-header-content"},R4={class:"sticky-icon"},U4=["src","alt"],P4={key:1,class:"sticky-icon-placeholder"},M4={class:"sticky-info"},D4={class:"sticky-app-name"},L4={class:"sticky-developer"},N4={class:"sticky-meta"},O4={class:"sticky-version"},F4={key:0,class:"sticky-bundle-version"},V4={key:1,class:"sticky-injection"},B4={key:2,class:"sticky-update"},j4={key:3,class:"sticky-pre-cracked"},q4={key:4,class:"sticky-rating"},H4={class:"sticky-right"},z4={class:"sticky-actions"},W4=["disabled"],K4=["disabled"],G4=["disabled"],Q4={key:4,class:"sticky-download-wrapper"},J4={key:1,class:"sticky-download-dropdown-wrapper"},X4=["onClick"],Z4={class:"option-content"},Y4={class:"option-version"},e8={key:0,class:"option-beta"},t8={class:"sticky-provider"},s8=ze({__name:"AppDetail",setup(e){const t=xn(),s=Gt(),{isLoggedIn:o}=Ts(),{success:a,error:l}=_t(),{show:i,hide:r}=js(),c=w(null),p=w(!0),d=w(""),v=w(!1),b=w(!1),_=w(!1),y=w(!1),S=w(!1),C=w([]),I=w(0),x=w(0),E=w(null),F=w([]),W=w(!1),G=w([]),re=ge(()=>c.value?(c.value.description||ae()).length>200:!1),D=w(null),U=oe=>{const be=oe.target.scrollTop||window.pageYOffset||document.documentElement.scrollTop;S.value=be>200},O=oe=>{const H=oe.target;!H.closest(".download-dropdown-wrapper")&&!H.closest(".sticky-download-dropdown-wrapper")&&(W.value=!1)};nt(async()=>{await N(),document.addEventListener("click",O),await pt();const oe=document.querySelector(".main-content-right");if(oe){D.value=oe,oe.addEventListener("scroll",U,{passive:!0});let H=null;const be=()=>{if(!S.value)return;const pe=document.querySelector(".sticky-header");if(pe&&oe){const Me=oe.getBoundingClientRect();pe.style.top=`${Me.top+40}px`;const tt=Me.width,at=tt*.6;pe.style.left=`${Me.left+(tt-at)/2}px`,pe.style.width=`${at}px`}};Xe(S,()=>{S.value&&pt(()=>{be()})}),be(),H=()=>{be()},window.addEventListener("resize",H,{passive:!0});const _e=()=>{be()};oe.addEventListener("scroll",_e,{passive:!0}),G.value.push(()=>{H&&window.removeEventListener("resize",H),oe.removeEventListener("scroll",_e)})}else window.addEventListener("scroll",U,{passive:!0})}),At(()=>{D.value?D.value.removeEventListener("scroll",U):window.removeEventListener("scroll",U),document.removeEventListener("click",O),G.value.forEach(oe=>oe()),G.value=[]});const $=w(!0),R=w(!1),M=w(!1),N=async()=>{p.value=!0,d.value="";const oe=t.params.bundleId;if(!oe){d.value="应用 ID 不存在",p.value=!1;return}try{const H=await Y.getApp(oe);c.value=H,c.value.rating||(c.value.rating=4.1,c.value.ratingCount=661),c.value.description||(c.value.description=ae()),c.value.category||(c.value.category=xe()),(!c.value.reviews||c.value.reviews.length===0)&&(c.value.reviews=[{id:"1",userName:"dddddddddd",rating:5,title:"",content:"ddddddddddddddddd",date:new Date(Date.now()-30*24*60*60*1e3).toISOString(),helpfulCount:5},{id:"2",userName:"信泽",rating:5,title:"",content:"这个应用功能强大,界面美观,使用体验很棒!",date:new Date(Date.now()-30*24*60*60*1e3).toISOString(),helpfulCount:3},{id:"3",userName:"用户B",rating:4,title:"",content:"整体来说还不错,但还有一些小问题需要改进。",date:new Date(Date.now()-15*24*60*60*1e3).toISOString(),helpfulCount:2}]),(!c.value.features||c.value.features.length===0)&&(c.value.features=["AI智能搜索","深度思考模式","高效信息获取","多端协同"]),await dt(),$.value=c.value.hasIcon!==!1,R.value=!1,M.value=!1,c.value.hasIcon===!1&&($.value=!1,M.value=!0),await Le(),o.value&&await Ue(),await te()}catch(H){console.error("加载应用详情失败:",H),d.value="加载应用详情失败,请检查网络连接"}finally{p.value=!1}},{updating:L,modalVisible:X,modalTitle:ne,logs:ee,modalStatus:we,handleUpdate:de,handleReinstall:ue,hideModal:Z}=fd({onRefresh:async()=>{await N()}}),q=()=>c.value&&c.value.hasIcon!==!1?Y.getAppIconUrl(c.value.bundleId):"",ie=()=>{c.value&&de(c.value)},Pe=async()=>{if(!(!c.value||!c.value.bundleId))try{if(!(await fetch(`/api/apps/${c.value.bundleId}/open`,{method:"POST"})).ok)throw new Error("打开应用失败")}catch(oe){console.error("打开应用失败:",oe)}},je=()=>{s.back()},le=()=>{s.push("/")},xe=()=>{if(!c.value)return"应用";const oe=c.value.bundleId.toLowerCase();return oe.includes("social")||oe.includes("chat")||oe.includes("qq")||oe.includes("wechat")?"社交":oe.includes("music")||oe.includes("video")||oe.includes("player")?"娱乐":oe.includes("design")||oe.includes("photo")||oe.includes("edit")?"设计":oe.includes("tool")||oe.includes("util")?"实用程序与工具":"应用"},K=()=>{if(!c.value)return"";const oe=c.value.bundleId.split(".");return oe.length>=2?oe[1].charAt(0).toUpperCase()+oe[1].slice(1)+" 公司":""},ae=()=>c.value?`${c.value.name}是一款优秀的应用程序,提供丰富的功能和良好的用户体验。`:"",Fe=ge(()=>{if(E.value&&E.value.distribution.length>0)return E.value.distribution;if(!c.value||!c.value.ratingCount)return[];const oe=c.value.ratingCount,H=[];for(let be=5;be>=1;be--){let _e=0;be===5?_e=Math.round(oe*.4):be===4?_e=Math.round(oe*.3):be===3?_e=Math.round(oe*.15):be===2?_e=Math.round(oe*.1):_e=oe-H.reduce((pe,Me)=>pe+Me.count,0),H.push({stars:be,count:_e,percentage:_e/oe*100})}return H}),P=()=>{var oe,H;navigator.share?navigator.share({title:(oe=c.value)==null?void 0:oe.name,text:`查看 ${(H=c.value)==null?void 0:H.name} 应用详情`,url:window.location.href}).catch(()=>{}):(navigator.clipboard.writeText(window.location.href),a("链接已复制到剪贴板",2e3))},g=()=>{_.value=!0},A=()=>{_.value=!1},z=async oe=>{var H;if(!oe||!c.value){l("提交失败:缺少必要信息",3e3);return}if(!o.value){l("请先登录后再提交问题报告",3e3),_.value=!1,b.value=!0;return}i("正在提交问题报告...");try{let be;if(c.value&&c.value.hasIcon!==!1)try{const pe=q();if(pe){const Me=await fetch(pe);if(Me.ok){const tt=await Me.blob(),at=new File([tt],`${c.value.bundleId}.png`,{type:tt.type||"image/png"}),rt=await Y.uploadImage("icon",at);rt.success&&((H=rt.data)!=null&&H.fileId)?(be=rt.data.fileId,console.log("应用图标上传成功:",be)):console.warn("应用图标上传失败:",rt.message)}}}catch(pe){console.warn("上传应用图标失败:",pe)}console.log("开始提交问题报告,截图数量:",(oe.screenshots||[]).length,"文件数量:",(oe.files||[]).length);const _e=await Y.submitIssue(oe.bundleId,oe.appName,oe.appVersion,oe.osVersion,oe.architecture,oe.errorType,oe.description,oe.screenshots||[],oe.files||[],be);r(),console.log("问题报告提交结果:",_e),_e.success?(_.value=!1,setTimeout(()=>{a("问题报告已提交,感谢您的反馈!",3e3)},100)):l(_e.message||"提交失败,请稍后重试",3e3)}catch(be){r(),console.error("提交问题报告失败:",be),l(be.message||"提交失败,请稍后重试",3e3)}},Q=()=>{$.value=!1,R.value=!0,M.value=!1},j=oe=>{$.value=!1,R.value=!1,M.value=!0;const H=oe.target;H&&(H.style.display="none"),c.value&&(c.value.hasIcon=!1)};Xe(()=>t.params.bundleId,async(oe,H)=>{oe&&oe!==H&&await N()},{immediate:!1});const V=async()=>{await N()},B=()=>{b.value=!0},ve=()=>{b.value=!1},me=async()=>{b.value=!1,await Le()},Le=async()=>{var oe;if((oe=c.value)!=null&&oe.bundleId)try{const H=await Y.getAppRatingStats(c.value.bundleId);H&&(E.value=H,c.value&&(c.value.rating=H.averageRating,c.value.ratingCount=H.totalCount))}catch(H){console.error("加载评分统计失败:",H)}},Ue=async()=>{var oe;if(!(!((oe=c.value)!=null&&oe.bundleId)||!o.value))try{const H=await Y.getUserAppRating(c.value.bundleId);H&&(I.value=H)}catch(H){console.error("加载用户评分失败:",H)}},Be=oe=>{if(!o.value){b.value=!0;return}I.value=oe},Ce=async()=>{var oe;if(!(!((oe=c.value)!=null&&oe.bundleId)||!o.value||I.value===0))try{i("正在提交评分..."),await Y.submitAppRating(c.value.bundleId,I.value),r(),a("评分提交成功",2e3),await Le()}catch(H){r(),l(H.message||"提交评分失败",3e3)}},Qe=w(new Map),Ge=async oe=>{for(const H of oe)if(!Qe.value.has(H))try{const be=await Y.getAttachmentImage(H);be&&Qe.value.set(H,be)}catch(be){console.warn(`预加载图片失败 ${H}:`,be)}},Ze=oe=>{const H=[];for(const be of oe){const _e=Qe.value.get(be);_e&&H.push(_e)}return H},dt=async()=>{var oe;if((oe=c.value)!=null&&oe.bundleId)try{const H=await Y.getAppComments(c.value.bundleId);if(H.comments){const be=[];H.comments.forEach(_e=>{_e.imageAttachmentIds&&_e.imageAttachmentIds.length>0&&be.push(..._e.imageAttachmentIds),(_e.replies||[]).forEach(pe=>{pe.imageAttachmentIds&&pe.imageAttachmentIds.length>0&&be.push(...pe.imageAttachmentIds),(pe.nestedReplies||[]).forEach(Me=>{Me.imageAttachmentIds&&Me.imageAttachmentIds.length>0&&be.push(...Me.imageAttachmentIds)})})}),be.length>0&&await Ge(be),C.value=H.comments.map(_e=>({id:_e._id||_e.id,userId:_e.userId,userName:_e.userName,userAvatar:_e.userAvatar,content:_e.content,imageAttachmentIds:_e.imageAttachmentIds||[],images:Ze(_e.imageAttachmentIds||[]),date:_e.date,likeCount:_e.likeCount||0,dislikeCount:_e.dislikeCount||0,userLikeStatus:_e.userLikeStatus||null,replyCount:_e.replyCount||0,replies:(_e.replies||[]).map(pe=>{var Me,tt,at,rt,ft,qt;return{id:pe._id||pe.id,userName:pe.userName,userAvatar:pe.userAvatar,userId:((Me=pe.replyUser)==null?void 0:Me.id)||pe.userId,content:pe.content,imageAttachmentIds:pe.imageAttachmentIds||[],images:Ze(pe.imageAttachmentIds||[]),date:pe.date,likeCount:pe.likeCount||0,dislikeCount:pe.dislikeCount||0,userLikeStatus:pe.userLikeStatus||null,replyToUserName:((tt=pe.replyTo)==null?void 0:tt.userName)||pe.replyToUserName,replyToUserId:((at=pe.replyToUser)==null?void 0:at.id)||((rt=pe.replyTo)==null?void 0:rt.userId),replyToUserAvatar:((ft=pe.replyToUser)==null?void 0:ft.avatar)||((qt=pe.replyTo)==null?void 0:qt.userAvatar),nestedReplies:(pe.nestedReplies||[]).map(ot=>{var ys,Es,ko,$o,Co,Io;return{id:ot._id||ot.id,userName:ot.userName,userAvatar:ot.userAvatar,userId:((ys=ot.replyUser)==null?void 0:ys.id)||ot.userId,content:ot.content,imageAttachmentIds:ot.imageAttachmentIds||[],images:Ze(ot.imageAttachmentIds||[]),date:ot.date,likeCount:ot.likeCount||0,dislikeCount:ot.dislikeCount||0,userLikeStatus:ot.userLikeStatus||null,replyToUserName:((Es=ot.replyTo)==null?void 0:Es.userName)||ot.replyToUserName,replyToUserId:((ko=ot.replyToUser)==null?void 0:ko.id)||(($o=ot.replyTo)==null?void 0:$o.userId),replyToUserAvatar:((Co=ot.replyToUser)==null?void 0:Co.avatar)||((Io=ot.replyTo)==null?void 0:Io.userAvatar)}})}})}))}else C.value=[]}catch(H){console.error("加载评论失败:",H),C.value=[]}},yt=async(oe,H)=>{var be;if(!((be=c.value)!=null&&be.bundleId)||!o.value){l("请先登录",2e3);return}try{i("正在提交评论...");let _e=[];if(H&&H.length>0)for(const Me of H){const tt=await Y.uploadImageAttachment(Me);tt.success&&tt.attachmentId&&_e.push(tt.attachmentId)}const pe=await Y.createAppComment(c.value.bundleId,oe,_e.length>0?_e:void 0);r(),pe.success?(a("评论发表成功",2e3),await dt()):l(pe.message||"提交评论失败",3e3)}catch(_e){r(),console.error("提交评论失败:",_e),l(_e.message||"提交评论失败",3e3)}},bt=async oe=>{var H;if(!((H=c.value)!=null&&H.bundleId)||!o.value){l("请先登录",2e3);return}try{const be=C.value.find(tt=>tt.id===oe),pe=(be==null?void 0:be.userLikeStatus)==="liked"?"cancel":"like",Me=await Y.likeAppComment(c.value.bundleId,oe,pe);Me.success&&be&&(be.likeCount=Me.likeCount,be.dislikeCount=Me.dislikeCount,be.userLikeStatus=Me.userLikeStatus)}catch(be){console.error("点赞评论失败:",be),l(be.message||"操作失败",3e3)}},It=async oe=>{var H;if(!((H=c.value)!=null&&H.bundleId)||!o.value){l("请先登录",2e3);return}try{const be=C.value.find(tt=>tt.id===oe),pe=(be==null?void 0:be.userLikeStatus)==="disliked"?"cancel":"dislike",Me=await Y.likeAppComment(c.value.bundleId,oe,pe);Me.success&&be&&(be.likeCount=Me.likeCount,be.dislikeCount=Me.dislikeCount,be.userLikeStatus=Me.userLikeStatus)}catch(be){console.error("点踩评论失败:",be),l(be.message||"操作失败",3e3)}},jt=async(oe,H)=>{var be,_e;if(!((be=c.value)!=null&&be.bundleId)||!o.value){l("请先登录",2e3);return}try{const pe=C.value.find(ft=>ft.id===oe),Me=(_e=pe==null?void 0:pe.replies)==null?void 0:_e.find(ft=>ft.id===H),at=(Me==null?void 0:Me.userLikeStatus)==="liked"?"cancel":"like",rt=await Y.likeAppCommentReply(c.value.bundleId,oe,H,at);rt.success&&Me&&(Me.likeCount=rt.likeCount,Me.dislikeCount=rt.dislikeCount,Me.userLikeStatus=rt.userLikeStatus)}catch(pe){console.error("点赞回复失败:",pe),l(pe.message||"操作失败",3e3)}},Ae=async(oe,H)=>{var be,_e;if(!((be=c.value)!=null&&be.bundleId)||!o.value){l("请先登录",2e3);return}try{const pe=C.value.find(ft=>ft.id===oe),Me=(_e=pe==null?void 0:pe.replies)==null?void 0:_e.find(ft=>ft.id===H),at=(Me==null?void 0:Me.userLikeStatus)==="disliked"?"cancel":"dislike",rt=await Y.likeAppCommentReply(c.value.bundleId,oe,H,at);rt.success&&Me&&(Me.likeCount=rt.likeCount,Me.dislikeCount=rt.dislikeCount,Me.userLikeStatus=rt.userLikeStatus)}catch(pe){console.error("点踩回复失败:",pe),l(pe.message||"操作失败",3e3)}},J=async(oe,H,be,_e,pe,Me)=>{var tt;if(!((tt=c.value)!=null&&tt.bundleId)||!o.value){l("请先登录",2e3);return}try{i("正在提交回复...");let at=[];if(be&&be.length>0)for(const ft of be){const qt=await Y.uploadImageAttachment(ft);qt.success&&qt.attachmentId&&at.push(qt.attachmentId)}let rt;_e&&pe&&Me?rt=await Y.createAppCommentNestedReply(c.value.bundleId,oe,_e,H,pe,Me,at.length>0?at:void 0):rt=await Y.createAppCommentReply(c.value.bundleId,oe,H,at.length>0?at:void 0),r(),rt.success?(a("回复发表成功",2e3),await dt()):l(rt.message||"提交回复失败",3e3)}catch(at){r(),console.error("提交回复失败:",at),l(at.message||"提交回复失败",3e3)}},te=async()=>{var oe;if((oe=c.value)!=null&&oe.bundleId)try{const H=await Y.getBindByBundleId(c.value.bundleId);if(H.success&&H.data){const be=Array.isArray(H.data)?H.data:[];F.value=be.map(_e=>({version:_e.version||"",fileId:_e.fileId||"",beta:_e.beta||!1}))}else F.value=[]}catch(H){console.error("加载预破解包信息失败:",H),F.value=[]}},ke=async oe=>{var be,_e,pe,Me;if(!((be=c.value)!=null&&be.bundleId)||F.value.length===0)return;const H=oe||F.value[0];try{i("正在获取下载链接...");const tt=await Y.downloadPreCrackedPackage(c.value.bundleId,H.version);if(!tt.success||!((_e=tt.data)!=null&&_e.downloadUrl)){r(),l(tt.message||"获取下载链接失败",3e3);return}const{downloadUrl:at,fileName:rt,appName:ft,version:qt}=tt.data;try{const ot=await Y.startDownload(at,rt);r(),ot.taskId?a(`下载任务已添加到下载列表:${ft} ${qt}`,3e3):l("添加下载任务失败,请检查下载管理器",3e3)}catch(ot){r(),console.error("启动下载失败:",ot);try{window.open(at,"_blank"),a("下载链接已在新窗口打开",3e3)}catch{l("无法打开下载链接,请检查浏览器设置",3e3)}}}catch(tt){r(),console.error("下载预破解包失败:",tt);const at=((Me=(pe=tt.response)==null?void 0:pe.data)==null?void 0:Me.message)||tt.message||"下载失败,请稍后重试";l(at,3e3)}};return(oe,H)=>{var be,_e;return u(),f("div",E3,[p.value?(u(),f("div",R3,[...H[11]||(H[11]=[n("div",{class:"spinner"},null,-1),n("p",null,"加载应用详情...",-1)])])):d.value?(u(),f("div",U3,[n("p",null,h(d.value),1),n("button",{onClick:N,class:"btn btn-primary"},"重试")])):c.value?(u(),f("div",P3,[n("div",M3,[n("button",{onClick:je,class:"back-btn"},[m(k,{icon:"mdi:arrow-left",class:"btn-icon"}),H[12]||(H[12]=$e(" 返回 ",-1))]),n("button",{onClick:le,class:"home-btn"},[m(k,{icon:"fluent-color:home-32",class:"btn-icon"}),H[13]||(H[13]=$e(" 首页 ",-1))])]),n("div",D3,[n("div",L3,[n("div",N3,[n("div",O3,[c.value.hasIcon!==!1&&q()?(u(),f("img",{key:0,src:q(),alt:c.value.name,class:Te({"icon-hidden":$.value}),onLoad:Q,onError:j},null,42,F3)):T("",!0),$.value&&c.value.hasIcon!==!1?(u(),f("div",V3,[...H[14]||(H[14]=[n("div",{class:"spinner"},null,-1)])])):T("",!0),M.value||c.value.hasIcon===!1?(u(),f("div",B3,h(c.value.name.charAt(0).toUpperCase()),1)):T("",!0)]),n("div",j3,[n("div",q3,[n("h1",H3,h(c.value.name),1),n("div",z3,[c.value.rating!==void 0?(u(),f("div",W3,[n("span",K3,h(c.value.rating.toFixed(1)),1),m(k,{icon:"fluent-color:star-24",class:"star-icon"}),c.value.ratingCount?(u(),f("span",G3,h(c.value.ratingCount)+"个评级 ",1)):T("",!0)])):T("",!0),c.value.category||xe()?(u(),f("span",Q3,"·")):T("",!0),c.value.category||xe()?(u(),f("span",J3,h(c.value.category||xe()),1)):T("",!0)]),n("div",X3,[n("span",Z3,"版本 "+h(c.value.version),1),c.value.bundleVersion?(u(),f("span",Y3," ("+h(c.value.bundleVersion)+") ",1)):T("",!0),c.value.injection&&c.value.injection.version?(u(),f("span",eC," · 已注入 "+h(c.value.injection.version),1)):T("",!0),m(T3,{"max-width":"350px"},{trigger:lt(()=>[m(k,{icon:"mdi:information-outline",class:"info-trigger-icon"})]),default:lt(()=>[n("div",tC,[n("div",sC,[H[15]||(H[15]=n("span",{class:"detail-label"},"Bundle ID:",-1)),n("span",nC,h(c.value.bundleId),1)]),n("div",oC,[H[16]||(H[16]=n("span",{class:"detail-label"},"路径:",-1)),n("span",aC,h(c.value.path),1)])])]),_:1})]),n("div",lC,[n("p",iC,h(c.value.description||ae()),1),re.value?(u(),f("button",{key:0,class:"expand-btn-inline",onClick:H[0]||(H[0]=pe=>y.value=!y.value)},h(y.value?"收起":"详细显示"),1)):T("",!0)]),n("div",rC,[c.value.status==="upgrade_available"?(u(),f("button",{key:0,class:"install-btn-compact btn-primary",onClick:ie,disabled:se(L)},[m(k,{icon:"mdi:update",class:"btn-icon"}),$e(" "+h(se(L)?"更新中...":"更新"),1)],8,cC)):c.value.status==="supported"?(u(),f("button",{key:1,class:"install-btn-compact btn-primary",onClick:ie,disabled:se(L)},[m(k,{icon:"mdi:power",class:"btn-icon"}),$e(" "+h(se(L)?"处理中...":"激活"),1)],8,uC)):c.value.status==="injected"?(u(),f("button",{key:2,class:"install-btn-compact btn-success",onClick:Pe},[m(k,{icon:"mdi:open-in-app",class:"btn-icon"}),H[17]||(H[17]=$e(" 打开 ",-1))])):(u(),f("button",{key:3,class:"install-btn-compact btn-secondary",onClick:H[1]||(H[1]=(...pe)=>se(ue)&&se(ue)(...pe)),disabled:se(L)},[m(k,{icon:"fluent-color:arrow-sync-24",class:"btn-icon"}),$e(" "+h(se(L)?"处理中...":"重新安装"),1)],8,dC)),F.value.length>0?(u(),f("div",fC,[F.value.length===1?(u(),f("button",{key:0,class:"install-btn-compact btn-warning",onClick:H[2]||(H[2]=pe=>ke(F.value[0]))},[m(k,{icon:"mdi:download",class:"btn-icon"}),H[18]||(H[18]=$e(" 下载预破解包 ",-1))])):(u(),f("div",pC,[n("button",{class:"install-btn-compact btn-warning download-btn-with-dropdown",onClick:H[3]||(H[3]=pe=>W.value=!W.value)},[m(k,{icon:"mdi:download",class:"btn-icon"}),H[19]||(H[19]=$e(" 下载预破解包 ",-1))]),m(gt,{name:"dropdown-fade"},{default:lt(()=>[W.value?(u(),f("div",{key:0,class:"download-dropdown",onClick:H[4]||(H[4]=Oe(()=>{},["stop"]))},[(u(!0),f(ye,null,Ee(F.value,(pe,Me)=>(u(),f("div",{key:Me,class:"download-option",onClick:tt=>{ke(pe),W.value=!1}},[m(k,{icon:"mdi:package-variant",class:"option-icon"}),n("div",mC,[n("span",hC,[$e(" 版本 "+h(pe.version)+" ",1),pe.beta?(u(),f("span",gC,"Beta")):T("",!0)])]),m(k,{icon:"mdi:download",class:"option-action-icon"})],8,vC))),128))])):T("",!0)]),_:1})]))])):T("",!0),n("button",{class:"report-btn-compact",onClick:g},[m(k,{icon:"mdi:alert-circle-outline",class:"btn-icon"}),H[20]||(H[20]=$e(" 报告问题 ",-1))]),n("button",{class:"share-btn-compact",onClick:P},[m(k,{icon:"fluent-color:share-ios-24"})])]),H[21]||(H[21]=n("div",{class:"provider-info-compact"}," 将进行下载和安装 ",-1))])])]),c.value.screenshots&&c.value.screenshots.length>0?(u(),f("div",yC,[n("div",bC,[H[23]||(H[23]=n("h2",null,"屏幕截图",-1)),n("button",_C,[H[22]||(H[22]=$e(" 查看全部 ",-1)),m(k,{icon:"fluent-color:arrow-right-24"})])]),n("div",wC,[(u(!0),f(ye,null,Ee(c.value.screenshots.slice(0,2),(pe,Me)=>(u(),f("div",{key:Me,class:"screenshot-item"},[n("img",{src:pe,alt:`${c.value.name} 截图 ${Me+1}`},null,8,kC)]))),128))])])):T("",!0),y.value?(u(),f("div",$C,[H[24]||(H[24]=n("h2",{class:"section-title"},"描述",-1)),n("div",CC,[c.value.description?(u(),f("p",IC,h(c.value.description),1)):(u(),f("p",SC,h(ae()),1))])])):T("",!0),n("div",xC,[H[36]||(H[36]=n("div",{class:"rating-header"},[n("h2",{class:"section-title"},"评分")],-1)),E.value||c.value.rating!==void 0?(u(),f("div",AC,[n("div",TC,[n("div",EC,[n("div",RC,[n("div",UC,[n("span",PC,h((((be=E.value)==null?void 0:be.averageRating)||c.value.rating||0).toFixed(1)),1),n("span",MC,h(((_e=E.value)==null?void 0:_e.totalCount)||c.value.ratingCount||0)+"个评分",1)]),n("div",DC,[(u(!0),f(ye,null,Ee(Fe.value,(pe,Me)=>(u(),f("div",{key:Me,class:"rating-bar-item"},[n("span",LC,h(5-Me),1),m(k,{icon:"fluent-color:star-16",class:"bar-star-icon"}),n("div",NC,[n("div",{class:"bar-fill",style:St({width:`${pe.percentage}%`})},null,4)]),n("span",OC,h(pe.count),1)]))),128))]),c.value.features&&c.value.features.length>0||c.value.developer||K()?(u(),f("div",FC,[n("div",VC,[c.value.features&&c.value.features.length>0?(u(),f("div",BC,[n("div",jC,[m(k,{icon:"mdi:sparkles",class:"info-icon"})]),n("div",qC,[H[25]||(H[25]=n("span",{class:"info-label"},"功能亮点",-1)),n("div",HC,[(u(!0),f(ye,null,Ee(c.value.features,(pe,Me)=>(u(),f("span",{key:Me,class:"feature-tag"},h(pe),1))),128))])])])):T("",!0),c.value.developer||K()?(u(),f("div",zC,[n("div",WC,[m(k,{icon:"mdi:account",class:"info-icon"})]),n("div",KC,[H[26]||(H[26]=n("span",{class:"info-label"},"开发者",-1)),n("span",GC,h(c.value.developer||K()),1)])])):T("",!0)]),C.value.length>0||E.value&&E.value.totalCount>0||c.value.update&&c.value.update.versions&&c.value.update.versions.length>0||c.value.screenshots&&c.value.screenshots.length>0?(u(),f("div",QC,[C.value.length>0?(u(),f("div",JC,[n("div",XC,[m(k,{icon:"fluent-color:comment-multiple-16",class:"info-icon"})]),n("div",ZC,[H[27]||(H[27]=n("span",{class:"info-label"},"用户评论",-1)),n("span",YC,h(C.value.length)+"条",1)])])):T("",!0),E.value&&E.value.totalCount>0?(u(),f("div",e4,[n("div",t4,[m(k,{icon:"fluent-color:star-16",class:"info-icon"})]),n("div",s4,[H[28]||(H[28]=n("span",{class:"info-label"},"总评分",-1)),n("span",n4,h(E.value.totalCount)+"个",1)])])):T("",!0),c.value.update&&c.value.update.versions&&c.value.update.versions.length>0?(u(),f("div",o4,[n("div",a4,[m(k,{icon:"mdi:history",class:"info-icon"})]),n("div",l4,[H[29]||(H[29]=n("span",{class:"info-label"},"历史版本",-1)),n("span",i4,h(c.value.update.versions.length)+"个",1)])])):T("",!0),c.value.screenshots&&c.value.screenshots.length>0?(u(),f("div",r4,[n("div",c4,[m(k,{icon:"mdi:image-multiple",class:"info-icon"})]),n("div",u4,[H[30]||(H[30]=n("span",{class:"info-label"},"截图",-1)),n("span",d4,h(c.value.screenshots.length)+"张",1)])])):T("",!0)])):T("",!0)])):T("",!0)])]),n("div",f4,[c.value.update&&c.value.update.latestVersion&&c.value.update.latestVersion!==c.value.version?(u(),f("div",p4,[n("div",v4,[m(k,{icon:"mdi:arrow-up-circle",class:"info-icon"})]),n("div",m4,[H[31]||(H[31]=n("span",{class:"info-label"},"存在更新版本",-1)),n("span",h4,h(c.value.update.latestVersion),1)])])):T("",!0),F.value.length>0?(u(),f("div",g4,[n("div",y4,[m(k,{icon:"mdi:package-variant",class:"info-icon"})]),n("div",b4,[H[32]||(H[32]=n("span",{class:"info-label"},"存在预破解包",-1)),n("span",_4,h(F.value.map(pe=>pe.version).join(", ")),1)])])):T("",!0)])])])):(u(),f("div",w4,[...H[33]||(H[33]=[n("p",null,"暂无评分",-1)])])),se(o)?T("",!0):(u(),f("button",{key:2,class:"login-to-review-btn",onClick:B},[m(k,{icon:"fluent-color:comment-multiple-16",class:"btn-icon"}),H[34]||(H[34]=$e(" 登录以进行评分或评价 ",-1))])),se(o)?(u(),f("div",k4,[H[35]||(H[35]=n("div",{class:"rating-input-label"},"为这个应用评分",-1)),n("div",$4,[(u(),f(ye,null,Ee(5,pe=>n("button",{key:pe,class:Te(["star-btn",{active:I.value>=pe,hover:x.value>=pe}]),onClick:Me=>Be(pe),onMouseenter:Me=>x.value=pe,onMouseleave:H[5]||(H[5]=Me=>x.value=0)},[m(k,{icon:"fluent-color:star-24"}),x.value===pe?(u(),f("span",I4,h(pe)+"分",1)):T("",!0)],42,C4)),64))]),I.value>0?(u(),f("div",S4,[n("button",{class:"submit-rating-btn",onClick:Ce}," 提交评分 ")])):T("",!0)])):T("",!0)]),m(F$,{"bundle-id":c.value.bundleId,comments:C.value,onSubmitComment:yt,onLikeComment:bt,onDislikeComment:It,onLikeReply:jt,onDislikeReply:Ae,onSubmitReply:J},null,8,["bundle-id","comments"]),c.value.update&&c.value.update.versions&&c.value.update.versions.length>0?(u(),f("div",x4,[H[37]||(H[37]=n("h2",{class:"section-title"},"可用版本",-1)),m(Ju,{bundleId:c.value.bundleId,versions:c.value.update.versions},null,8,["bundleId","versions"])])):T("",!0)]),n("div",A4,[m(uk,{"current-bundle-id":c.value.bundleId},null,8,["current-bundle-id"])])]),m(dd,{visible:se(X),title:se(ne),logs:se(ee),loading:se(L),status:se(we),"can-close":se(we)!=="loading",onClose:se(Z)},null,8,["visible","title","logs","loading","status","can-close","onClose"]),m(Qw,{visible:v.value,app:c.value,onClose:H[6]||(H[6]=pe=>v.value=!1),onSuccess:V},null,8,["visible","app"]),m(Qu,{show:b.value,onClose:ve,onSuccess:me},null,8,["show"]),m(S3,{visible:_.value,"app-info":c.value,onClose:A,onSubmit:z},null,8,["visible","app-info"])])):T("",!0),m(gt,{name:"sticky-header"},{default:lt(()=>[S.value&&c.value?(u(),f("div",T4,[n("div",E4,[n("div",R4,[c.value.hasIcon!==!1&&q()?(u(),f("img",{key:0,src:q(),alt:c.value.name,onError:j},null,40,U4)):(u(),f("div",P4,h(c.value.name.charAt(0).toUpperCase()),1))]),n("div",M4,[n("h2",D4,h(c.value.name),1),n("p",L4,h(c.value.developer||K()),1),n("div",N4,[n("span",O4,"版本 "+h(c.value.version),1),c.value.bundleVersion?(u(),f("span",F4," ("+h(c.value.bundleVersion)+") ",1)):T("",!0),c.value.injection&&c.value.injection.version?(u(),f("span",V4," · 已注入 "+h(c.value.injection.version),1)):T("",!0),c.value.update&&c.value.update.latestVersion&&c.value.update.latestVersion!==c.value.version?(u(),f("span",B4," · 最新 "+h(c.value.update.latestVersion),1)):T("",!0),F.value.length>0?(u(),f("span",j4," · 预破解包 "+h(F.value.map(pe=>pe.version).join(", ")),1)):T("",!0),c.value.rating!==void 0?(u(),f("span",q4,[$e(" · "+h(c.value.rating.toFixed(1))+" ",1),m(k,{icon:"fluent-color:star-16",class:"sticky-star-icon"})])):T("",!0)])]),n("div",H4,[n("div",z4,[c.value.status==="upgrade_available"?(u(),f("button",{key:0,class:"sticky-install-btn btn-primary",onClick:ie,disabled:se(L)},[m(k,{icon:"mdi:update",class:"btn-icon"}),$e(" "+h(se(L)?"更新中...":"更新"),1)],8,W4)):c.value.status==="supported"?(u(),f("button",{key:1,class:"sticky-install-btn btn-primary",onClick:ie,disabled:se(L)},[m(k,{icon:"mdi:power",class:"btn-icon"}),$e(" "+h(se(L)?"处理中...":"激活"),1)],8,K4)):c.value.status==="injected"?(u(),f("button",{key:2,class:"sticky-install-btn btn-success",onClick:Pe},[m(k,{icon:"mdi:open-in-app",class:"btn-icon"}),H[38]||(H[38]=$e(" 打开 ",-1))])):(u(),f("button",{key:3,class:"sticky-install-btn btn-secondary",onClick:H[7]||(H[7]=(...pe)=>se(ue)&&se(ue)(...pe)),disabled:se(L)},[m(k,{icon:"fluent-color:arrow-sync-24",class:"btn-icon"}),$e(" "+h(se(L)?"处理中...":"重新安装"),1)],8,G4)),F.value.length>0?(u(),f("div",Q4,[F.value.length===1?(u(),f("button",{key:0,class:"sticky-install-btn btn-warning",onClick:H[8]||(H[8]=pe=>ke(F.value[0]))},[m(k,{icon:"mdi:download",class:"btn-icon"}),H[39]||(H[39]=$e(" 下载预破解包 ",-1))])):(u(),f("div",J4,[n("button",{class:"sticky-install-btn btn-warning download-btn-with-dropdown",onClick:H[9]||(H[9]=pe=>W.value=!W.value)},[m(k,{icon:"mdi:download",class:"btn-icon"}),H[40]||(H[40]=$e(" 下载预破解包 ",-1))]),m(gt,{name:"dropdown-fade"},{default:lt(()=>[W.value?(u(),f("div",{key:0,class:"download-dropdown sticky-download-dropdown",onClick:H[10]||(H[10]=Oe(()=>{},["stop"]))},[(u(!0),f(ye,null,Ee(F.value,(pe,Me)=>(u(),f("div",{key:Me,class:"download-option",onClick:tt=>{ke(pe),W.value=!1}},[m(k,{icon:"mdi:package-variant",class:"option-icon"}),n("div",Z4,[n("span",Y4,[$e(" 版本 "+h(pe.version)+" ",1),pe.beta?(u(),f("span",e8,"Beta")):T("",!0)])]),m(k,{icon:"mdi:download",class:"option-action-icon"})],8,X4))),128))])):T("",!0)]),_:1})]))])):T("",!0)]),n("div",t8,[n("span",null,"由 "+h(c.value.developer||K())+" 提供和更新",1),H[41]||(H[41]=n("span",null,"·将进行下载和安装",-1))])])])])):T("",!0)]),_:1})])}}}),n8=We(s8,[["__scopeId","data-v-7537ff11"]]);function zo(e){if(e===0)return"0 B";const t=1024,s=["B","KB","MB","GB","TB"],o=Math.floor(Math.log(e)/Math.log(t));return`${(e/Math.pow(t,o)).toFixed(2)} ${s[o]}`}function o8(e){return e<=0?"--":`${zo(e)}/s`}function a8(e){if(e<=0)return"完成";if(e>=3600){const t=Math.floor(e/3600),s=Math.floor(e%3600/60);return`${t}小时${s}分钟`}if(e>=60){const t=Math.floor(e/60),s=Math.floor(e%60);return`${t}分${s}秒`}return`${Math.floor(e)}秒`}function Vr(e){return e<0?"0.00%":e>=100?"100.00%":`${e.toFixed(2)}%`}const l8={class:"download-manager"},i8={class:"filter-bar"},r8=["onClick"],c8={class:"filter-count"},u8={class:"recent-updates-section"},d8={class:"download-list"},f8={key:0,class:"empty-state"},p8={class:"item-icon"},v8={class:"item-content"},m8={class:"item-name-row"},h8={class:"item-name"},g8={class:"item-meta-row"},y8={class:"item-type"},b8={key:0,class:"item-progress-section"},_8={class:"progress-bar"},w8={class:"progress-info"},k8={class:"progress-text"},$8={class:"progress-stats"},C8={class:"progress-speed"},I8={class:"progress-time"},S8={key:1,class:"item-progress-section"},x8={class:"progress-info"},A8={class:"progress-stats"},T8={key:2,class:"item-error"},E8={class:"item-right"},R8={key:0,class:"item-status-text"},U8={class:"item-actions"},P8=["onClick"],M8={class:"btn-more-wrapper"},D8=["onClick"],L8=["onClick"],N8=["onClick"],O8=["onClick"],F8=["onClick"],V8=ze({__name:"DownloadManager",setup(e){const t=w([]),s=w("all");let o=null;const a=w(!1),l=w({title:"",message:"",type:"warning",confirmText:"确认",cancelText:"取消"});let i=null;const r=w(!1),c=w(null),p=[{label:"全部",value:"all"},{label:"下载中",value:"downloading"},{label:"已完成",value:"completed"},{label:"已暂停",value:"paused"},{label:"失败",value:"error"}],d=ge(()=>s.value==="all"?t.value:t.value.filter($=>$.status===s.value)),v=$=>$==="all"?t.value.length:t.value.filter(R=>R.status===$).length,b=$=>({pending:"等待中",downloading:"下载中",paused:"已暂停",completed:"应用",error:"失败"})[$]||"下载任务",_=$=>({downloading:"fluent-color:arrow-square-down-32",completed:"fluent-color:checkmark-circle-24",paused:"fluent-color:clock-24",error:"fluent-color:error-circle-24",pending:"fluent-color:hourglass-24"})[$.status]||"fluent-color:document-24",y=$=>{if($.status==="downloading")return"下载中";if($.status==="completed"&&$.updateTime){const R=new Date($.updateTime*1e3),N=new Date().getTime()-R.getTime();if(Math.floor(N/(1e3*60*60*24))===0)return"今天更新";{const X=R.getFullYear(),ne=String(R.getMonth()+1).padStart(2,"0"),ee=String(R.getDate()).padStart(2,"0");return`已于${X}/${ne}/${ee}更新`}}return""},S=($,R)=>{var M;R==null||R.stopPropagation(),r.value&&((M=c.value)==null?void 0:M.id)===$.id?(r.value=!1,c.value=null):(c.value=$,r.value=!0)},C=$=>{const R=$.target;r.value&&!R.closest(".menu-popup")&&!R.closest(".btn-more")&&(r.value=!1,c.value=null)};nt(()=>{I(),o=setInterval(I,1e3),document.addEventListener("click",C)}),At(()=>{o&&clearInterval(o),document.removeEventListener("click",C)});const I=async()=>{try{t.value=await Y.getAllDownloads()}catch($){console.error("加载下载列表失败:",$)}},x=()=>{I()},E=async $=>{try{await Y.pauseDownload($),await I()}catch(R){console.error("暂停下载失败:",R)}},F=async $=>{try{await Y.resumeDownload($),await I()}catch(R){console.error("继续下载失败:",R)}},W=($,R,M="warning")=>(r.value=!1,c.value=null,new Promise(N=>{l.value={title:$,message:R,type:M,confirmText:"确认",cancelText:"取消"},a.value=!0,i=N})),G=()=>{a.value=!1,i&&(i(!0),i=null)},re=()=>{a.value=!1,i&&(i(!1),i=null)},D=async $=>{if(await W("删除下载任务","确定要删除这个下载任务吗?","danger"))try{await Y.deleteDownload($),await I()}catch(M){console.error("删除下载失败:",M)}},U=async $=>{if(await W("重新下载",`确定要重新下载 "${$.fileName}" 吗?这将删除并重新下载该文件。`,"warning"))try{await Y.deleteDownload($.id),await Y.startDownload($.url,$.fileName),await I()}catch(M){console.error("重新下载失败:",M)}},O=async $=>{try{await Y.openDownloadFile($)}catch(R){console.error("打开文件失败:",R)}};return($,R)=>(u(),f("div",l8,[n("div",{class:"page-header"},[R[2]||(R[2]=n("div",{class:"header-content"},[n("h1",{class:"page-title"},"更新和下载"),n("p",{class:"page-subtitle"},' 通过单击"检查更新"、"全部更新"或"更新"下载并安装应用更新 ')],-1)),n("button",{class:"btn-check-updates",onClick:x}," 检查更新 ")]),n("div",i8,[(u(),f(ye,null,Ee(p,M=>n("button",{key:M.value,class:Te(["filter-btn",{active:s.value===M.value}]),onClick:N=>s.value=M.value},[$e(h(M.label)+" ",1),n("span",c8,h(v(M.value)),1)],10,r8)),64))]),n("div",u8,[R[13]||(R[13]=n("h2",{class:"section-title"},"最近的更新",-1)),n("div",d8,[d.value.length===0?(u(),f("div",f8,[m(k,{icon:"fluent-color:cloud-24",class:"empty-icon"}),R[3]||(R[3]=n("p",{class:"empty-text"},"暂无下载任务",-1))])):T("",!0),(u(!0),f(ye,null,Ee(d.value,M=>{var N;return u(),f("div",{key:M.id,class:"download-item"},[n("div",p8,[m(k,{icon:_(M),class:"icon"},null,8,["icon"])]),n("div",v8,[n("div",m8,[n("span",h8,h(M.fileName),1)]),n("div",g8,[R[4]||(R[4]=n("span",{class:"item-publisher"},"下载任务",-1)),R[5]||(R[5]=n("span",{class:"item-separator"},"•",-1)),n("span",y8,h(b(M.status)),1)]),M.status==="downloading"?(u(),f("div",b8,[n("div",_8,[n("div",{class:"progress-fill",style:St({width:se(Vr)(M.progress*100)})},null,4)]),n("div",w8,[n("span",k8,h(se(Vr)(M.progress*100)),1),n("span",$8,h(se(zo)(M.downloadedSize))+" / "+h(se(zo)(M.totalSize)),1),n("span",C8,h(se(o8)(M.downloadSpeed)),1),n("span",I8," 剩余 "+h(se(a8)(M.remainingTime)),1)])])):M.status==="completed"?(u(),f("div",S8,[R[7]||(R[7]=n("div",{class:"progress-bar"},[n("div",{class:"progress-fill completed",style:{width:"100%"}})],-1)),n("div",x8,[R[6]||(R[6]=n("span",{class:"progress-text"},"100%",-1)),n("span",A8,h(se(zo)(M.totalSize)),1)])])):T("",!0),M.errorMsg?(u(),f("div",T8,[m(k,{icon:"fluent-color:error-circle-24",class:"error-icon"}),$e(" "+h(M.errorMsg),1)])):T("",!0)]),n("div",E8,[y(M)?(u(),f("div",R8,h(y(M)),1)):T("",!0),n("div",U8,[M.status==="completed"?(u(),f("button",{key:0,class:"btn-action btn-open",onClick:L=>O(M.id)},[m(k,{icon:"mdi:folder-open",class:"btn-icon"}),R[8]||(R[8]=$e(" 打开 ",-1))],8,P8)):T("",!0),n("div",M8,[n("button",{class:"btn-more",onClick:Oe(L=>S(M,L),["stop"])},[m(k,{icon:"mdi:dots-vertical"})],8,D8),r.value&&((N=c.value)==null?void 0:N.id)===M.id?(u(),f("div",{key:0,class:"menu-popup",onClick:R[0]||(R[0]=Oe(()=>{},["stop"]))},[M.status==="downloading"?(u(),f("button",{key:0,class:"menu-item",onClick:Oe(L=>{E(M.id),r.value=!1},["stop"])},[m(k,{icon:"fluent-color:clock-24"}),R[9]||(R[9]=$e(" 暂停 ",-1))],8,L8)):T("",!0),M.status==="paused"?(u(),f("button",{key:1,class:"menu-item",onClick:Oe(L=>{F(M.id),r.value=!1},["stop"])},[m(k,{icon:"fluent-color:arrow-sync-24"}),R[10]||(R[10]=$e(" 继续 ",-1))],8,N8)):T("",!0),M.status==="completed"||M.status==="error"?(u(),f("button",{key:2,class:"menu-item",onClick:Oe(L=>{U(M),r.value=!1},["stop"])},[m(k,{icon:"fluent-color:arrow-sync-24"}),R[11]||(R[11]=$e(" 重新下载 ",-1))],8,O8)):T("",!0),n("button",{class:"menu-item danger",onClick:Oe(L=>{D(M.id),r.value=!1},["stop"])},[m(k,{icon:"fluent-color:dismiss-circle-24"}),R[12]||(R[12]=$e(" 删除 ",-1))],8,F8)])):T("",!0)])])])])}),128))])]),m(Sn,{visible:a.value,title:l.value.title,message:l.value.message,type:l.value.type,"confirm-text":l.value.confirmText,"cancel-text":l.value.cancelText,onConfirm:G,onCancel:re,"onUpdate:visible":R[1]||(R[1]=M=>a.value=M)},null,8,["visible","title","message","type","confirm-text","cancel-text"])]))}}),B8=We(V8,[["__scopeId","data-v-4d7bba9e"]]),j8={class:"slider-wrapper"},q8=["value","min","max","step"],H8={class:"slider-value"},z8=ze({__name:"Slider",props:{modelValue:{},min:{default:0},max:{default:100},step:{default:1},suffix:{default:""}},emits:["update:modelValue"],setup(e,{emit:t}){const s=e,o=t,a=ge(()=>s.suffix?`${s.modelValue} ${s.suffix}`:s.modelValue.toString()),l=ge(()=>{let c=s.modelValue;return c<s.min?c=s.min:c>s.max&&(c=s.max),c}),i=ge(()=>{const p=(l.value-s.min)/(s.max-s.min)*100;return{"--progress-percent":`${Math.max(0,Math.min(100,p))}%`}}),r=c=>{const p=c.target;o("update:modelValue",Number(p.value))};return(c,p)=>(u(),f("div",j8,[n("input",{value:l.value,type:"range",class:"setting-slider",style:St(i.value),min:e.min,max:e.max,step:e.step,onInput:r},null,44,q8),n("div",H8,h(a.value),1)]))}}),Bn=We(z8,[["__scopeId","data-v-0979b282"]]),W8={class:"toggle-wrapper"},K8=["checked"],G8={class:"toggle-slider"},Q8={key:0,class:"toggle-text"},J8=ze({__name:"Toggle",props:{modelValue:{type:Boolean},showLabel:{type:Boolean,default:!0}},emits:["update:modelValue"],setup(e,{emit:t}){const s=t,o=a=>{const l=a.target;s("update:modelValue",l.checked)};return(a,l)=>(u(),f("label",W8,[n("input",{checked:e.modelValue,type:"checkbox",class:"toggle-input",onChange:o},null,40,K8),n("span",G8,[e.showLabel?(u(),f("span",Q8,h(e.modelValue?"开":"关"),1)):T("",!0)])]))}}),X8=We(J8,[["__scopeId","data-v-c85b3e46"]]),Z8={class:"settings-page"},Y8={class:"settings-container"},e5={class:"settings-list"},t5={class:"setting-item"},s5={class:"setting-icon"},n5={class:"setting-content"},o5={class:"setting-input-wrapper"},a5={key:0,class:"setting-error"},l5={class:"setting-item"},i5={class:"setting-icon"},r5={class:"setting-content"},c5={class:"setting-item"},u5={class:"setting-icon"},d5={class:"setting-content"},f5={class:"setting-item"},p5={class:"setting-icon"},v5={class:"setting-item"},m5={class:"setting-icon"},h5={class:"setting-content"},g5={class:"setting-item"},y5={class:"setting-icon"},b5={class:"setting-content"},_5={class:"setting-item"},w5={class:"setting-icon"},k5={class:"setting-content"},$5={class:"setting-description"},C5={class:"setting-item"},I5={class:"setting-icon"},S5={class:"setting-content"},x5={class:"theme-options"},A5={class:"settings-actions"},T5=["disabled"],E5=["disabled"],R5={class:"about-section"},U5={class:"about-icon"},P5={class:"version-info"},M5={key:0,class:"about-details"},D5={class:"detail-section"},L5={class:"detail-content"},N5={class:"detail-item"},O5={class:"detail-value"},F5=ze({__name:"Settings",setup(e){const t=w({download_path:"",auto_check_update:!0,concurrent_downloads:3,theme:"auto",update_check_interval:10,update_check_threads:16,download_concurrent_threads:16,proxy_max_connections:10}),s=ge(()=>(t.value.cpu_cores||4)*2),o=w(""),a=w(!1),l=w(!1),{toasts:i,success:r,error:c,removeToast:p}=_t(),d=gs(),v=new Date().toLocaleDateString("zh-CN",{year:"numeric",month:"long",day:"numeric"}),b=()=>{l.value=!l.value},_=async()=>{try{const x=(await Y.getStatus()).cpu_cores||4;t.value.cpu_cores=x;const E=await Y.getAllSettings(),F=x*2,W=E.proxy_max_connections??10,G=Math.min(Math.max(W,1),F);t.value={download_path:E.download_path??"",auto_check_update:E.auto_check_update??!0,concurrent_downloads:E.concurrent_downloads??3,theme:E.theme??"auto",update_check_interval:E.update_check_interval??10,update_check_threads:E.update_check_threads??16,download_concurrent_threads:E.download_concurrent_threads??16,proxy_max_connections:G,cpu_cores:x}}catch(I){console.error("加载设置失败:",I),c("加载设置失败",4e3)}},y=async()=>{var x;const I=(x=t.value.download_path)==null?void 0:x.trim();if(!I){o.value="";return}try{const E=await Y.validatePath(I);E.exists?E.isDirectory?o.value="":o.value="路径不是目录":o.value="路径不存在"}catch{o.value="验证路径失败"}},S=async()=>{if(!o.value){a.value=!0;try{const I={};t.value.download_path!==void 0&&(I.download_path=t.value.download_path),t.value.auto_check_update!==void 0&&(I.auto_check_update=t.value.auto_check_update),t.value.concurrent_downloads!==void 0&&(I.concurrent_downloads=t.value.concurrent_downloads),t.value.theme!==void 0&&(I.theme=t.value.theme),t.value.update_check_interval!==void 0&&(I.update_check_interval=t.value.update_check_interval),t.value.update_check_threads!==void 0&&(I.update_check_threads=t.value.update_check_threads),t.value.download_concurrent_threads!==void 0&&(I.download_concurrent_threads=t.value.download_concurrent_threads),t.value.proxy_max_connections!==void 0&&(I.proxy_max_connections=t.value.proxy_max_connections),await Y.updateSettings(I),r("设置已保存",3e3)}catch(I){console.error("保存设置失败:",I),c("保存设置失败",4e3)}finally{a.value=!1}}},C=async()=>{await d.show({title:"重置设置",message:"确定要重置所有设置为默认值吗?",type:"warning",confirmText:"重置",cancelText:"取消"})&&(t.value={download_path:"",auto_check_update:!0,concurrent_downloads:3,theme:"auto",update_check_interval:10,update_check_threads:16,download_concurrent_threads:16,proxy_max_connections:10},o.value="")};return nt(()=>{_()}),(I,x)=>(u(),f("div",Z8,[n("div",Y8,[x[37]||(x[37]=n("h1",{class:"page-title"},"设置",-1)),n("div",e5,[n("div",t5,[n("div",s5,[m(k,{icon:"fluent-color:document-folder-24"})]),n("div",n5,[x[10]||(x[10]=n("h3",{class:"setting-title"},"下载路径",-1)),x[11]||(x[11]=n("p",{class:"setting-description"}," 请输入完整的绝对路径,不能使用 ~ 符号 ",-1)),n("div",o5,[m(k,{icon:"fluent-color:document-folder-24",class:"input-icon"}),Ve(n("input",{"onUpdate:modelValue":x[0]||(x[0]=E=>t.value.download_path=E),type:"text",class:"setting-input",placeholder:"/Users/你的用户名/Downloads/Hayaku/",onInput:y},null,544),[[Ke,t.value.download_path]])]),o.value?(u(),f("p",a5,[m(k,{icon:"fluent-color:error-circle-24",class:"error-icon"}),$e(" "+h(o.value),1)])):T("",!0)])]),n("div",l5,[n("div",i5,[m(k,{icon:"fluent-color:send-24"})]),n("div",r5,[x[12]||(x[12]=n("h3",{class:"setting-title"},"最大并发下载数",-1)),x[13]||(x[13]=n("p",{class:"setting-description"},"同时进行的下载任务数量",-1)),m(Bn,{modelValue:t.value.concurrent_downloads,"onUpdate:modelValue":x[1]||(x[1]=E=>t.value.concurrent_downloads=E),min:1,max:16,step:1},null,8,["modelValue"])])]),n("div",c5,[n("div",u5,[m(k,{icon:"fluent-color:link-multiple-24"})]),n("div",d5,[x[14]||(x[14]=n("h3",{class:"setting-title"},"下载并发线程数",-1)),x[15]||(x[15]=n("p",{class:"setting-description"}," 每个下载任务使用的并发线程数(默认:16) ",-1)),m(Bn,{modelValue:t.value.download_concurrent_threads,"onUpdate:modelValue":x[2]||(x[2]=E=>t.value.download_concurrent_threads=E),min:1,max:64,step:1},null,8,["modelValue"])])]),n("div",f5,[n("div",p5,[m(k,{icon:"fluent-color:arrow-sync-24"})]),x[16]||(x[16]=n("div",{class:"setting-content"},[n("h3",{class:"setting-title"},"自动检查更新"),n("p",{class:"setting-description"},"是否在后台自动检查应用更新")],-1)),m(X8,{modelValue:t.value.auto_check_update,"onUpdate:modelValue":x[3]||(x[3]=E=>t.value.auto_check_update=E)},null,8,["modelValue"])]),n("div",v5,[n("div",m5,[m(k,{icon:"fluent-color:clock-24"})]),n("div",h5,[x[17]||(x[17]=n("h3",{class:"setting-title"},"更新检查间隔(分钟)",-1)),x[18]||(x[18]=n("p",{class:"setting-description"}," 后台自动检查更新的时间间隔(默认:10分钟) ",-1)),m(Bn,{modelValue:t.value.update_check_interval,"onUpdate:modelValue":x[4]||(x[4]=E=>t.value.update_check_interval=E),min:1,max:1440,step:1,suffix:"分钟"},null,8,["modelValue"])])]),n("div",g5,[n("div",y5,[m(k,{icon:"fluent-color:link-multiple-24"})]),n("div",b5,[x[19]||(x[19]=n("h3",{class:"setting-title"},"更新检查并发线程数",-1)),x[20]||(x[20]=n("p",{class:"setting-description"}," 同时检查更新的URL数量(默认:16) ",-1)),m(Bn,{modelValue:t.value.update_check_threads,"onUpdate:modelValue":x[5]||(x[5]=E=>t.value.update_check_threads=E),min:1,max:64,step:1},null,8,["modelValue"])])]),n("div",_5,[n("div",w5,[m(k,{icon:"fluent-color:wifi-20"})]),n("div",k5,[x[21]||(x[21]=n("h3",{class:"setting-title"},"网络请求并发线程数",-1)),n("p",$5," 同时处理的网络请求数量(默认:10,最大:"+h(s.value)+") ",1),m(Bn,{modelValue:t.value.proxy_max_connections,"onUpdate:modelValue":x[6]||(x[6]=E=>t.value.proxy_max_connections=E),min:1,max:s.value,step:1},null,8,["modelValue","max"])])]),n("div",C5,[n("div",I5,[m(k,{icon:"fluent-color:options-24"})]),n("div",S5,[x[25]||(x[25]=n("h3",{class:"setting-title"},"主题",-1)),x[26]||(x[26]=n("p",{class:"setting-description"},"选择应用主题",-1)),n("div",x5,[n("button",{class:Te(["theme-option",{active:t.value.theme==="light"}]),onClick:x[7]||(x[7]=E=>t.value.theme="light")},[m(k,{icon:"fluent-color:weather-sunny-low-24"}),x[22]||(x[22]=n("span",null,"浅色",-1))],2),n("button",{class:Te(["theme-option",{active:t.value.theme==="dark"}]),onClick:x[8]||(x[8]=E=>t.value.theme="dark")},[m(k,{icon:"fluent-emoji-flat:crescent-moon"}),x[23]||(x[23]=n("span",null,"深色",-1))],2),n("button",{class:Te(["theme-option",{active:t.value.theme==="auto"}]),onClick:x[9]||(x[9]=E=>t.value.theme="auto")},[m(k,{icon:"fluent-emoji-flat:a-button-blood-type"}),x[24]||(x[24]=n("span",null,"自动",-1))],2)])])])]),n("div",A5,[n("button",{class:"btn btn-secondary",onClick:C,disabled:a.value},[m(k,{icon:"fluent-color:arrow-sync-24"}),x[27]||(x[27]=$e(" 重置为默认值 ",-1))],8,T5),n("button",{class:"btn btn-primary",onClick:S,disabled:a.value},[m(k,{icon:"fluent-color:document-add-24"}),$e(" "+h(a.value?"保存中...":"保存设置"),1)],8,E5)]),n("div",R5,[x[36]||(x[36]=n("h2",{class:"section-title"},"关于",-1)),n("div",{class:"about-item",onClick:b},[n("div",U5,[m(k,{icon:"fluent-color:apps-24"})]),x[29]||(x[29]=n("div",{class:"about-content"},[n("h3",{class:"about-title"},"秋城落叶 应用商店"),n("p",{class:"about-description"},"由 QiuChenly 发布")],-1)),n("div",P5,[x[28]||(x[28]=n("span",{class:"version-text"},"测试版 0.1 Beta",-1)),m(k,{icon:"mdi:chevron-down",class:Te(["version-arrow",{expanded:l.value}])},null,8,["class"])])]),m(gt,{name:"slide-down"},{default:lt(()=>[l.value?(u(),f("div",M5,[n("div",D5,[x[35]||(x[35]=n("h4",{class:"detail-title"},"个人信息",-1)),n("div",L5,[x[31]||(x[31]=n("div",{class:"detail-item"},[n("span",{class:"detail-label"},"开发者:"),n("span",{class:"detail-value"},"QiuChenly")],-1)),x[32]||(x[32]=n("div",{class:"detail-item"},[n("span",{class:"detail-label"},"邮箱:"),n("span",{class:"detail-value"},"qiuchenly@outlook.com")],-1)),x[33]||(x[33]=n("div",{class:"detail-item"},[n("span",{class:"detail-label"},"GitHub:"),n("span",{class:"detail-value"},"github.com/QiuChenly")],-1)),x[34]||(x[34]=n("div",{class:"detail-item"},[n("span",{class:"detail-label"},"版本:"),n("span",{class:"detail-value"},"测试版 0.1 Beta")],-1)),n("div",N5,[x[30]||(x[30]=n("span",{class:"detail-label"},"构建日期:",-1)),n("span",O5,h(se(v)),1)])])])])):T("",!0)]),_:1})])]),m(Yt,{toasts:se(i),onRemove:se(p)},null,8,["toasts","onRemove"]),m(Sn,{visible:se(d).visible.value,title:se(d).config.value.title||"",message:se(d).config.value.message||"",type:se(d).config.value.type,"confirm-text":se(d).config.value.confirmText,"cancel-text":se(d).config.value.cancelText,onConfirm:se(d).handleConfirm,onCancel:se(d).handleCancel},null,8,["visible","title","message","type","confirm-text","cancel-text","onConfirm","onCancel"])]))}}),V5=We(F5,[["__scopeId","data-v-69e04126"]]),B5={class:"profile-page"},j5={class:"profile-content"},q5={class:"info-card"},H5={class:"card-header"},z5={class:"card-actions"},W5={class:"card-content"},K5={class:"info-item"},G5={class:"value"},Q5={class:"info-item"},J5={class:"value"},X5={class:"info-item"},Z5={class:"value"},Y5={class:"info-item"},eI={class:"info-item"},tI={class:"info-item"},sI={class:"value"},nI={class:"info-item"},oI={class:"value"},aI={key:0,class:"info-item"},lI={class:"titles-list"},iI={key:1,class:"info-item devices-display"},rI={class:"devices-display-list"},cI={class:"device-display-info"},uI={class:"device-display-name"},dI={class:"device-display-details"},fI={class:"modal-dialog profile-edit-dialog"},pI={class:"modal-header"},vI={class:"modal-content"},mI={class:"avatar-section-wrapper"},hI=["src"],gI={key:1,class:"avatar-placeholder"},yI=["disabled"],bI=["disabled"],_I={key:1,class:"avatar-menu-item uploading"},wI={class:"form-group"},kI={class:"form-group"},$I={class:"form-group"},CI={class:"form-group"},II={class:"devices-list"},SI={class:"device-info"},xI={class:"device-name"},AI={class:"device-details"},TI={class:"device-actions"},EI=["onClick"],RI=["onClick"],UI={class:"modal-footer"},PI=["disabled"],MI={class:"modal-dialog"},DI={class:"modal-header"},LI={class:"modal-content"},NI={class:"form-group"},OI={class:"form-group"},FI=["value"],VI={class:"form-group"},BI=["value"],jI={class:"form-group"},qI=["value"],HI={class:"modal-footer"},zI={class:"modal-dialog"},WI={class:"modal-header"},KI={class:"modal-content"},GI={class:"form-group"},QI={class:"form-group"},JI={class:"form-group"},XI={class:"modal-footer"},ZI=["disabled"],YI=ze({__name:"Profile",setup(e){const{user:t,checkAuthStatus:s}=Ts(),{toasts:o,success:a,error:l,info:i,removeToast:r}=_t(),c=gs(),p=w(!1),d=w({nickName:"",email:"",avatar:"",age:0,devices:[]}),v=w(!1),b=w(!1),_=w(null),y=w({deviceName:"",deviceType:"",systemType:"",processorType:""}),S=w([]),C=w([]),I=w([]),x=async()=>{try{const[P,g,A]=await Promise.all([Y.getDeviceConfigs("device_type"),Y.getDeviceConfigs("system_type"),Y.getDeviceConfigs("processor_type")]);P.success&&P.data&&(S.value=P.data.map(z=>({label:z,value:z}))),g.success&&g.data&&(C.value=g.data.map(z=>({label:z,value:z}))),A.success&&A.data&&(I.value=A.data.map(z=>({label:z,value:z})))}catch(P){console.error("加载设备配置失败:",P)}},E=w(null),F=w(null),W=w(null),G=w(null),re=w(""),D=w(""),U=w(!1),O=w(!1),$=w(null),R=w(!1),M=w({oldPassword:"",newPassword:"",confirmPassword:""}),N=w(!1),L=P=>{if(!P)return"用户";switch(P){case"admin":return"管理员";case"qiuchenly":return"超级管理员";default:return"用户"}},X=P=>{switch(P){case"admin":return"role-admin";case"qiuchenly":return"role-super";default:return"role-user"}},ne=async()=>{if(d.value.avatar){if(d.value.avatar.startsWith("http://")||d.value.avatar.startsWith("https://")){D.value=d.value.avatar;return}try{const P=await Y.getImage(d.value.avatar,80,200,200);D.value&&D.value.startsWith("blob:")&&URL.revokeObjectURL(D.value),D.value=P}catch(P){console.error("获取头像失败:",P),D.value=""}}else D.value&&D.value.startsWith("blob:")&&URL.revokeObjectURL(D.value),D.value=""},ee=async()=>{t.value&&(d.value={nickName:t.value.nickName||"",email:t.value.email||"",avatar:t.value.avatar||"",age:t.value.age??0,devices:t.value.devices?[...t.value.devices]:[]},await ne()),p.value=!0},we=()=>{var P;(P=E.value)==null||P.click()},de=async P=>{var j;const A=(j=P.target.files)==null?void 0:j[0];if(!A)return;if(!A.type.startsWith("image/")){l("请选择图片文件",2e3);return}const z=10*1024*1024;if(A.size>z){l("图片大小不能超过10MB",2e3);return}const Q=new FileReader;Q.onload=V=>{var B;re.value=(B=V.target)==null?void 0:B.result},Q.readAsDataURL(A),G.value=A,await ue(A)},ue=async P=>{var g,A,z;U.value=!0;try{const Q=await Y.uploadImage("icon",P);if(Q.success&&((g=Q.data)!=null&&g.fileId))d.value.avatar=Q.data.fileId,a("头像上传成功",2e3);else throw new Error(Q.message||"上传头像失败")}catch(Q){console.error("上传头像失败:",Q);const j=((z=(A=Q.response)==null?void 0:A.data)==null?void 0:z.message)||Q.message||"上传头像失败";l(j,3e3),G.value=null,re.value=""}finally{U.value=!1}},Z=()=>{G.value=null,re.value="",d.value.avatar="",D.value&&D.value.startsWith("blob:")&&URL.revokeObjectURL(D.value),D.value="",E.value&&(E.value.value=""),O.value=!1},q=()=>{$.value&&(clearTimeout($.value),$.value=null),O.value=!0,pt(()=>{Pe()})},ie=P=>{const g=P.relatedTarget;g&&W.value&&W.value.contains(g)||($.value&&clearTimeout($.value),$.value=window.setTimeout(()=>{O.value=!1},200))},Pe=()=>{if(!O.value||!F.value||!W.value)return;const P=F.value.getBoundingClientRect(),g=W.value,A=52,z=g.offsetHeight;let Q=P.right+12,j=P.top;Q+A>window.innerWidth-20&&(Q=P.left-A-12),j+z>window.innerHeight-20&&(j=window.innerHeight-z-20),Q<20&&(Q=20),j<20&&(j=20),g.style.left=`${Q}px`,g.style.top=`${j}px`},je=async()=>{var P,g;if(t.value){v.value=!0;try{const A={};d.value.nickName!==void 0&&(A.nickName=d.value.nickName),d.value.email!==void 0&&(A.email=d.value.email),d.value.avatar!==void 0&&(A.avatar=d.value.avatar),d.value.age!==void 0&&(A.age=d.value.age),d.value.devices!==void 0&&(A.devices=d.value.devices);const z=await Y.updateProfile(A);z.success?(a("个人信息更新成功",2e3),p.value=!1,re.value="",G.value=null,await s()):l(z.message||"更新失败",3e3)}catch(A){l(((g=(P=A.response)==null?void 0:P.data)==null?void 0:g.message)||A.message||"更新失败",3e3)}finally{v.value=!1}}},le=()=>{_.value=null,y.value={deviceName:"",deviceType:"",systemType:"",processorType:""},b.value=!0},xe=P=>{const g=d.value.devices[P];g&&(_.value=P,y.value={...g},b.value=!0)},K=P=>{d.value.devices.splice(P,1)},ae=()=>{if(!y.value.deviceName||!y.value.deviceType||!y.value.systemType||!y.value.processorType){l("请填写完整的设备信息",2e3);return}_.value!==null?d.value.devices[_.value]={deviceName:y.value.deviceName,deviceType:y.value.deviceType,systemType:y.value.systemType,processorType:y.value.processorType}:d.value.devices.push({deviceName:y.value.deviceName,deviceType:y.value.deviceType,systemType:y.value.systemType,processorType:y.value.processorType}),b.value=!1,_.value=null},Fe=async()=>{var P,g;if(!M.value.oldPassword||!M.value.newPassword){l("请填写完整信息",2e3);return}if(M.value.newPassword!==M.value.confirmPassword){l("两次输入的新密码不一致",2e3);return}if(M.value.newPassword.length<6){l("新密码长度至少为6位",2e3);return}N.value=!0;try{const A=await Y.changePassword(M.value.oldPassword,M.value.newPassword);A.success?(a("密码修改成功",2e3),R.value=!1,M.value={oldPassword:"",newPassword:"",confirmPassword:""}):l(A.message||"密码修改失败",3e3)}catch(A){l(((g=(P=A.response)==null?void 0:P.data)==null?void 0:g.message)||A.message||"密码修改失败",3e3)}finally{N.value=!1}};return Xe(p,P=>{P&&ee()}),nt(async()=>{await x()}),(P,g)=>{var A,z,Q,j,V,B,ve,me,Le,Ue,Be;return u(),f("div",B5,[g[50]||(g[50]=n("div",{class:"profile-header"},[n("h1",null,"个人中心"),n("p",{class:"subtitle"},"管理您的账户和系统设置")],-1)),n("div",j5,[n("div",q5,[n("div",H5,[m(k,{icon:"mdi:account-circle",class:"card-icon"}),g[22]||(g[22]=n("h2",null,"用户信息",-1)),n("div",z5,[n("button",{onClick:ee,class:"btn btn-sm btn-primary"},[m(k,{icon:"mdi:pencil"}),g[20]||(g[20]=$e(" 编辑信息 ",-1))]),n("button",{onClick:g[0]||(g[0]=Ce=>R.value=!0),class:"btn btn-sm btn-secondary"},[m(k,{icon:"mdi:lock-reset"}),g[21]||(g[21]=$e(" 修改密码 ",-1))])])]),n("div",W5,[n("div",K5,[g[23]||(g[23]=n("span",{class:"label"},"用户名:",-1)),n("span",G5,h((A=se(t))==null?void 0:A.username),1)]),n("div",Q5,[g[24]||(g[24]=n("span",{class:"label"},"昵称:",-1)),n("span",J5,h(((z=se(t))==null?void 0:z.nickName)||"未设置"),1)]),n("div",X5,[g[25]||(g[25]=n("span",{class:"label"},"邮箱:",-1)),n("span",Z5,h(((Q=se(t))==null?void 0:Q.email)||"未设置"),1)]),n("div",Y5,[g[26]||(g[26]=n("span",{class:"label"},"角色:",-1)),n("span",{class:Te(["value role-badge",X((j=se(t))==null?void 0:j.role)])},h(L((V=se(t))==null?void 0:V.role)),3)]),n("div",eI,[g[27]||(g[27]=n("span",{class:"label"},"状态:",-1)),n("span",{class:Te(["value status-badge",((B=se(t))==null?void 0:B.status)==="active"?"active":"inactive"])},h(((ve=se(t))==null?void 0:ve.status)==="active"?"正常":"禁用"),3)]),n("div",tI,[g[28]||(g[28]=n("span",{class:"label"},"经验值:",-1)),n("span",sI,h(((me=se(t))==null?void 0:me.exp)??0),1)]),n("div",nI,[g[29]||(g[29]=n("span",{class:"label"},"等级:",-1)),n("span",oI,h(((Le=se(t))==null?void 0:Le.level)??0),1)]),(Ue=se(t))!=null&&Ue.titles&&se(t).titles.length>0?(u(),f("div",aI,[g[30]||(g[30]=n("span",{class:"label"},"头衔:",-1)),n("div",lI,[(u(!0),f(ye,null,Ee(se(t).titles,(Ce,Qe)=>(u(),f("span",{key:Qe,class:"title-badge"},h(Ce),1))),128))])])):T("",!0),(Be=se(t))!=null&&Be.devices&&se(t).devices.length>0?(u(),f("div",iI,[g[31]||(g[31]=n("span",{class:"label"},"设备列表:",-1)),n("div",rI,[(u(!0),f(ye,null,Ee(se(t).devices,(Ce,Qe)=>(u(),f("div",{key:Qe,class:"device-display-item"},[n("div",cI,[n("span",uI,h(Ce.deviceName),1),n("span",dI,h(Ce.deviceType)+" ("+h(Ce.systemType)+", "+h(Ce.processorType)+")",1)])]))),128))])])):T("",!0)])])]),m(Sn,{visible:se(c).visible.value,title:se(c).config.value.title||"",message:se(c).config.value.message||"",type:se(c).config.value.type,"confirm-text":se(c).config.value.confirmText,"cancel-text":se(c).config.value.cancelText,onConfirm:se(c).handleConfirm,onCancel:se(c).handleCancel},null,8,["visible","title","message","type","confirm-text","cancel-text","onConfirm","onCancel"]),m(Yt,{toasts:se(o),onRemove:se(r)},null,8,["toasts","onRemove"]),p.value?(u(),f("div",{key:0,class:"modal-overlay",onClick:g[6]||(g[6]=Oe(Ce=>p.value=!1,["self"]))},[n("div",fI,[n("div",pI,[g[32]||(g[32]=n("h3",null,"编辑个人信息",-1)),n("button",{onClick:g[1]||(g[1]=Ce=>p.value=!1),class:"close-btn"},[m(k,{icon:"mdi:close"})])]),n("div",vI,[n("div",mI,[n("div",{class:"avatar-section",onMouseenter:q,onMouseleave:ie},[n("div",{ref_key:"avatarPreviewRef",ref:F,class:"avatar-preview"},[re.value||D.value?(u(),f("img",{key:0,src:re.value||D.value,alt:"头像预览",class:"avatar-image"},null,8,hI)):(u(),f("div",gI,[m(k,{icon:"mdi:account",class:"placeholder-icon"})]))],512),n("input",{ref_key:"avatarInputRef",ref:E,type:"file",accept:"image/*",onChange:de,class:"file-input",style:{display:"none"}},null,544),(u(),Ne(Ot,{to:"body"},[m(gt,{name:"avatar-menu-fade"},{default:lt(()=>[O.value?(u(),f("div",{key:0,ref_key:"avatarMenuRef",ref:W,class:"avatar-menu",onMouseenter:q,onMouseleave:ie},[n("button",{type:"button",class:"avatar-menu-item",onClick:we,disabled:U.value,title:"更换"},[m(k,{icon:"fluent:image-edit-24-regular"})],8,yI),G.value||d.value.avatar?(u(),f("button",{key:0,type:"button",class:"avatar-menu-item danger",onClick:Z,disabled:U.value,title:"清除"},[m(k,{icon:"fluent:delete-24-regular"})],8,bI)):T("",!0),U.value?(u(),f("div",_I,[...g[33]||(g[33]=[n("div",{class:"spinner-small"},null,-1)])])):T("",!0)],544)):T("",!0)]),_:1})]))],32)]),n("div",wI,[g[34]||(g[34]=n("label",null,"昵称:",-1)),Ve(n("input",{"onUpdate:modelValue":g[2]||(g[2]=Ce=>d.value.nickName=Ce),type:"text",placeholder:"请输入昵称"},null,512),[[Ke,d.value.nickName]])]),n("div",kI,[g[35]||(g[35]=n("label",null,"邮箱:",-1)),Ve(n("input",{"onUpdate:modelValue":g[3]||(g[3]=Ce=>d.value.email=Ce),type:"email",placeholder:"请输入邮箱"},null,512),[[Ke,d.value.email]])]),n("div",$I,[g[36]||(g[36]=n("label",null,"年龄:",-1)),Ve(n("input",{"onUpdate:modelValue":g[4]||(g[4]=Ce=>d.value.age=Ce),type:"number",min:"0",max:"150",placeholder:"请输入年龄"},null,512),[[Ke,d.value.age,void 0,{number:!0}]])]),n("div",CI,[g[38]||(g[38]=n("label",null,"设备列表:",-1)),n("div",II,[(u(!0),f(ye,null,Ee(d.value.devices,(Ce,Qe)=>(u(),f("div",{key:Qe,class:"device-item"},[n("div",SI,[n("span",xI,h(Ce.deviceName),1),n("span",AI,h(Ce.deviceType)+" ("+h(Ce.systemType)+", "+h(Ce.processorType)+")",1)]),n("div",TI,[n("button",{onClick:Ge=>xe(Qe),class:"btn-icon",title:"编辑"},[m(k,{icon:"mdi:pencil"})],8,EI),n("button",{onClick:Ge=>K(Qe),class:"btn-icon danger",title:"删除"},[m(k,{icon:"mdi:delete"})],8,RI)])]))),128)),n("button",{onClick:le,class:"btn btn-sm btn-secondary"},[m(k,{icon:"mdi:plus"}),g[37]||(g[37]=$e(" 添加设备 ",-1))])])])]),n("div",UI,[n("button",{onClick:g[5]||(g[5]=Ce=>p.value=!1),class:"btn btn-secondary"},"取消"),n("button",{onClick:je,class:"btn btn-primary",disabled:v.value},h(v.value?"保存中...":"保存"),9,PI)])])])):T("",!0),b.value?(u(),f("div",{key:1,class:"modal-overlay",onClick:g[13]||(g[13]=Oe(Ce=>b.value=!1,["self"]))},[n("div",MI,[n("div",DI,[n("h3",null,h(_.value!==null?"编辑设备":"添加设备"),1),n("button",{onClick:g[7]||(g[7]=Ce=>b.value=!1),class:"close-btn"},[m(k,{icon:"mdi:close"})])]),n("div",LI,[n("div",NI,[g[39]||(g[39]=n("label",null,"设备名称:",-1)),Ve(n("input",{"onUpdate:modelValue":g[8]||(g[8]=Ce=>y.value.deviceName=Ce),type:"text",placeholder:"请输入设备名称"},null,512),[[Ke,y.value.deviceName]])]),n("div",OI,[g[41]||(g[41]=n("label",null,"设备类型:",-1)),Ve(n("select",{"onUpdate:modelValue":g[9]||(g[9]=Ce=>y.value.deviceType=Ce),class:"form-select"},[g[40]||(g[40]=n("option",{value:""},"请选择设备类型",-1)),(u(!0),f(ye,null,Ee(S.value,Ce=>(u(),f("option",{key:Ce.value,value:Ce.value},h(Ce.label),9,FI))),128))],512),[[Xn,y.value.deviceType]])]),n("div",VI,[g[43]||(g[43]=n("label",null,"系统类型:",-1)),Ve(n("select",{"onUpdate:modelValue":g[10]||(g[10]=Ce=>y.value.systemType=Ce),class:"form-select"},[g[42]||(g[42]=n("option",{value:""},"请选择系统类型",-1)),(u(!0),f(ye,null,Ee(C.value,Ce=>(u(),f("option",{key:Ce.value,value:Ce.value},h(Ce.label),9,BI))),128))],512),[[Xn,y.value.systemType]])]),n("div",jI,[g[45]||(g[45]=n("label",null,"处理器类型:",-1)),Ve(n("select",{"onUpdate:modelValue":g[11]||(g[11]=Ce=>y.value.processorType=Ce),class:"form-select"},[g[44]||(g[44]=n("option",{value:""},"请选择处理器类型",-1)),(u(!0),f(ye,null,Ee(I.value,Ce=>(u(),f("option",{key:Ce.value,value:Ce.value},h(Ce.label),9,qI))),128))],512),[[Xn,y.value.processorType]])])]),n("div",HI,[n("button",{onClick:g[12]||(g[12]=Ce=>b.value=!1),class:"btn btn-secondary"},"取消"),n("button",{onClick:ae,class:"btn btn-primary"},"保存")])])])):T("",!0),R.value?(u(),f("div",{key:2,class:"modal-overlay",onClick:g[19]||(g[19]=Oe(Ce=>R.value=!1,["self"]))},[n("div",zI,[n("div",WI,[g[46]||(g[46]=n("h3",null,"修改密码",-1)),n("button",{onClick:g[14]||(g[14]=Ce=>R.value=!1),class:"close-btn"},[m(k,{icon:"mdi:close"})])]),n("div",KI,[n("div",GI,[g[47]||(g[47]=n("label",null,"当前密码:",-1)),Ve(n("input",{"onUpdate:modelValue":g[15]||(g[15]=Ce=>M.value.oldPassword=Ce),type:"password",placeholder:"请输入当前密码"},null,512),[[Ke,M.value.oldPassword]])]),n("div",QI,[g[48]||(g[48]=n("label",null,"新密码:",-1)),Ve(n("input",{"onUpdate:modelValue":g[16]||(g[16]=Ce=>M.value.newPassword=Ce),type:"password",placeholder:"请输入新密码"},null,512),[[Ke,M.value.newPassword]])]),n("div",JI,[g[49]||(g[49]=n("label",null,"确认新密码:",-1)),Ve(n("input",{"onUpdate:modelValue":g[17]||(g[17]=Ce=>M.value.confirmPassword=Ce),type:"password",placeholder:"请再次输入新密码"},null,512),[[Ke,M.value.confirmPassword]])])]),n("div",XI,[n("button",{onClick:g[18]||(g[18]=Ce=>R.value=!1),class:"btn btn-secondary"},"取消"),n("button",{onClick:Fe,class:"btn btn-primary",disabled:N.value},h(N.value?"修改中...":"确认修改"),9,ZI)])])])):T("",!0)])}}}),e6=We(YI,[["__scopeId","data-v-921e346e"]]),t6={class:"new-features-page"},s6={class:"features-container"},n6={class:"features-list"},o6={class:"feature-header"},a6={class:"feature-title"},l6={class:"feature-description"},i6={key:0,class:"feature-action"},r6=["onClick"],c6=ze({__name:"NewFeatures",setup(e){const t=Gt(),s=w([{title:"用户个人信息更新和密码修改功能",type:"feature",description:"新增用户个人信息更新和密码修改功能,优化API接口以支持用户资料和设备信息管理。现在你可以在个人中心编辑昵称、邮箱、头像、年龄等个人信息,并可以安全地修改账户密码。新增设备配置管理功能,支持设备类型、系统类型和处理器类型的获取与管理,让你能够更好地管理多设备信息。",action:{type:"button",label:"前往个人中心",route:"/profile"}},{title:"标签页组件和分页组件",type:"feature",description:"新增了通用的标签页(Tabs)组件和分页(Pagination)组件,提升了界面的一致性和用户体验。标签页组件支持滚动导航和箭头切换,当标签过多时可以横向滚动查看。分页组件提供了清晰的分页信息显示和导航功能,让数据浏览更加便捷。"},{title:"讨论区管理功能增强",type:"feature",description:"讨论区管理功能全面增强,管理员可以批量查看和管理所有讨论区的权限状态。支持按状态筛选(全部、已启用、已禁用),可以快速搜索讨论区。新增了申请开通管理功能,管理员可以查看所有用户的申请请求,支持一键批准全部待处理申请,大大提高审核效率。",action:{type:"button",label:"前往管理员面板",route:"/admin"}},{title:"讨论区权限批量查询优化",type:"feature",description:"优化了讨论区权限的查询机制,现在支持批量获取多个讨论区的权限信息,包括权限状态、统计信息和申请状态。系统会自动获取每个讨论区的帖子统计(今日发帖数、总发帖数)和用户的申请状态,减少了多次请求,提升了页面加载速度。"},{title:"用户编辑功能增强",type:"feature",description:"用户编辑对话框功能全面增强,新增了头像预览、上传和删除功能。支持鼠标悬停显示操作菜单,可以预览、更换或清除头像。头像上传支持图片格式验证和大小限制(10MB以内),上传成功后立即显示预览效果。界面设计更加美观,操作更加便捷。"},{title:"版本列表功能增强",type:"feature",description:"版本列表组件功能增强,现在会显示每个版本的下载链接地址,方便用户查看下载来源。支持正式版和测试版的筛选,版本标签样式更加美观。下载按钮状态更加清晰,包括下载中、已启动等状态,提供更好的视觉反馈。"},{title:"管理员面板功能扩展",type:"feature",description:"管理员面板新增了多个管理模块,包括文件管理、App管理、系统设置等。所有管理模块都采用了统一的标签页和分页组件,界面风格一致。支持搜索、筛选和批量操作功能,让管理工作更加高效便捷。",action:{type:"button",label:"前往管理员面板",route:"/admin"}},{title:"应用详情页面优化",type:"feature",description:"应用详情页面全面优化,图标添加了加载动画,提供更好的视觉反馈。移除了应用头部卡片的背景和阴影,界面更加简洁。开发者信息现在单独显示在功能亮点下方,布局更加清晰。功能亮点以标签样式展示,每个功能项都有独立的标签,视觉效果更美观。"},{title:"应用列表显示优化",type:"fix",description:"修复了「所有应用」页面只显示配置中的应用的问题。现在会显示系统中所有已安装的应用,包括不在配置中的应用。不在配置中的应用会显示为「不支持」状态,虽然没有注入和更新功能,但仍然可以查看基本信息。"},{title:"应用详情页面可访问性提升",type:"fix",description:"修复了不在配置中的应用无法访问详情页面的问题。现在即使应用不在支持列表中,也可以正常查看应用详情、图标等基本信息,提升了应用的可用性。"},{title:"卡片边框优化",type:"fix",description:"优化了应用详情页面的卡片边框显示。应用头部卡片移除了边框,界面更加简洁。其他卡片(评分、评论、描述等)保持边框,确保在暗色模式下有足够的对比度,提升可读性。"},{title:"私信新会话功能",type:"feature",description:"私信界面新增了「新会话」功能,现在你可以浏览用户列表并选择用户开始聊天。用户列表支持搜索功能,可以按用户名或昵称快速查找。界面设计简洁美观,显示用户头像、昵称等基本信息。",action:{type:"button",label:"前往私信",route:"/messages"}},{title:"新会话数据刷新优化",type:"fix",description:"修复了新会话界面数据不刷新的问题。现在每次打开新会话时都会自动刷新用户列表,确保显示的是最新数据。"},{title:"网络请求性能大幅提升",type:"feature",description:"现在多个网络请求可以同时处理,不再需要等待前一个请求完成。无论是加载应用列表、检查更新还是其他操作,响应速度都显著提升。你可以在设置页面中调整「网络请求并发线程数」,系统会根据你的 CPU 核心数自动设置合理的最大值。",action:{type:"button",label:"前往设置",route:"/settings"}},{title:"可自定义网络请求并发数",type:"feature",description:"新增了网络请求并发线程数的配置选项,你可以根据网络环境和设备性能灵活调整。配置会立即生效,无需重启应用,让你能够获得最佳的请求处理速度。",action:{type:"button",label:"前往设置",route:"/settings"}},{title:"应用稳定性提升",type:"fix",description:"修复了多线程环境下可能导致的崩溃问题,提升了应用的稳定性和可靠性。"},{title:"设置页面显示优化",type:"fix",description:"修复了设置页面中滑块条显示不正确的问题,现在能够正确显示配置的实际值。"},{title:"下载文件名解码修复",type:"fix",description:"修复了下载URL中包含中文等特殊字符时文件名无法正确解码的问题。现在系统会自动从URL中提取文件名并进行URL解码,确保包含中文、空格等特殊字符的文件名能够正确显示和处理。"},{title:"系统通知功能",type:"feature",description:"全新的系统通知中心,集中管理所有重要通知。包括讨论区申请通过/拒绝通知、举报处理结果通知等。系统通知支持展开查看详细信息,包括申请详情、举报详情等。支持标记全部为已读,让你不错过任何重要信息。",action:{type:"button",label:"前往消息通知",route:"/notifications"}},{title:"讨论区申请开通功能",description:"如果某个应用的讨论区尚未开放,你可以点击「申请开放」按钮提交申请。申请提交后,管理员会收到通知并可以审核你的申请。申请通过后,讨论区将自动开放,你可以正常使用该讨论区的所有功能。",action:{type:"button",label:"前往讨论区",route:"/discussion"}},{title:"讨论区管理功能",description:"管理员可以在管理员面板中管理所有讨论区。支持按状态筛选(全部、已启用、已禁用),可以快速搜索讨论区。管理员可以一键启用或禁用某个讨论区,控制用户对讨论区的访问权限。所有讨论区默认禁用,需要管理员手动启用。",action:{type:"button",label:"前往管理员面板",route:"/admin"}},{title:"申请开通管理功能",description:"管理员可以在讨论区管理页面中查看所有用户的申请开通请求。支持一键批准全部待处理申请,大大提高审核效率。每个申请都显示应用名称、Bundle ID、申请人、申请时间等信息,方便管理员快速做出决策。",action:{type:"button",label:"前往管理员面板",route:"/admin"}},{title:"私信系统",description:"全新的一对一私信功能,让你可以与其他用户进行私密交流。支持发送文本消息、图片和文件。你可以拒收特定用户的消息,或拉黑用户以完全阻止其联系。私信支持实时对话,界面简洁美观,让你能够轻松管理所有会话。",action:{type:"button",label:"前往私信",route:"/messages"}},{title:"用户操作菜单",description:"在讨论区的帖子、回复和楼中楼中,点击任意用户名即可弹出操作菜单。你可以快速举报用户或发送私信,操作更加便捷高效。"},{title:"管理员面板",description:"为管理员提供完整的管理工具,包括用户管理、帖子管理、违规处理和系统设置。支持搜索和筛选功能,可以快速定位和处理问题。违规处理支持按状态筛选(全部、待处理、已处理、已驳回),让管理工作更加高效。",action:{type:"button",label:"前往管理员面板",route:"/admin"}},{title:"消息通知中心",description:"全新的消息通知功能,集中管理所有通知。包括我举报的处理状态、我回复的帖子动态、回复我的通知,以及私信消息。支持按类型筛选和标记已读,让你不错过任何重要信息。",action:{type:"button",label:"前往消息通知",route:"/notifications"}},{title:"优化的搜索体验",description:"搜索框新增蓝色焦点指示条,更清晰地显示搜索状态。搜索结果下拉框优化了内部样式,移除了不必要的圆角,界面更加简洁。搜索历史记录支持快速选择和删除,让搜索更加便捷。"},{title:"讨论区功能",description:"为每个已安装的应用自动创建讨论板块,支持发布帖子、回复和楼中楼回复。你可以上传图片(最多5张,每张10M以内)和文件(最多5个,每个20M以内),支持图片预览和文件下载。还可以对帖子进行点赞、点踩和举报操作。",action:{type:"button",label:"前往讨论区",route:"/discussion"}},{title:"发帖和回复功能",description:"在讨论区中,你可以发布新帖子,包含标题、内容和附件。支持对帖子进行回复,以及嵌套的楼中楼回复功能。所有回复都可以附带图片和文件,让你能够更好地分享信息和资源。",action:{type:"button",label:"前往讨论区",route:"/discussion"}},{title:"举报功能",description:"新增完善的举报功能,支持举报帖子、回复和楼中楼回复。你可以选择多种举报类型(涉黄、诈骗、恶意引流、侮辱谩骂、引战、不符合社会核心主义价值观),并可添加补充说明,帮助我们更好地处理违规内容。举报按钮采用淡红色主题,更加醒目。"},{title:"支持下载未安装的应用",description:'现在你可以在"来自官方"页面浏览和下载未在 Mac 上安装的应用。应用列表会分为"已安装的应用"和"未在此Mac上安装"两个部分,让你可以轻松发现和下载新的应用。只需点击下载按钮,选择版本即可开始下载。',action:{type:"button",label:"前往来自官方",route:"/official"}},{title:"QiuChenly 应用商店产品页面的最新更新日期",description:'QiuChenly 应用商店产品页面现在在"其他信息"部分显示上次更新日期,使你能够轻松了解产品的维护和发布节奏。此日期反映了 QiuChenly 应用商店用户可以使用最新程序包更新的时间。'},{title:"焕然一新的登陆体验",description:"重新设计的登陆体验可让你比以往更轻松地了解最新内容、优惠和促销,发现 QiuChenly 应用商店中的新增功能和令人兴奋的内容。"},{title:"更新更多应用",description:'现在,你可以在 QiuChenly 应用商店中轻松、直接地更新我们的发布者提供的应用。你可以从"产品"页面进行更新,也可以转到"下载"页面,然后单击"检查更新"。如果任何已安装的此类型应用有更新,它将显示在待处理列表中。只需单击"更新"按钮即可。',action:{type:"button",label:"查看下载",route:"/downloads"}},{title:"新产品详细信息页面布局",description:"经过改进的产品详细信息页面布局以开发人员提供的主题视频和图像为核心,旨在提供具有凝聚力和视觉吸引力的体验。"},{title:"增强的搜索功能",description:"全新的搜索算法能够更准确地匹配你的搜索意图,提供更相关的结果。同时支持智能推荐和搜索历史记录,让发现应用变得更加便捷。"},{title:"优化的下载管理",description:"下载管理界面现在提供更详细的进度信息,包括下载速度、剩余时间和文件大小。你可以随时暂停、恢复或取消下载任务。",action:{type:"button",label:"前往下载管理",route:"/downloads"}},{title:"增强的下载管理系统",description:"新增下载管理数据库和下载代理功能,提供更稳定可靠的下载服务。本地数据管理系统让你可以更好地管理应用配置和设置,所有数据都安全地存储在本地。"},{title:"完善的API和服务器功能",description:"HTTP服务器处理程序已全面更新,现在支持应用信息和下载任务的完整管理。增强的API接口支持应用配置和设置的获取与更新,让你可以更灵活地管理应用。"},{title:"重构的用户界面",description:"前端组件已全面重构,采用现代化的样式和布局设计,带来更流畅的用户体验。界面响应速度更快,交互更加直观,整体性能和可用性显著提升。"},{title:"应用推荐和官方应用",description:"新增应用推荐功能,帮助你发现更多优质应用。官方应用页面让你可以浏览和下载来自官方的应用,所有应用都经过 QiuChenly 认证,是可信来源,安全可靠。",action:{type:"button",label:"查看官方应用",route:"/official"}},{title:"增强的应用管理",description:"应用管理功能全面增强,支持应用的打开、更新、配置等操作。路由系统已更新以支持新特性,让你可以更方便地访问各种功能。"}]),o=a=>{a.route?t.push(a.route):a.url&&window.open(a.url,"_blank")};return(a,l)=>(u(),f("div",t6,[n("div",s6,[l[0]||(l[0]=n("div",{class:"page-header"},[n("h1",{class:"page-title"},"QiuChenly 应用商店中的新增功能"),n("p",{class:"page-subtitle"}," 我们很高兴分享改进,为你提供更好的 QiuChenly 应用商店。 ")],-1)),n("div",n6,[(u(!0),f(ye,null,Ee(s.value,(i,r)=>(u(),f("div",{key:r,class:Te(["feature-item",{"feature-type-new":!i.type||i.type==="feature","feature-type-fix":i.type==="fix"}])},[n("div",o6,[n("h2",a6,h(i.title),1),n("span",{class:Te(["new-badge",{"badge-feature":!i.type||i.type==="feature","badge-fix":i.type==="fix"}])},h(i.type==="fix"?"修复":"新"),3)]),n("p",l6,h(i.description),1),i.action?(u(),f("div",i6,[i.action.type==="button"?(u(),f("button",{key:0,class:"action-button",onClick:c=>o(i.action)},h(i.action.label),9,r6)):T("",!0)])):T("",!0)],2))),128))])])]))}}),u6=We(c6,[["__scopeId","data-v-583b3767"]]),d6={class:"apps-page"},f6={class:"page-container"},p6={key:0,class:"loading"},v6={key:1,class:"error"},m6={key:2,class:"empty"},h6={key:3,class:"apps-grid"},g6={key:4,class:"list-footer"},y6={class:"footer-stats"},b6={class:"stat-item"},_6={class:"stat-value"},w6=ze({__name:"Apps",setup(e){const t=w([]),s=w(!0),o=w(""),a=async()=>{s.value=!0,o.value="";try{const i=await Y.getApps();t.value=i.sort((r,c)=>r.name.localeCompare(c.name))}catch(i){console.error("加载应用列表失败:",i),o.value="加载应用列表失败,请检查服务是否运行",t.value=[]}finally{s.value=!1}},l=async i=>{console.log(`应用 ${i} 已更新`),await a()};return nt(()=>{a()}),(i,r)=>(u(),f("div",d6,[n("div",f6,[r[4]||(r[4]=n("div",{class:"page-header"},[n("h1",{class:"page-title"},"所有应用"),n("p",{class:"page-description"},"系统中所有已安装的应用")],-1)),s.value?(u(),f("div",p6,[...r[0]||(r[0]=[n("div",{class:"spinner"},null,-1),n("p",null,"加载应用中...",-1)])])):o.value?(u(),f("div",v6,[n("p",null,h(o.value),1),n("button",{onClick:a,class:"btn btn-primary"},"重试")])):t.value.length===0?(u(),f("div",m6,[m(k,{icon:"fluent-color:apps-24",class:"empty-icon"}),r[1]||(r[1]=n("p",null,"没有找到应用",-1)),r[2]||(r[2]=n("p",{class:"empty-hint"},"系统中没有已安装的应用",-1))])):(u(),f("div",h6,[(u(!0),f(ye,null,Ee(t.value,c=>(u(),Ne(po,{key:c.bundleId,app:c,mode:"list",onUpdated:l},null,8,["app"]))),128))])),t.value.length>0?(u(),f("div",g6,[n("div",y6,[n("span",b6,[r[3]||(r[3]=n("span",{class:"stat-label"},"总计:",-1)),n("span",_6,h(t.value.length),1)])])])):T("",!0)])]))}}),k6=We(w6,[["__scopeId","data-v-3d91182b"]]),$6={class:"official-apps-page"},C6={class:"page-container"},I6={key:0,class:"loading"},S6={key:1,class:"error"},x6={key:2,class:"empty"},A6={key:3},T6={key:0,class:"app-section"},E6={class:"apps-grid"},R6={key:1,class:"app-section"},U6={class:"apps-grid"},P6={key:4,class:"list-footer"},M6={class:"footer-stats"},D6={class:"stat-item"},L6={class:"stat-value"},N6={class:"stat-item"},O6={class:"stat-value"},F6={class:"stat-item"},V6={class:"stat-value"},B6=ze({__name:"OfficialApps",setup(e){const t=w([]),s=w(!0),o=w(""),a=ge(()=>t.value.sort((p,d)=>p.name.localeCompare(d.name))),l=ge(()=>a.value.filter(p=>p.path&&p.path.length>0)),i=ge(()=>a.value.filter(p=>!p.path||p.path.length===0)),r=async()=>{s.value=!0,o.value="";try{const p=await Y.getStoreApps();t.value=p}catch(p){console.error("加载应用列表失败:",p),o.value="加载应用列表失败,请检查服务是否运行",t.value=[]}finally{s.value=!1}},c=async p=>{console.log(`应用 ${p} 已更新`),await r()};return nt(()=>{r()}),(p,d)=>(u(),f("div",$6,[n("div",C6,[d[8]||(d[8]=n("div",{class:"page-header"},[n("h1",{class:"page-title"},"来自官方"),n("p",{class:"page-description"},"浏览和下载经过 QiuChenly 认证的可信来源应用")],-1)),s.value?(u(),f("div",I6,[...d[0]||(d[0]=[n("div",{class:"spinner"},null,-1),n("p",null,"加载应用中...",-1)])])):o.value?(u(),f("div",S6,[n("p",null,h(o.value),1),n("button",{onClick:r,class:"btn btn-primary"},"重试")])):a.value.length===0?(u(),f("div",x6,[m(k,{icon:"fluent-color:shield-checkmark-24",class:"empty-icon"}),d[1]||(d[1]=n("p",null,"没有找到来自官方的应用",-1)),d[2]||(d[2]=n("p",{class:"empty-hint"},"当前没有可用的应用更新",-1))])):(u(),f("div",A6,[l.value.length>0?(u(),f("div",T6,[d[3]||(d[3]=n("h3",{class:"section-title"},"已安装的应用",-1)),n("div",E6,[(u(!0),f(ye,null,Ee(l.value,v=>(u(),Ne(po,{key:v.bundleId,app:v,mode:"list",onUpdated:c},null,8,["app"]))),128))])])):T("",!0),i.value.length>0?(u(),f("div",R6,[d[4]||(d[4]=n("h3",{class:"section-title"},"未在此Mac上安装",-1)),n("div",U6,[(u(!0),f(ye,null,Ee(i.value,v=>(u(),Ne(po,{key:v.bundleId,app:v,mode:"list",onUpdated:c},null,8,["app"]))),128))])])):T("",!0)])),a.value.length>0?(u(),f("div",P6,[n("div",M6,[n("span",D6,[d[5]||(d[5]=n("span",{class:"stat-label"},"总计:",-1)),n("span",L6,h(a.value.length),1)]),n("span",N6,[d[6]||(d[6]=n("span",{class:"stat-label"},"已安装:",-1)),n("span",O6,h(l.value.length),1)]),n("span",F6,[d[7]||(d[7]=n("span",{class:"stat-label"},"未安装:",-1)),n("span",V6,h(i.value.length),1)])])])):T("",!0)])]))}}),j6=We(B6,[["__scopeId","data-v-7fd628ad"]]),q6={class:"discussion-forums-page"},H6={class:"page-container"},z6={key:0,class:"loading"},W6={key:1,class:"error"},K6={key:2,class:"empty"},G6={key:3,class:"forums-grid"},Q6=["onClick"],J6={class:"forum-icon-wrapper"},X6={class:"forum-icon"},Z6=["src","alt","onLoad","onError"],Y6={class:"forum-info"},eS={class:"forum-name"},tS={class:"forum-bundle-id"},sS={key:0,class:"forum-stats"},nS={class:"stat-item"},oS={class:"stat-item"},aS={key:1,class:"forum-status-disabled"},lS=["onClick","disabled"],iS={key:4,class:"list-footer"},rS={class:"footer-stats"},cS={class:"stat-item"},uS={class:"stat-value"},dS=ze({__name:"DiscussionForums",setup(e){const t=Gt(),s=w([]),o=w(!0),a=w(""),l=w(new Map),i=_t(),r=async()=>{try{const _=await Y.getForumPermissions();l.value.clear(),_.forEach(y=>{l.value.set(y.bundleId,y)})}catch(_){console.error("加载讨论区权限失败:",_),l.value.clear()}},c=async()=>{o.value=!0,a.value="";try{const y=(await Y.getApps()).filter(E=>E.path&&E.path.length>0),S=y.map(E=>E.bundleId),C=await Y.getForumPermissionsBatch(S),I=new Map;C.forEach(E=>{I.set(E.bundleId,E)});const x=y.map(E=>{const F=I.get(E.bundleId);return{bundleId:E.bundleId,name:E.name,iconUrl:Y.getAppIconUrl(E.bundleId),iconLoaded:!1,iconError:!1,enabled:(F==null?void 0:F.enabled)??!1,requested:(F==null?void 0:F.hasRequest)&&(F==null?void 0:F.requestStatus)===ss.PENDING,todayPostCount:(F==null?void 0:F.todayPostCount)??0,totalPostCount:(F==null?void 0:F.totalPostCount)??0}});s.value=x,s.value.sort((E,F)=>E.name.localeCompare(F.name))}catch(_){console.error("加载应用列表失败:",_),a.value="加载应用列表失败,请检查服务是否运行",s.value=[]}finally{o.value=!1}},p=_=>{const y=s.value.find(S=>S.bundleId===_);y&&(y.iconLoaded=!0)},d=_=>{const y=s.value.find(S=>S.bundleId===_);y&&(y.iconError=!0,y.iconLoaded=!0)},v=_=>{const y=s.value.find(S=>S.bundleId===_);y&&y.enabled&&t.push(`/discussion/${_}`)},b=async _=>{var S,C;const y=s.value.find(I=>I.bundleId===_);if(!(!y||y.requested))try{const I=await Y.requestForumOpen(_,y.name);I.success?(y.requested=!0,i.success("申请提交成功,等待管理员审核")):i.error(I.message||"申请失败,请稍后重试")}catch(I){console.error("申请开放失败:",I);const x=((C=(S=I.response)==null?void 0:S.data)==null?void 0:C.message)||I.message||"申请失败,请稍后重试";i.error(x)}};return nt(async()=>{await r(),await c()}),(_,y)=>(u(),f(ye,null,[n("div",q6,[n("div",H6,[y[4]||(y[4]=n("div",{class:"page-header"},[n("h1",{class:"page-title"},"讨论区"),n("p",{class:"page-description"},"浏览和参与已安装应用的讨论")],-1)),o.value?(u(),f("div",z6,[...y[0]||(y[0]=[n("div",{class:"spinner"},null,-1),n("p",null,"加载板块中...",-1)])])):a.value?(u(),f("div",W6,[n("p",null,h(a.value),1),n("button",{onClick:c,class:"btn btn-primary"},"重试")])):s.value.length===0?(u(),f("div",K6,[m(k,{icon:"fluent-color:chat-bubbles-question-24",class:"empty-icon"}),y[1]||(y[1]=n("p",null,"没有找到讨论板块",-1)),y[2]||(y[2]=n("p",{class:"empty-hint"},"系统中没有已安装的应用",-1))])):(u(),f("div",G6,[(u(!0),f(ye,null,Ee(s.value,S=>(u(),f("div",{key:S.bundleId,class:Te(["forum-card",{disabled:!S.enabled}]),onClick:C=>S.enabled?v(S.bundleId):null},[n("div",J6,[n("div",X6,[S.iconUrl?Ve((u(),f("img",{key:0,src:S.iconUrl,alt:S.name,onLoad:C=>p(S.bundleId),onError:C=>d(S.bundleId)},null,40,Z6)),[[ls,S.iconLoaded&&!S.iconError]]):T("",!0),Ve(n("div",{class:"icon-placeholder"},h(S.name.charAt(0).toUpperCase()),513),[[ls,!S.iconUrl||!S.iconLoaded||S.iconError]])])]),n("div",Y6,[n("h3",eS,h(S.name),1),n("p",tS,h(S.bundleId),1),S.enabled&&(S.todayPostCount!==void 0||S.totalPostCount!==void 0)?(u(),f("div",sS,[n("span",nS,[m(k,{icon:"fluent-color:news-28",class:"stat-icon"}),n("span",null,"今日发帖:"+h(S.todayPostCount??0),1)]),n("span",oS,[m(k,{icon:"fluent-color:reward-24",class:"stat-icon"}),n("span",null,"总发帖数:"+h(S.totalPostCount??0),1)])])):T("",!0),S.enabled?T("",!0):(u(),f("p",aS,"未开放")),S.enabled?T("",!0):(u(),f("button",{key:2,class:"request-open-btn",onClick:Oe(C=>b(S.bundleId),["stop"]),disabled:S.requested},h(S.requested?"等待申请结果中":"申请开放"),9,lS))])],10,Q6))),128))])),s.value.length>0?(u(),f("div",iS,[n("div",rS,[n("span",cS,[y[3]||(y[3]=n("span",{class:"stat-label"},"总计:",-1)),n("span",uS,h(s.value.length),1)])])])):T("",!0)])]),m(Yt,{toasts:se(i).toasts.value,onRemove:se(i).removeToast},null,8,["toasts","onRemove"])],64))}}),fS=We(dS,[["__scopeId","data-v-6c95a4d2"]]),pS={class:"dialog-header"},vS={class:"header-icon"},mS={class:"dialog-content"},hS={class:"report-info-section"},gS={class:"section-title"},yS={class:"info-grid"},bS={class:"info-row"},_S={class:"info-value"},wS={class:"info-row"},kS={class:"info-value"},$S={class:"info-row full-width"},CS={class:"info-content"},IS={class:"report-type-section"},SS={class:"section-title"},xS={class:"report-types"},AS=["onClick"],TS={class:"type-label"},ES={class:"report-comment-section"},RS={class:"section-title"},US={class:"char-count"},PS={class:"dialog-footer"},MS=["disabled"],DS=ze({__name:"ReportDialog",props:{visible:{type:Boolean,default:!1},reportInfo:{default:null}},emits:["close","submit"],setup(e,{emit:t}){const s=e,o=t,a=[{value:"pornography",...Js.pornography},{value:"fraud",...Js.fraud},{value:"malicious_drainage",...Js.malicious_drainage},{value:"abuse",...Js.abuse},{value:"trolling",...Js.trolling},{value:"against_values",...Js.against_values}],l=w([]),i=w("");Xe(()=>s.visible,d=>{d&&(l.value=[],i.value="")});const r=d=>{const v=l.value.indexOf(d);v>-1?l.value.splice(v,1):l.value.push(d)},c=()=>{o("close")},p=()=>{l.value.length===0||!s.reportInfo||o("submit",l.value,i.value,s.reportInfo)};return(d,v)=>(u(),Ne(Ot,{to:"body"},[m(gt,{name:"dialog-fade"},{default:lt(()=>{var b,_,y;return[e.visible?(u(),f("div",{key:0,class:"dialog-overlay",onClick:Oe(c,["self"])},[n("div",{class:"dialog-container",onClick:v[1]||(v[1]=Oe(()=>{},["stop"]))},[n("div",pS,[n("div",vS,[m(k,{icon:"mdi:flag"})]),v[2]||(v[2]=n("h2",{class:"dialog-title"},"举报内容",-1)),n("button",{class:"dialog-close",onClick:c,"aria-label":"关闭"},[m(k,{icon:"mdi:close"})])]),n("div",mS,[n("div",hS,[n("div",gS,[m(k,{icon:"mdi:information-outline",class:"title-icon"}),v[3]||(v[3]=n("span",null,"被举报信息",-1))]),n("div",yS,[n("div",bS,[v[4]||(v[4]=n("span",{class:"info-label"},"用户ID",-1)),n("span",_S,h(((b=e.reportInfo)==null?void 0:b.userId)||"-"),1)]),n("div",wS,[v[5]||(v[5]=n("span",{class:"info-label"},"用户昵称",-1)),n("span",kS,h(((_=e.reportInfo)==null?void 0:_.userName)||"-"),1)]),n("div",$S,[v[6]||(v[6]=n("span",{class:"info-label"},"内容",-1)),n("div",CS,h(((y=e.reportInfo)==null?void 0:y.content)||"-"),1)])])]),n("div",IS,[n("div",SS,[m(k,{icon:"mdi:alert-circle-outline",class:"title-icon"}),v[7]||(v[7]=n("span",null,"选择举报类型",-1)),v[8]||(v[8]=n("span",{class:"required"},"*",-1))]),n("div",xS,[(u(),f(ye,null,Ee(a,S=>n("button",{key:S.value,type:"button",class:Te(["report-type-btn",{active:l.value.includes(S.value)}]),onClick:C=>r(S.value)},[m(k,{icon:S.icon,class:"type-icon"},null,8,["icon"]),n("span",TS,h(S.label),1),l.value.includes(S.value)?(u(),Ne(k,{key:0,icon:"mdi:check-circle",class:"check-icon"})):T("",!0)],10,AS)),64))])]),n("div",ES,[n("div",RS,[m(k,{icon:"mdi:comment-text-outline",class:"title-icon"}),v[9]||(v[9]=n("span",null,"补充说明(可选)",-1))]),Ve(n("textarea",{"onUpdate:modelValue":v[0]||(v[0]=S=>i.value=S),class:"comment-textarea",placeholder:"请详细描述举报原因,帮助我们更好地处理...",rows:"4",maxlength:"500"},null,512),[[Ke,i.value]]),n("div",US,h(i.value.length)+"/500",1)])]),n("div",PS,[n("button",{class:"btn btn-secondary",onClick:c},"取消"),n("button",{class:"btn btn-primary",onClick:p,disabled:l.value.length===0},[m(k,{icon:"mdi:send",class:"btn-icon"}),v[10]||(v[10]=$e(" 提交举报 ",-1))],8,MS)])])])):T("",!0)]}),_:1})]))}}),gd=We(DS,[["__scopeId","data-v-0628add9"]]),LS={class:"upload-progress-dialog"},NS={class:"dialog-header"},OS={class:"dialog-content"},FS={class:"progress-info"},VS={class:"progress-text"},BS={class:"progress-bar-container"},jS={class:"progress-bar"},qS={class:"progress-percent"},HS={key:0,class:"error-message"},zS={class:"dialog-footer"},WS=ze({__name:"UploadProgressDialog",props:{visible:{type:Boolean},progress:{},title:{default:"上传中..."},statusText:{default:"正在上传文件"},error:{},cancellable:{type:Boolean,default:!0},completed:{type:Boolean,default:!1}},emits:["cancel","close"],setup(e,{emit:t}){const s=e,o=t,a=()=>{s.cancellable&&!s.completed&&o("cancel")},l=()=>{o("close")};return(i,r)=>(u(),Ne(Ot,{to:"body"},[m(gt,{name:"fade"},{default:lt(()=>[e.visible?(u(),f("div",{key:0,class:"upload-progress-overlay",onClick:Oe(a,["self"])},[n("div",LS,[n("div",NS,[n("h3",null,h(e.title),1),e.cancellable?(u(),f("button",{key:0,class:"close-btn",onClick:a},[m(k,{icon:"mdi:close"})])):T("",!0)]),n("div",OS,[n("div",FS,[m(k,{icon:"mdi:cloud-upload",class:"progress-icon"}),n("span",VS,h(e.statusText),1)]),n("div",BS,[n("div",jS,[n("div",{class:"progress-fill",style:St({width:`${e.progress}%`})},null,4)]),n("span",qS,h(e.progress)+"%",1)]),e.error?(u(),f("div",HS,[m(k,{icon:"mdi:alert-circle",class:"error-icon"}),n("span",null,h(e.error),1)])):T("",!0)]),n("div",zS,[e.cancellable&&!e.completed?(u(),f("button",{key:0,class:"btn btn-secondary",onClick:a}," 取消 ")):T("",!0),e.completed||e.error?(u(),f("button",{key:1,class:"btn btn-primary",onClick:l}," 确定 ")):T("",!0)])])])):T("",!0)]),_:1})]))}}),KS=We(WS,[["__scopeId","data-v-e6e5d333"]]),GS={class:"discussion-forum-page"},QS={class:"page-container"},JS={class:"page-header"},XS={class:"header-buttons"},ZS={key:0,class:"header-content"},YS={class:"app-header"},ex={class:"app-icon-wrapper"},tx={class:"app-icon"},sx=["src","alt"],nx={class:"app-title-info"},ox={class:"page-title"},ax={class:"page-description"},lx={key:0,class:"forum-stats"},ix={class:"stat-item"},rx={class:"stat-item"},cx={key:1,class:"header-content"},ux={key:0,class:"loading"},dx={key:1,class:"error"},fx={key:2,class:"discussion-content"},px={class:"create-post-section"},vx={class:"section-header"},mx={class:"sort-selector"},hx={key:0,class:"post-form-container"},gx={class:"post-form-header"},yx={class:"post-form"},bx={class:"form-row"},_x={class:"form-row"},wx={class:"form-actions"},kx={class:"upload-area"},$x=["disabled"],Cx=["disabled"],Ix={key:0,class:"upload-count"},Sx=["disabled"],xx={key:0,class:"attachment-preview-list"},Ax=["src"],Tx=["onClick"],Ex={key:0,class:"attachment-error"},Rx={class:"file-name"},Ux={class:"file-size"},Px=["onClick"],Mx={key:0,class:"attachment-error"},Dx={key:0,class:"posts-list"},Lx=["onClick"],Nx={class:"post-header"},Ox={class:"post-title"},Fx={class:"post-meta"},Vx=["onMouseenter"],Bx={class:"author-avatar"},jx={class:"post-author clickable"},qx={class:"post-time"},Hx={class:"post-content-preview"},zx={class:"post-footer"},Wx={class:"post-stats"},Kx={class:"stat-item"},Gx={class:"post-actions"},Qx=["onClick","disabled"],Jx=["onClick","disabled"],Xx=["onClick"],Zx={key:1,class:"empty-discussion"},Yx=ze({__name:"DiscussionForum",setup(e){const t=Gt(),s=xn(),o=_t(),a=js(),l=w(null),i=w(!0),r=w(""),c=w(!1),p=w(!1),d=w([]),v=w(null),b=w("time"),_=[{value:"time",label:"按时间",icon:"fluent-color:clock-24"},{value:"lastReply",label:"按最后回复",icon:"fluent-color:mail-clock-32"}],y=w(null),S=w(""),C=w(""),I=w([]),x=w([]),E=w(null),F=w(null),W=w(!1),G=w(!1),re=w(null),D=w(!1),U=w(void 0),O=w(""),$=w(""),R=w(""),M=w(null),N=ge(()=>s.params.bundleId),L=ge(()=>l.value?Y.getAppIconUrl(l.value.bundleId):""),X=async J=>{try{const te=await Y.getForumPermission(J);te?v.value=te:v.value={bundleId:J,appName:"",enabled:!1,postCount:0,todayPostCount:0,totalPostCount:0,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}}catch(te){console.error("加载讨论区权限失败:",te),v.value={bundleId:J,appName:"",enabled:!1,postCount:0,todayPostCount:0,totalPostCount:0,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}}},ne=async()=>{if(N.value)try{const J=await Y.getForumPosts(N.value,1,20,b.value);d.value=J.posts||[]}catch(J){console.error("加载帖子列表失败:",J),d.value=[]}},ee=()=>{ne()},we=async()=>{if(!N.value){r.value="无效的应用标识符",i.value=!1;return}i.value=!0,r.value="";try{if(await X(N.value),!v.value||!v.value.enabled){r.value="该讨论区暂未开放,请等待管理员启用",i.value=!1;return}l.value=await Y.getApp(N.value),c.value=!1,p.value=!1,await ne()}catch(J){console.error("加载应用信息失败:",J),r.value="加载应用信息失败,请检查服务是否运行",l.value=null}finally{i.value=!1}},de=()=>{t.push("/discussion")},ue=()=>{t.push("/")},Z=J=>{t.push(`/discussion/${N.value}/post/${J}`)},q=J=>J.length<=150?J:J.substring(0,150)+"...",ie=async J=>{var H,be;const te=d.value.find(_e=>_e.id===J);if(!te||!N.value||y.value===J)return;const oe=te.userLikeStatus==="liked"?"cancel":"like";y.value=J,a.show(oe==="cancel"?"取消点赞中...":"点赞中...");try{const _e=await Y.likeForumPost(N.value,J,oe);_e.success?(te.userLikeStatus=_e.userLikeStatus,te.likeCount=_e.likeCount,te.dislikeCount=_e.dislikeCount,oe==="cancel"?o.success("已取消点赞"):o.success("点赞成功")):o.error(_e.message||"点赞失败")}catch(_e){console.error("点赞失败:",_e),o.error(((be=(H=_e.response)==null?void 0:H.data)==null?void 0:be.message)||_e.message||"点赞失败")}finally{y.value=null,a.hide()}},Pe=async J=>{var H,be;const te=d.value.find(_e=>_e.id===J);if(!te||!N.value||y.value===J)return;const oe=te.userLikeStatus==="disliked"?"cancel":"dislike";y.value=J,a.show(oe==="cancel"?"取消点踩中...":"点踩中...");try{const _e=await Y.likeForumPost(N.value,J,oe);_e.success?(te.userLikeStatus=_e.userLikeStatus,te.likeCount=_e.likeCount,te.dislikeCount=_e.dislikeCount,oe==="cancel"?o.success("已取消点踩"):o.success("点踩成功")):o.error(_e.message||"点踩失败")}catch(_e){console.error("点踩失败:",_e),o.error(((be=(H=_e.response)==null?void 0:H.data)==null?void 0:be.message)||_e.message||"点踩失败")}finally{y.value=null,a.hide()}},je=ge(()=>S.value.trim().length>0&&(C.value.trim().length>0||I.value.length>0||x.value.length>0)),le=()=>{var J;(J=E.value)==null||J.click()},xe=()=>{var J;(J=F.value)==null||J.click()},K=J=>{const te=J.target,ke=Array.from(te.files||[]),oe=10*1024*1024;ke.forEach(H=>{if(I.value.length>=5)return;if(H.size>oe){I.value.push({file:H,preview:"",error:"图片大小不能超过10MB"});return}const be=new FileReader;be.onload=_e=>{var Me;const pe=I.value.findIndex(tt=>tt.file===H);pe>=0&&(I.value[pe].preview=(Me=_e.target)==null?void 0:Me.result)},be.readAsDataURL(H),I.value.push({file:H,preview:""})}),te.value=""},ae=J=>{const te=J.target,ke=Array.from(te.files||[]),oe=20*1024*1024;ke.forEach(H=>{if(!(x.value.length>=5)){if(H.size>oe){x.value.push({file:H,error:"文件大小不能超过20MB"});return}x.value.push({file:H})}}),te.value=""},Fe=J=>{I.value.splice(J,1)},P=J=>{x.value.splice(J,1)},g=w(!1),A=w(0),z=w("正在上传..."),Q=w(""),j=async()=>{var J,te,ke,oe,H,be,_e,pe;if(!(!je.value||!N.value)){g.value=!0,A.value=0,z.value="正在上传文件...",Q.value="";try{const Me=[],tt=I.value.length+x.value.length;let at=0;for(let ft=0;ft<I.value.length;ft++){const qt=I.value[ft];z.value=`正在上传图片 ${ft+1}/${I.value.length}...`;const ot=await Y.uploadImageAttachment(qt.file,ys=>{const Es=ys/100;A.value=Math.round((at+Es)/tt*100)});if(ot.success&&((J=ot.data)!=null&&J.attachmentId))Me.push(ot.data.attachmentId),at++;else throw new Error(ot.message||((te=ot.data)==null?void 0:te.message)||"图片上传失败")}for(let ft=0;ft<x.value.length;ft++){const qt=x.value[ft];z.value=`正在上传文件 ${ft+1}/${x.value.length}...`;const ot=await Y.uploadFileAttachment(qt.file,ys=>{const Es=ys/100;A.value=Math.round((at+Es)/tt*100)});if(ot.success&&((ke=ot.data)!=null&&ke.attachmentId))Me.push(ot.data.attachmentId),at++;else throw new Error(ot.message||((oe=ot.data)==null?void 0:oe.message)||"文件上传失败")}z.value="正在发布帖子...",A.value=90;const rt=await Y.createForumPost(N.value,S.value.trim(),C.value.trim(),Me.length>0?Me:void 0);rt.success&&((H=rt.data)!=null&&H.postId)?(A.value=100,z.value="发布成功!",await new Promise(ft=>setTimeout(ft,500)),await ne(),S.value="",C.value="",I.value=[],x.value=[],W.value=!1,g.value=!1,o.success("帖子发布成功")):(Q.value=rt.message||((be=rt.data)==null?void 0:be.message)||"发帖失败,请稍后重试",z.value="发布失败")}catch(Me){console.error("发帖异常:",Me),Q.value=((pe=(_e=Me.response)==null?void 0:_e.data)==null?void 0:pe.message)||Me.message||"发帖失败,请稍后重试",z.value="发布失败"}}},V=()=>{g.value=!1,A.value=0,Q.value=""},B=()=>{g.value=!1,A.value=0,Q.value=""},ve=()=>{W.value=!1},me=J=>{const te=d.value.find(ke=>ke.id===J);te&&(re.value={userId:te.author,userName:te.author,content:te.content,type:"post",postId:te.id},G.value=!0)},Le=async(J,te,ke)=>{var oe,H;if(!(!N.value||!ke.type||!ke.postId)){a.show("提交举报中...");try{let be="";if(ke.type==="post"?be=ke.postId:(ke.type==="reply"||ke.type==="nestedReply")&&(be=ke.replyId||""),!be){console.error("无法确定举报目标ID");return}const _e=await Y.submitReport(ke.type,be,N.value,ke.postId,J,ke.content,te||void 0);_e.success?(G.value=!1,o.success("举报提交成功")):o.error(_e.message||"举报失败")}catch(be){console.error("举报异常:",be),o.error(((H=(oe=be.response)==null?void 0:oe.data)==null?void 0:H.message)||be.message||"举报失败")}finally{a.hide()}}},Ue=J=>typeof J.author=="object"&&J.author!==null?J.author.id||"":typeof J.author=="string"?J.author:"",Be=J=>{if(typeof J.author=="object"&&J.author!==null){const te=J.author;return te.nickName||te.username||""}return typeof J.author=="string"?J.author:""},Ce=async J=>{try{const te=await Y.getUserInfo(J);if(te&&te.avatar)return await Xu(te.avatar,te.nickName||te.username)}catch(te){console.error("获取用户信息失败:",te)}return""},Qe=async(J,te,ke)=>{M.value&&clearTimeout(M.value),O.value=te,$.value=ke,R.value="",Ce(te).then(oe=>{oe?R.value=oe:R.value=ke?`https://ui-avatars.com/api/?name=${encodeURIComponent(ke)}&background=random&size=200`:"https://ui-avatars.com/api/?name=User&background=random&size=200"}),M.value=window.setTimeout(()=>{const oe=J.target.getBoundingClientRect();U.value={x:oe.left-100,y:oe.bottom+8},D.value=!0},200)},Ge=w(null),Ze=()=>{M.value&&(clearTimeout(M.value),M.value=null),Ge.value&&(clearTimeout(Ge.value),Ge.value=null),Ge.value=window.setTimeout(()=>{D.value&&(D.value=!1)},200)},dt=()=>{Ge.value&&(clearTimeout(Ge.value),Ge.value=null)},yt=()=>{M.value&&(clearTimeout(M.value),M.value=null),Ge.value&&(clearTimeout(Ge.value),Ge.value=null),D.value=!1,R.value=""},bt=(J,te)=>{t.push(`/messages?userId=${J}&userName=${encodeURIComponent(te)}`)},It=(J,te)=>{console.log("拉黑用户:",J,te),console.log(`已拉黑用户:${te}`)},jt=J=>{const te=new Date(J),oe=new Date().getTime()-te.getTime(),H=Math.floor(oe/(1e3*60)),be=Math.floor(oe/(1e3*60*60)),_e=Math.floor(oe/(1e3*60*60*24));return H<60?`${H}分钟前`:be<24?`${be}小时前`:_e<7?`${_e}天前`:te.toLocaleDateString("zh-CN")},Ae=J=>J<1024?`${J} B`:J<1024*1024?`${(J/1024).toFixed(1)} KB`:`${(J/(1024*1024)).toFixed(1)} MB`;return nt(()=>{we()}),(J,te)=>(u(),f("div",GS,[n("div",QS,[n("div",JS,[n("div",XS,[n("button",{class:"back-button",onClick:de},[m(k,{icon:"mdi:arrow-left",class:"back-icon"}),te[7]||(te[7]=n("span",null,"返回讨论区",-1))]),n("button",{class:"home-button",onClick:ue},[m(k,{icon:"fluent-color:home-48",class:"home-icon"}),te[8]||(te[8]=n("span",null,"首页",-1))])]),l.value?(u(),f("div",ZS,[n("div",YS,[n("div",ex,[n("div",tx,[L.value?Ve((u(),f("img",{key:0,src:L.value,alt:l.value.name,onLoad:te[0]||(te[0]=ke=>c.value=!0),onError:te[1]||(te[1]=ke=>p.value=!0)},null,40,sx)),[[ls,c.value&&!p.value]]):T("",!0),Ve(n("div",{class:"icon-placeholder"},h(l.value.name.charAt(0).toUpperCase()),513),[[ls,!L.value||!c.value||p.value]])])]),n("div",nx,[n("h1",ox,h(l.value.name),1),n("p",ax,h(l.value.bundleId),1),v.value?(u(),f("div",lx,[n("span",ix,[m(k,{icon:"fluent-color:news-28",class:"stat-icon"}),n("span",null,"今日发帖:"+h(v.value.todayPostCount??0),1)]),n("span",rx,[m(k,{icon:"fluent-color:reward-24",class:"stat-icon"}),n("span",null,"总发帖数:"+h(v.value.totalPostCount??0),1)])])):T("",!0)])])])):(u(),f("div",cx,[...te[9]||(te[9]=[n("h1",{class:"page-title"},"讨论区",-1)])]))]),i.value?(u(),f("div",ux,[...te[10]||(te[10]=[n("div",{class:"spinner"},null,-1),n("p",null,"加载中...",-1)])])):r.value?(u(),f("div",dx,[n("p",null,h(r.value),1),n("button",{onClick:we,class:"btn btn-primary"},"重试")])):l.value?(u(),f("div",fx,[n("div",px,[n("div",vx,[W.value?T("",!0):(u(),f("button",{key:0,class:"create-post-btn",onClick:te[2]||(te[2]=ke=>W.value=!0)},[m(k,{icon:"mdi:plus",class:"btn-icon"}),te[11]||(te[11]=n("span",null,"发帖",-1))])),n("div",mx,[te[12]||(te[12]=n("label",{class:"sort-label"},"排序方式:",-1)),m(is,{modelValue:b.value,"onUpdate:modelValue":[te[3]||(te[3]=ke=>b.value=ke),ee],options:_},null,8,["modelValue"])])])]),m(gt,{name:"post-form-slide"},{default:lt(()=>[W.value?(u(),f("div",hx,[n("div",gx,[te[13]||(te[13]=n("h3",null,"发布新帖子",-1)),n("button",{class:"close-form-btn",onClick:ve},[m(k,{icon:"mdi:close"})])]),n("div",yx,[n("div",bx,[Ve(n("input",{"onUpdate:modelValue":te[4]||(te[4]=ke=>S.value=ke),class:"post-title-input",placeholder:"请输入帖子标题...",maxlength:"100"},null,512),[[Ke,S.value]])]),n("div",_x,[Ve(n("textarea",{"onUpdate:modelValue":te[5]||(te[5]=ke=>C.value=ke),class:"post-content-input",placeholder:"写下你想说的...",rows:"4",maxlength:"2000"},null,512),[[Ke,C.value]])]),n("div",wx,[n("div",kx,[n("input",{ref_key:"postImageInput",ref:E,type:"file",accept:"image/*",multiple:"",onChange:K,style:{display:"none"}},null,544),n("input",{ref_key:"postFileInput",ref:F,type:"file",multiple:"",onChange:ae,style:{display:"none"}},null,544),n("button",{class:"upload-btn",onClick:le,disabled:I.value.length>=5,title:"添加图片(最多5张,每张10M以内)"},[m(k,{icon:"mdi:image-outline",class:"btn-icon"}),te[14]||(te[14]=$e(" 图片 ",-1))],8,$x),n("button",{class:"upload-btn",onClick:xe,disabled:x.value.length>=5,title:"添加文件(最多5个,每个20M以内)"},[m(k,{icon:"mdi:file-outline",class:"btn-icon"}),te[15]||(te[15]=$e(" 文件 ",-1))],8,Cx),I.value.length>0||x.value.length>0?(u(),f("span",Ix,h(I.value.length+x.value.length)+" 个附件 ",1)):T("",!0)]),n("button",{class:"submit-post-btn",onClick:j,disabled:!je.value},[m(k,{icon:"mdi:send",class:"btn-icon"}),te[16]||(te[16]=$e(" 发布帖子 ",-1))],8,Sx)]),I.value.length>0||x.value.length>0?(u(),f("div",xx,[(u(!0),f(ye,null,Ee(I.value,(ke,oe)=>(u(),f("div",{key:`post-img-${oe}`,class:"attachment-preview-item"},[n("img",{src:ke.preview,alt:"预览图"},null,8,Ax),n("button",{class:"remove-attachment-btn",onClick:H=>Fe(oe)},[m(k,{icon:"mdi:close"})],8,Tx),ke.error?(u(),f("div",Ex,h(ke.error),1)):T("",!0)]))),128)),(u(!0),f(ye,null,Ee(x.value,(ke,oe)=>(u(),f("div",{key:`post-file-${oe}`,class:"attachment-preview-item file"},[m(k,{icon:"mdi:file",class:"file-icon"}),n("span",Rx,h(ke.file.name),1),n("span",Ux,h(Ae(ke.file.size)),1),n("button",{class:"remove-attachment-btn",onClick:H=>P(oe)},[m(k,{icon:"mdi:close"})],8,Px),ke.error?(u(),f("div",Mx,h(ke.error),1)):T("",!0)]))),128))])):T("",!0)])])):T("",!0)]),_:1}),d.value.length>0?(u(),f("div",Dx,[(u(!0),f(ye,null,Ee(d.value,ke=>(u(),f("div",{key:ke.id,class:"post-card",onClick:oe=>Z(ke.id)},[n("div",Nx,[n("h3",Ox,h(ke.title),1),n("div",Fx,[n("div",{class:"author-wrapper",onMouseenter:Oe(oe=>Qe(oe,Ue(ke),Be(ke)),["stop"]),onMouseleave:Oe(Ze,["stop"])},[n("div",Bx,[m(Et,{"avatar-id":ke.authorAvatar||(typeof ke.author=="object"&&ke.author!==null?ke.author.avatar:void 0),"user-name":Be(ke),size:"small"},null,8,["avatar-id","user-name"]),te[17]||(te[17]=n("div",{class:"online-indicator"},null,-1))]),n("span",jx,h(Be(ke)),1)],40,Vx),n("span",qx,h(jt(ke.publishTime)),1)])]),n("div",Hx,[n("p",null,h(q(ke.content)),1)]),n("div",zx,[n("div",Wx,[n("span",Kx,[m(k,{icon:"mdi:comment-outline",class:"stat-icon"}),n("span",null,h(ke.replyCount)+" 回复",1)])]),n("div",Gx,[n("button",{class:Te(["action-btn",{active:ke.userLikeStatus==="liked"}]),onClick:Oe(oe=>ie(ke.id),["stop"]),disabled:y.value===ke.id},[m(k,{icon:ke.userLikeStatus==="liked"?"mdi:thumb-up":"mdi:thumb-up-outline",class:"action-icon"},null,8,["icon"]),n("span",null,h(ke.likeCount),1)],10,Qx),n("button",{class:Te(["action-btn",{active:ke.userLikeStatus==="disliked"}]),onClick:Oe(oe=>Pe(ke.id),["stop"]),disabled:y.value===ke.id},[m(k,{icon:ke.userLikeStatus==="disliked"?"mdi:thumb-down":"mdi:thumb-down-outline",class:"action-icon"},null,8,["icon"]),n("span",null,h(ke.dislikeCount),1)],10,Jx),n("button",{class:"action-btn report-btn",onClick:Oe(oe=>me(ke.id),["stop"])},[m(k,{icon:"mdi:flag-outline",class:"action-icon"}),te[18]||(te[18]=n("span",null,"举报",-1))],8,Xx)])])],8,Lx))),128))])):(u(),f("div",Zx,[m(k,{icon:"fluent-color:chat-bubbles-question-24",class:"empty-icon"}),te[19]||(te[19]=n("p",null,"暂无讨论内容",-1)),te[20]||(te[20]=n("p",{class:"empty-hint"},"还没有人发布帖子",-1))]))])):T("",!0)]),m(gd,{visible:G.value,"report-info":re.value,onClose:te[6]||(te[6]=ke=>G.value=!1),onSubmit:Le},null,8,["visible","report-info"]),m(Yl,{visible:D.value,"user-id":O.value,"user-name":$.value,"avatar-url":R.value,position:U.value,onClose:yt,onSendMessage:bt,onBlockUser:It,onMouseEnter:dt},null,8,["visible","user-id","user-name","avatar-url","position"]),m(KS,{visible:g.value,progress:A.value,title:z.value,"status-text":z.value,error:Q.value,completed:A.value===100&&!Q.value,cancellable:A.value<100&&!Q.value,onCancel:V,onClose:B},null,8,["visible","progress","title","status-text","error","completed","cancellable"]),m(Yt,{toasts:se(o).toasts.value,onRemove:se(o).removeToast},null,8,["toasts","onRemove"])]))}}),eA=We(Yx,[["__scopeId","data-v-072af95d"]]),tA={key:0,class:"pagination"},sA=["disabled"],nA={class:"pagination-info"},oA=["disabled"],aA=ze({__name:"Pagination",props:{currentPage:{},totalPages:{},total:{}},emits:["page-change"],setup(e,{emit:t}){const s=e,o=t,a=()=>{s.currentPage>1&&o("page-change",s.currentPage-1)},l=()=>{s.currentPage<s.totalPages&&o("page-change",s.currentPage+1)};return(i,r)=>e.totalPages>1?(u(),f("div",tA,[n("button",{onClick:a,disabled:e.currentPage===1,class:"btn btn-sm"}," 上一页 ",8,sA),n("span",nA,[$e(" 第 "+h(e.currentPage)+" 页,共 "+h(e.totalPages)+" 页",1),e.total!==void 0?(u(),f(ye,{key:0},[$e("(共 "+h(e.total)+" 条)",1)],64)):T("",!0)]),n("button",{onClick:l,disabled:e.currentPage>=e.totalPages,class:"btn btn-sm"}," 下一页 ",8,oA)])):T("",!0)}}),qs=We(aA,[["__scopeId","data-v-fde42dc3"]]),lA={class:"post-detail-page"},iA={class:"page-container"},rA={class:"page-header"},cA={class:"header-buttons"},uA={key:0,class:"loading"},dA={key:1,class:"error"},fA={key:2,class:"post-detail-content"},pA={key:0,class:"forum-breadcrumb"},vA={class:"forum-icon-wrapper"},mA={class:"forum-icon"},hA=["src","alt"],gA={class:"forum-name"},yA={class:"post-breadcrumb-title"},bA={class:"post-main"},_A={class:"post-header"},wA={class:"post-title"},kA={class:"post-meta"},$A={class:"author-avatar"},CA={class:"post-author clickable"},IA={class:"post-time"},SA={class:"post-content"},xA={key:0,class:"post-attachments"},AA={key:0,class:"post-images"},TA={key:1,class:"post-files"},EA=["onClick"],RA={class:"attachment-name"},UA={class:"attachment-size"},PA={class:"post-actions"},MA=["disabled"],DA=["disabled"],LA={class:"replies-section"},NA={class:"replies-header"},OA={class:"reply-form-container"},FA={class:"reply-form"},VA={class:"form-avatar"},BA={class:"form-content"},jA={class:"form-actions"},qA={class:"upload-area"},HA=["disabled"],zA=["disabled"],WA={key:0,class:"upload-count"},KA=["disabled"],GA={key:0,class:"attachment-preview-list"},QA=["src"],JA=["onClick"],XA={key:0,class:"attachment-error"},ZA={class:"file-name"},YA={class:"file-size"},e7=["onClick"],t7={key:0,class:"attachment-error"},s7={key:0,class:"replies-list"},n7={class:"reply-avatar"},o7={class:"reply-content-wrapper"},a7={class:"reply-header"},l7=["onMouseenter"],i7={class:"reply-author clickable"},r7={key:1,class:"reply-to"},c7=["onMouseenter"],u7={class:"reply-time"},d7={class:"reply-content"},f7={key:0,class:"reply-attachments"},p7={key:0,class:"reply-images"},v7={key:1,class:"reply-files"},m7=["onClick"],h7={class:"attachment-name"},g7={class:"attachment-size"},y7={class:"reply-actions"},b7=["onClick"],_7=["onClick"],w7={key:0,class:"nested-reply-form"},k7={class:"form-content"},$7=["placeholder"],C7={class:"form-actions"},I7={class:"upload-area"},S7=["disabled"],x7=["disabled"],A7={class:"nested-reply-actions"},T7=["onClick","disabled"],E7={key:0,class:"attachment-preview-list"},R7=["src"],U7=["onClick"],P7={class:"file-name"},M7={class:"file-size"},D7=["onClick"],L7={key:1,class:"nested-replies"},N7={class:"nested-reply-avatar"},O7={class:"nested-reply-content-wrapper"},F7={class:"nested-reply-header"},V7=["onMouseenter"],B7={class:"nested-reply-author clickable"},j7={key:0,class:"reply-to"},q7=["onMouseenter","onClick"],H7={class:"nested-reply-time"},z7={class:"nested-reply-content"},W7={key:0,class:"reply-attachments"},K7={key:0,class:"reply-images"},G7={key:1,class:"reply-files"},Q7=["onClick"],J7={class:"attachment-name"},X7={class:"attachment-size"},Z7={class:"nested-reply-actions"},Y7=["onClick"],eT=["onClick"],tT={key:2,class:"empty-replies"},sT=ze({__name:"PostDetail",setup(e){const t=Gt(),s=xn(),o=_t(),a=js(),{user:l}=Ts(),i=w(null),r=w(null),c=w(!0),p=w(""),d=w(!1),v=w([]),b=w([]),_=w(0),y=w(!1),S=w(!1),C=w(new Map),I=w(1),x=w(50),E=w(0),F=ge(()=>Math.ceil(E.value/x.value)),W=ge(()=>s.params.bundleId),G=ge(()=>s.params.postId),re=ge(()=>r.value?Y.getAppIconUrl(r.value.bundleId):""),D=w(""),U=w([]),O=w([]),$=w(null),R=w(null),M=w(null),N=w(null),L=w(null),X=w(""),ne=w(!1),ee=w(!1),we=w([]),de=w([]),ue=w(null),Z=w(null),q=w(!1),ie=w(null),Pe=w(!1),je=w(void 0),le=w(""),xe=w(""),K=w(void 0),ae=w(null),Fe=w(null),P=ge(()=>K.value),g=ge(()=>U.value||[]),A=ge(()=>O.value||[]),z=ge(()=>we.value||[]),Q=ge(()=>de.value||[]),j=async he=>{try{const ce=await Y.getForumPermission(he);return ce||{bundleId:he,appName:"",enabled:!1,postCount:0,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}}catch(ce){return console.error("加载讨论区权限失败:",ce),{bundleId:he,appName:"",enabled:!1,postCount:0,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}}},V=async()=>{if(!G.value||!W.value){p.value="无效的帖子ID或应用ID",c.value=!1;return}c.value=!0,p.value="";try{const he=await j(W.value);if(!he||!he.enabled){p.value="该讨论区暂未开放,请等待管理员启用",c.value=!1;return}try{r.value=await Y.getApp(W.value),y.value=!1,S.value=!1}catch(ce){console.error("加载应用信息失败:",ce)}try{const ce=await Y.getForumPost(W.value,G.value,I.value,x.value);if(ce){if(i.value=ce,ce.replyTotal!==void 0&&(E.value=ce.replyTotal),ce.replyPage!==void 0&&(I.value=ce.replyPage),ce.attachments&&Ae(ce.attachments).catch(qe=>{console.warn("预加载帖子图片失败:",qe)}),ce.replies){for(const qe of ce.replies)if(qe.attachments&&Ae(qe.attachments).catch(He=>{console.warn("预加载回帖图片失败:",He)}),qe.nestedReplies)for(const He of qe.nestedReplies)He.attachments&&Ae(He.attachments).catch(De=>{console.warn("预加载楼中楼回复图片失败:",De)})}}else p.value="帖子不存在"}catch(ce){console.error("加载帖子失败:",ce),p.value="加载帖子失败",i.value=null}}catch(he){console.error("加载帖子失败:",he),p.value="加载帖子失败",i.value=null}finally{c.value=!1}},B=async()=>{if(!(!W.value||!G.value||!i.value))try{const he=await Y.getForumPost(W.value,G.value,I.value,x.value);if(he&&(i.value.replies=he.replies,i.value.replyCount=he.replyCount,he.replyTotal!==void 0&&(E.value=he.replyTotal),he.replyPage!==void 0&&(I.value=he.replyPage),he.replies)){for(const ce of he.replies)if(ce.attachments&&Ae(ce.attachments).catch(qe=>{console.warn("预加载回帖图片失败:",qe)}),ce.nestedReplies)for(const qe of ce.nestedReplies)qe.attachments&&Ae(qe.attachments).catch(He=>{console.warn("预加载楼中楼回复图片失败:",He)})}}catch(he){console.error("刷新回复列表失败:",he)}},ve=he=>{me(he)},me=async he=>{if(!(!W.value||!G.value)){I.value=he;try{const ce=await Y.getForumPost(W.value,G.value,I.value,x.value);if(ce&&i.value){if(i.value.replies=ce.replies,ce.replyTotal!==void 0&&(E.value=ce.replyTotal),ce.replies){for(const He of ce.replies)if(He.attachments&&Ae(He.attachments).catch(De=>{console.warn("预加载回帖图片失败:",De)}),He.nestedReplies)for(const De of He.nestedReplies)De.attachments&&Ae(De.attachments).catch(Ie=>{console.warn("预加载楼中楼回复图片失败:",Ie)})}const qe=document.querySelector(".replies-section");qe&&qe.scrollIntoView({behavior:"smooth",block:"start"})}}catch(ce){console.error("加载回复分页失败:",ce),o.error("加载回复失败")}}},Le=()=>{t.push(`/discussion/${W.value}`)},Ue=()=>{t.push("/")},Be=async()=>{var qe,He;if(!i.value||!W.value||!G.value)return;const ce=i.value.userLikeStatus==="liked"?"cancel":"like";a.show(ce==="cancel"?"取消点赞中...":"点赞中...");try{const De=await Y.likeForumPost(W.value,G.value,ce);De.success&&i.value?(i.value.userLikeStatus=De.userLikeStatus,i.value.likeCount=De.likeCount,i.value.dislikeCount=De.dislikeCount,ce==="cancel"?o.success("已取消点赞"):o.success("点赞成功")):o.error(De.message||"点赞失败")}catch(De){console.error("点赞失败:",De),o.error(((He=(qe=De.response)==null?void 0:qe.data)==null?void 0:He.message)||De.message||"点赞失败")}finally{a.hide()}},Ce=async()=>{var qe,He;if(!i.value||!W.value||!G.value)return;const ce=i.value.userLikeStatus==="disliked"?"cancel":"dislike";a.show(ce==="cancel"?"取消点踩中...":"点踩中...");try{const De=await Y.likeForumPost(W.value,G.value,ce);De.success&&i.value?(i.value.userLikeStatus=De.userLikeStatus,i.value.likeCount=De.likeCount,i.value.dislikeCount=De.dislikeCount,ce==="cancel"?o.success("已取消点踩"):o.success("点踩成功")):o.error(De.message||"点踩失败")}catch(De){console.error("点踩失败:",De),o.error(((He=(qe=De.response)==null?void 0:qe.data)==null?void 0:He.message)||De.message||"点踩失败")}finally{a.hide()}},Qe=he=>{const ce=new Date(he),He=new Date().getTime()-ce.getTime(),De=Math.floor(He/(1e3*60)),Ie=Math.floor(He/(1e3*60*60)),Re=Math.floor(He/(1e3*60*60*24));return De<60?`${De}分钟前`:Ie<24?`${Ie}小时前`:Re<7?`${Re}天前`:ce.toLocaleDateString("zh-CN")},Ge=he=>he<1024?`${he} B`:he<1024*1024?`${(he/1024).toFixed(1)} KB`:`${(he/(1024*1024)).toFixed(1)} MB`,Ze=he=>he.filter(ce=>ce.type==="image"),dt=he=>he.filter(ce=>ce.type!=="image"),yt=he=>{var ce,qe;return typeof he=="string"?he:he&&typeof he=="object"?((ce=he._id)==null?void 0:ce.toString())||((qe=he.id)==null?void 0:qe.toString())||he.toString():String(he)},bt=he=>{const ce=Ze(he),qe=[];for(const He of ce){const De=yt(He),Ie=C.value.get(De);Ie&&qe.push(Ie)}return qe},It=he=>he.attachments?bt(he.attachments):[],jt=he=>he.attachments?bt(he.attachments):[],Ae=async he=>{const ce=Ze(he);for(const qe of ce){const He=yt(qe);if(!C.value.has(He))try{const De=await Y.getAttachmentImage(He);De&&C.value.set(He,De)}catch(De){console.warn(`预加载图片失败 ${He}:`,De)}}},J=async(he,ce)=>{const qe=Ze(he),He=[];for(const De of qe){const Ie=yt(De);let Re=C.value.get(Ie);if(!Re)try{Re=await Y.getAttachmentImage(Ie),Re&&C.value.set(Ie,Re)}catch(Ye){console.warn(`加载图片失败 ${Ie}:`,Ye);continue}Re&&He.push({url:Re,size:De.size})}He.length>0&&(v.value=He.map(De=>De.url),b.value=He,_.value=Math.min(ce,He.length-1),d.value=!0)},te=async(he,ce)=>{he.attachments&&await J(he.attachments,ce)},ke=async(he,ce)=>{he.attachments&&await J(he.attachments,ce)},oe=async he=>{he.type!=="image"&&be(he)},H=()=>{d.value=!1,v.value=[],b.value=[],_.value=0},be=he=>{const ce=document.createElement("a");ce.href=he.url||"#",ce.download=he.name,ce.target="_blank",document.body.appendChild(ce),ce.click(),document.body.removeChild(ce)},_e=ge(()=>D.value.trim().length>0||U.value.length>0||O.value.length>0),pe=ge(()=>X.value.trim().length>0||we.value.length>0||de.value.length>0),Me=()=>{var he;(he=$.value)==null||he.click()},tt=()=>{var he;(he=R.value)==null||he.click()},at=()=>{var he;(he=ue.value)==null||he.click()},rt=()=>{var he;(he=Z.value)==null||he.click()},ft=he=>{const ce=he.target,qe=Array.from(ce.files||[]),He=10*1024*1024;qe.forEach(De=>{if(U.value.length>=5)return;if(De.size>He){U.value.push({file:De,preview:"",error:"图片大小不能超过10MB"});return}const Ie=new FileReader;Ie.onload=Re=>{var wt;const Ye=U.value.findIndex(es=>es.file===De);Ye>=0&&(U.value[Ye].preview=(wt=Re.target)==null?void 0:wt.result)},Ie.readAsDataURL(De),U.value.push({file:De,preview:""})}),ce.value=""},qt=he=>{const ce=he.target,qe=Array.from(ce.files||[]),He=20*1024*1024;qe.forEach(De=>{if(!(O.value.length>=5)){if(De.size>He){O.value.push({file:De,error:"文件大小不能超过20MB"});return}O.value.push({file:De})}}),ce.value=""},ot=he=>{const ce=he.target,qe=Array.from(ce.files||[]),He=10*1024*1024;qe.forEach(De=>{if(we.value.length>=3)return;if(De.size>He){we.value.push({file:De,preview:"",error:"图片大小不能超过10MB"});return}const Ie=new FileReader;Ie.onload=Re=>{var wt;const Ye=we.value.findIndex(es=>es.file===De);Ye>=0&&(we.value[Ye].preview=(wt=Re.target)==null?void 0:wt.result)},Ie.readAsDataURL(De),we.value.push({file:De,preview:""})}),ce.value=""},ys=he=>{const ce=he.target,qe=Array.from(ce.files||[]),He=20*1024*1024;qe.forEach(De=>{if(!(de.value.length>=3)){if(De.size>He){de.value.push({file:De,error:"文件大小不能超过20MB"});return}de.value.push({file:De})}}),ce.value=""},Es=he=>{U.value.splice(he,1)},ko=he=>{O.value.splice(he,1)},$o=he=>{we.value.splice(he,1)},Co=he=>{de.value.splice(he,1)},Io=async()=>{var he,ce,qe,He;if(!(!_e.value||!i.value||!W.value||!G.value||ne.value)){ne.value=!0,a.show("发表回复中...");try{const De=[],Ie=U.value.length+O.value.length;let Re=0;for(let wt=0;wt<U.value.length;wt++){const es=U.value[wt],kt=await Y.uploadImageAttachment(es.file);if(kt.success&&((he=kt.data)!=null&&he.attachmentId))De.push(kt.data.attachmentId),Re++;else throw new Error(kt.message||((ce=kt.data)==null?void 0:ce.message)||"图片上传失败")}for(let wt=0;wt<O.value.length;wt++){const es=O.value[wt],kt=await Y.uploadFileAttachment(es.file);if(kt.success&&((qe=kt.data)!=null&&qe.attachmentId))De.push(kt.data.attachmentId),Re++;else throw new Error(kt.message||((He=kt.data)==null?void 0:He.message)||"文件上传失败")}const Ye=await Y.createForumReply(W.value,G.value,D.value.trim(),void 0,void 0,De.length>0?De:void 0);Ye.success?(await B(),D.value="",U.value=[],O.value=[],o.success("回复成功"),setTimeout(()=>{const wt=document.querySelector(".replies-section");wt&&wt.scrollIntoView({behavior:"smooth",block:"start"})},100)):(console.error("回复失败:",Ye.message),o.error(Ye.message||"回复失败"))}catch(De){console.error("回复异常:",De),o.error(De.message||"回复失败")}finally{ne.value=!1,a.hide()}}},Ea=(he,ce,qe)=>{var He,De;if(M.value===he)M.value=null,N.value=null,L.value=null,X.value="",we.value=[],de.value=[];else if(M.value=he,ce&&qe)N.value=ce,L.value=qe;else{const Ie=(De=(He=i.value)==null?void 0:He.replies)==null?void 0:De.find(Re=>Re.id===he);Ie&&(N.value=Ie.replyUser.id,L.value=Ie.replyUser.nickName||Ie.replyUser.username)}},ti=()=>{M.value=null,N.value=null,L.value=null,X.value="",we.value=[],de.value=[]},_d=async he=>{var qe,He,De,Ie,Re;if(!(!pe.value||!i.value||!W.value||!G.value||ee.value||!((qe=i.value.replies)!=null&&qe.find(Ye=>Ye.id===he)))){ee.value=!0,a.show("发送回复中...");try{const Ye=[];let wt=0;for(let kt=0;kt<we.value.length;kt++){const Pa=we.value[kt],ts=await Y.uploadImageAttachment(Pa.file);if(ts.success&&((He=ts.data)!=null&&He.attachmentId))Ye.push(ts.data.attachmentId),wt++;else throw new Error(ts.message||((De=ts.data)==null?void 0:De.message)||"图片上传失败")}for(let kt=0;kt<de.value.length;kt++){const Pa=de.value[kt],ts=await Y.uploadFileAttachment(Pa.file);if(ts.success&&((Ie=ts.data)!=null&&Ie.attachmentId))Ye.push(ts.data.attachmentId),wt++;else throw new Error(ts.message||((Re=ts.data)==null?void 0:Re.message)||"文件上传失败")}const es=await Y.createNestedReply(W.value,G.value,he,X.value.trim(),N.value||void 0,L.value||void 0,Ye.length>0?Ye:void 0);es.success?(await B(),ti(),o.success("回复成功"),setTimeout(()=>{const kt=document.querySelector(`[data-reply-id="${he}"]`);kt&&kt.scrollIntoView({behavior:"smooth",block:"nearest"})},100)):(console.error("楼中楼回复失败:",es.message),o.error(es.message||"回复失败"))}catch(Ye){console.error("楼中楼回复异常:",Ye),o.error(Ye.message||"回复失败")}finally{ee.value=!1,a.hide()}}},wd=()=>{i.value&&(ie.value={userId:Ra(i.value),userName:Ua(i.value),content:i.value.content,type:"post",postId:i.value.id},q.value=!0)},kd=he=>{var qe;if(!i.value)return;const ce=(qe=i.value.replies)==null?void 0:qe.find(He=>He.id===he);ce&&(ie.value={userId:ce.replyUser.id,userName:ce.replyUser.nickName||ce.replyUser.username,content:ce.content,type:"reply",postId:i.value.id,replyId:ce.id},q.value=!0)},$d=(he,ce)=>{var De,Ie;if(!i.value)return;const qe=(De=i.value.replies)==null?void 0:De.find(Re=>Re.id===he);if(!qe)return;const He=(Ie=qe.nestedReplies)==null?void 0:Ie.find(Re=>Re.id===ce);He&&(ie.value={userId:He.replyUser.id,userName:He.replyUser.nickName||He.replyUser.username,content:He.content,type:"nestedReply",postId:i.value.id,replyId:ce},q.value=!0)},Cd=async(he,ce,qe)=>{var He,De;if(!(!W.value||!G.value||!qe.type)){a.show("提交举报中...");try{let Ie="";if(qe.type==="post"?Ie=qe.postId||G.value:(qe.type==="reply"||qe.type==="nestedReply")&&(Ie=qe.replyId||""),!Ie){console.error("无法确定举报目标ID");return}const Re=await Y.submitReport(qe.type,Ie,W.value,G.value,he,qe.content,ce||void 0);Re.success?(q.value=!1,o.success("举报提交成功")):o.error(Re.message||"举报失败")}catch(Ie){console.error("举报异常:",Ie),o.error(((De=(He=Ie.response)==null?void 0:He.data)==null?void 0:De.message)||Ie.message||"举报失败")}finally{a.hide()}}},Ra=he=>typeof he.author=="object"&&he.author!==null?he.author.id||"":typeof he.author=="string"?he.author:"",Ua=he=>{if(typeof he.author=="object"&&he.author!==null){const ce=he.author;return ce.nickName||ce.username||""}return typeof he.author=="string"?he.author:""},En=async(he,ce,qe,He)=>{ae.value&&clearTimeout(ae.value),le.value=ce,xe.value=qe,He&&He.trim()!==""?K.value=He:K.value=void 0,ae.value=window.setTimeout(()=>{const De=he.target.getBoundingClientRect();je.value={x:De.left-100,y:De.bottom+8},Pe.value=!0},200)},Rn=()=>{ae.value&&(clearTimeout(ae.value),ae.value=null),Fe.value&&(clearTimeout(Fe.value),Fe.value=null),Fe.value=window.setTimeout(()=>{Pe.value&&(Pe.value=!1)},200)},Id=()=>{Fe.value&&(clearTimeout(Fe.value),Fe.value=null)},Sd=()=>{ae.value&&(clearTimeout(ae.value),ae.value=null),Fe.value&&(clearTimeout(Fe.value),Fe.value=null),Pe.value=!1,K.value=void 0},xd=(he,ce)=>{t.push(`/messages?userId=${he}&userName=${encodeURIComponent(ce)}`)},Ad=(he,ce)=>{console.log("拉黑用户:",he,ce),console.log(`已拉黑用户:${ce}`)};return nt(()=>{V()}),ho(()=>{C.value.forEach(he=>{he.startsWith("blob:")&&URL.revokeObjectURL(he)}),C.value.clear()}),(he,ce)=>{var qe,He,De;return u(),f("div",lA,[n("div",iA,[n("div",rA,[n("div",cA,[n("button",{class:"back-button",onClick:Le},[m(k,{icon:"mdi:arrow-left",class:"back-icon"}),ce[8]||(ce[8]=n("span",null,"返回讨论区",-1))]),n("button",{class:"home-button",onClick:Ue},[m(k,{icon:"fluent-color:home-48",class:"home-icon"}),ce[9]||(ce[9]=n("span",null,"首页",-1))])])]),c.value?(u(),f("div",uA,[...ce[10]||(ce[10]=[n("div",{class:"spinner"},null,-1),n("p",null,"加载中...",-1)])])):p.value?(u(),f("div",dA,[n("p",null,h(p.value),1),n("button",{onClick:V,class:"btn btn-primary"},"重试")])):i.value?(u(),f("div",fA,[r.value?(u(),f("div",pA,[n("div",{class:"forum-info",onClick:Le},[n("div",vA,[n("div",mA,[re.value?Ve((u(),f("img",{key:0,src:re.value,alt:r.value.name,onLoad:ce[0]||(ce[0]=Ie=>y.value=!0),onError:ce[1]||(ce[1]=Ie=>S.value=!0)},null,40,hA)),[[ls,y.value&&!S.value]]):T("",!0),Ve(n("div",{class:"icon-placeholder"},h(r.value.name.charAt(0).toUpperCase()),513),[[ls,!re.value||!y.value||S.value]])])]),n("span",gA,h(r.value.name),1),m(k,{icon:"mdi:chevron-right",class:"breadcrumb-separator"})]),n("span",yA,h(i.value.title),1)])):T("",!0),n("div",bA,[n("div",_A,[n("h1",wA,h(i.value.title),1),n("div",kA,[n("div",{class:"author-wrapper",onMouseenter:ce[2]||(ce[2]=Oe(Ie=>En(Ie,Ra(i.value),Ua(i.value)),["stop"])),onMouseleave:Oe(Rn,["stop"])},[n("div",$A,[m(Et,{userId:Ra(i.value),width:"36px",height:"36px"},null,8,["userId"]),ce[11]||(ce[11]=n("div",{class:"online-indicator"},null,-1))]),n("span",CA,h(Ua(i.value)),1)],32),n("span",IA,h(Qe(i.value.publishTime)),1)])]),n("div",SA,[n("p",null,h(i.value.content),1),i.value.attachments&&i.value.attachments.length>0?(u(),f("div",xA,[Ze(i.value.attachments).length>0?(u(),f("div",AA,[m(mn,{images:bt(i.value.attachments),"show-index":!1,columns:4,"max-width":120,onImageClick:ce[3]||(ce[3]=Ie=>J(i.value.attachments,Ie))},null,8,["images"])])):T("",!0),dt(i.value.attachments).length>0?(u(),f("div",TA,[(u(!0),f(ye,null,Ee(dt(i.value.attachments),Ie=>(u(),f("div",{key:Ie.id,class:Te(["attachment-item",{clickable:!0}]),onClick:Re=>oe(Ie)},[m(k,{icon:"mdi:file",class:"attachment-icon"}),n("span",RA,h(Ie.name),1),n("span",UA,h(Ge(Ie.size)),1),m(k,{icon:"mdi:download",class:"attachment-action-icon",title:"下载文件"})],8,EA))),128))])):T("",!0)])):T("",!0)]),n("div",PA,[n("button",{class:Te(["action-btn",{active:i.value.userLikeStatus==="liked"}]),onClick:Be,disabled:se(a).loadingState.visible},[m(k,{icon:"mdi:thumb-up",class:"action-icon"}),n("span",null,h(i.value.likeCount),1)],10,MA),n("button",{class:Te(["action-btn",{active:i.value.userLikeStatus==="disliked"}]),onClick:Ce,disabled:se(a).loadingState.visible},[m(k,{icon:"mdi:thumb-down",class:"action-icon"}),n("span",null,h(i.value.dislikeCount),1)],10,DA),n("button",{class:"action-btn report-btn",onClick:wd},[m(k,{icon:"mdi:flag-outline",class:"action-icon"}),ce[12]||(ce[12]=n("span",null,"举报",-1))])])]),n("div",LA,[n("div",NA,[n("h2",null,"回帖 ("+h(i.value.replyCount)+")",1)]),n("div",OA,[n("div",FA,[n("div",VA,[m(Et,{userId:(qe=se(l))==null?void 0:qe._id,"user-name":((He=se(l))==null?void 0:He.nickName)||((De=se(l))==null?void 0:De.username)||"我",width:"36px",height:"36px"},null,8,["userId","user-name"])]),n("div",BA,[Ve(n("textarea",{"onUpdate:modelValue":ce[4]||(ce[4]=Ie=>D.value=Ie),class:"reply-textarea",placeholder:"写下你的回复...",rows:"3",maxlength:"1000"},null,512),[[Ke,D.value]]),n("div",jA,[n("div",qA,[n("input",{ref_key:"imageInput",ref:$,type:"file",accept:"image/*",multiple:"",onChange:ft,style:{display:"none"}},null,544),n("input",{ref_key:"fileInput",ref:R,type:"file",multiple:"",onChange:qt,style:{display:"none"}},null,544),n("button",{class:"upload-btn",onClick:Me,disabled:g.value.length>=5,title:"添加图片(最多5张,每张10M以内)"},[m(k,{icon:"mdi:image-outline",class:"btn-icon"}),ce[13]||(ce[13]=$e(" 图片 ",-1))],8,HA),n("button",{class:"upload-btn",onClick:tt,disabled:A.value.length>=5,title:"添加文件(最多5个,每个20M以内)"},[m(k,{icon:"mdi:file-outline",class:"btn-icon"}),ce[14]||(ce[14]=$e(" 文件 ",-1))],8,zA),g.value.length>0||A.value.length>0?(u(),f("span",WA,h(g.value.length+A.value.length)+" 个附件 ",1)):T("",!0)]),n("button",{class:"submit-reply-btn",onClick:Io,disabled:!_e.value||ne.value},[m(k,{icon:ne.value?"mdi:loading":"mdi:send",class:Te(["btn-icon",{spinning:ne.value}])},null,8,["icon","class"]),$e(" "+h(ne.value?"发表中...":"发表回复"),1)],8,KA)]),g.value.length>0||A.value.length>0?(u(),f("div",GA,[(u(!0),f(ye,null,Ee(g.value,(Ie,Re)=>(u(),f("div",{key:`img-${Re}`,class:"attachment-preview-item"},[n("img",{src:Ie.preview,alt:"预览图"},null,8,QA),n("button",{class:"remove-attachment-btn",onClick:Ye=>Es(Re)},[m(k,{icon:"mdi:close"})],8,JA),Ie.error?(u(),f("div",XA,h(Ie.error),1)):T("",!0)]))),128)),(u(!0),f(ye,null,Ee(A.value,(Ie,Re)=>(u(),f("div",{key:`file-${Re}`,class:"attachment-preview-item file"},[m(k,{icon:"mdi:file",class:"file-icon"}),n("span",ZA,h(Ie.file.name),1),n("span",YA,h(Ge(Ie.file.size)),1),n("button",{class:"remove-attachment-btn",onClick:Ye=>ko(Re)},[m(k,{icon:"mdi:close"})],8,e7),Ie.error?(u(),f("div",t7,h(Ie.error),1)):T("",!0)]))),128))])):T("",!0)])])]),i.value.replies&&i.value.replies.length>0?(u(),f("div",s7,[(u(!0),f(ye,null,Ee(i.value.replies,Ie=>(u(),f("div",{key:Ie.id,class:"reply-item"},[n("div",n7,[m(Et,{"avatar-id":Ie.replyUser.avatar,"user-name":Ie.replyUser.nickName||Ie.replyUser.username,userId:Ie.replyUser.id,size:"medium"},null,8,["avatar-id","user-name","userId"]),ce[15]||(ce[15]=n("div",{class:"online-indicator"},null,-1))]),n("div",o7,[n("div",a7,[n("div",{class:"author-wrapper",onMouseenter:Oe(Re=>En(Re,Ie.replyUser.id,Ie.replyUser.nickName||Ie.replyUser.username,Ie.replyUser.avatar),["stop"]),onMouseleave:Oe(Rn,["stop"])},[n("span",i7,h(Ie.replyUser.nickName||Ie.replyUser.username),1),Ie.replyUser.role==="admin"||Ie.replyUser.role==="qiuchenly"?(u(),f("span",{key:0,class:Te(["role-tag",{"role-admin":Ie.replyUser.role==="admin","role-qiuchenly":Ie.replyUser.role==="qiuchenly"}])},h(Ie.replyUser.role==="admin"?"管理员":"qiuchenly"),3)):T("",!0),Ie.replyToUser?(u(),f("span",r7,[ce[16]||(ce[16]=$e(" 回复了 ",-1)),n("span",{class:"reply-to-name clickable",onMouseenter:Oe(Re=>En(Re,Ie.replyToUser.id,Ie.replyToUser.nickName||Ie.replyToUser.username,Ie.replyToUser.avatar),["stop"]),onMouseleave:Oe(Rn,["stop"])}," @"+h(Ie.replyToUser.nickName||Ie.replyToUser.username),41,c7)])):T("",!0)],40,l7),n("span",u7,h(Qe(Ie.date)),1)]),n("div",d7,[n("p",null,h(Ie.content),1),Ie.attachments&&Ie.attachments.length>0?(u(),f("div",f7,[Ze(Ie.attachments).length>0?(u(),f("div",p7,[m(mn,{images:It(Ie),"show-index":!1,columns:4,"max-width":120,onImageClick:Re=>te(Ie,Re)},null,8,["images","onImageClick"])])):T("",!0),dt(Ie.attachments).length>0?(u(),f("div",v7,[(u(!0),f(ye,null,Ee(dt(Ie.attachments),Re=>(u(),f("div",{key:Re.id,class:Te(["attachment-item",{clickable:!0}]),onClick:Ye=>oe(Re)},[m(k,{icon:"mdi:file",class:"attachment-icon"}),n("span",h7,h(Re.name),1),n("span",g7,h(Ge(Re.size)),1),m(k,{icon:"mdi:download",class:"attachment-action-icon",title:"下载文件"})],8,m7))),128))])):T("",!0)])):T("",!0)]),n("div",y7,[n("button",{class:"action-btn small",onClick:Re=>Ea(Ie.id)},[m(k,{icon:"mdi:reply-outline",class:"action-icon"}),ce[17]||(ce[17]=n("span",null,"回复",-1))],8,b7),n("button",{class:"action-btn small report-btn",onClick:Re=>kd(Ie.id)},[m(k,{icon:"mdi:flag-outline",class:"action-icon"}),ce[18]||(ce[18]=n("span",null,"举报",-1))],8,_7)]),M.value===Ie.id?(u(),f("div",w7,[ce[21]||(ce[21]=n("div",{class:"form-avatar"},[n("div",{class:"avatar-placeholder"},"我")],-1)),n("div",k7,[Ve(n("textarea",{"onUpdate:modelValue":ce[5]||(ce[5]=Re=>X.value=Re),class:"reply-textarea",placeholder:`回复 ${L.value||Ie.replyUser.nickName||Ie.replyUser.username}:`,rows:"2",maxlength:"500"},null,8,$7),[[Ke,X.value]]),n("div",C7,[n("div",I7,[n("input",{ref_for:!0,ref_key:"nestedImageInput",ref:ue,type:"file",accept:"image/*",multiple:"",onChange:ot,style:{display:"none"}},null,544),n("input",{ref_for:!0,ref_key:"nestedFileInput",ref:Z,type:"file",multiple:"",onChange:ys,style:{display:"none"}},null,544),n("button",{class:"upload-btn small",onClick:at,disabled:z.value.length>=3},[m(k,{icon:"mdi:image-outline",class:"btn-icon"}),ce[19]||(ce[19]=$e(" 图片 ",-1))],8,S7),n("button",{class:"upload-btn small",onClick:rt,disabled:Q.value.length>=3},[m(k,{icon:"mdi:file-outline",class:"btn-icon"}),ce[20]||(ce[20]=$e(" 文件 ",-1))],8,x7)]),n("div",A7,[n("button",{class:"cancel-btn",onClick:ti}," 取消 "),n("button",{class:"submit-reply-btn small",onClick:Re=>_d(Ie.id),disabled:!pe.value||ee.value},[m(k,{icon:ee.value?"mdi:loading":"mdi:send",class:Te(["btn-icon",{spinning:ee.value}])},null,8,["icon","class"]),$e(" "+h(ee.value?"发送中...":"发送"),1)],8,T7)])]),z.value.length>0||Q.value.length>0?(u(),f("div",E7,[(u(!0),f(ye,null,Ee(z.value,(Re,Ye)=>(u(),f("div",{key:`nested-img-${Ye}`,class:"attachment-preview-item"},[n("img",{src:Re.preview,alt:"预览图"},null,8,R7),n("button",{class:"remove-attachment-btn",onClick:wt=>$o(Ye)},[m(k,{icon:"mdi:close"})],8,U7)]))),128)),(u(!0),f(ye,null,Ee(Q.value,(Re,Ye)=>(u(),f("div",{key:`nested-file-${Ye}`,class:"attachment-preview-item file"},[m(k,{icon:"mdi:file",class:"file-icon"}),n("span",P7,h(Re.file.name),1),n("span",M7,h(Ge(Re.file.size)),1),n("button",{class:"remove-attachment-btn",onClick:wt=>Co(Ye)},[m(k,{icon:"mdi:close"})],8,D7)]))),128))])):T("",!0)])])):T("",!0),Ie.nestedReplies&&Ie.nestedReplies.length>0?(u(),f("div",L7,[(u(!0),f(ye,null,Ee(Ie.nestedReplies,Re=>(u(),f("div",{key:Re.id,class:"nested-reply-item"},[n("div",N7,[m(Et,{"avatar-id":Re.replyUser.avatar,"user-name":Re.replyUser.nickName||Re.replyUser.username,userId:Re.replyUser.id,size:"small"},null,8,["avatar-id","user-name","userId"]),ce[22]||(ce[22]=n("div",{class:"online-indicator"},null,-1))]),n("div",O7,[n("div",F7,[n("div",{class:"author-wrapper",onMouseenter:Oe(Ye=>En(Ye,Re.replyUser.id,Re.replyUser.nickName||Re.replyUser.username,Re.replyUser.avatar),["stop"]),onMouseleave:Oe(Rn,["stop"])},[n("span",B7,h(Re.replyUser.nickName||Re.replyUser.username),1),Re.replyUser.role==="admin"||Re.replyUser.role==="qiuchenly"?(u(),f("span",{key:0,class:Te(["role-tag",{"role-admin":Re.replyUser.role==="admin","role-qiuchenly":Re.replyUser.role==="qiuchenly"}])},h(Re.replyUser.role==="admin"?"管理员":"qiuchenly"),3)):T("",!0)],40,V7),Re.replyToUser?(u(),f("span",j7,[ce[23]||(ce[23]=$e(" 回复 ",-1)),n("span",{class:"reply-to-name clickable",onMouseenter:Oe(Ye=>En(Ye,Re.replyToUser.id,Re.replyToUser.nickName||Re.replyToUser.username,Re.replyToUser.avatar),["stop"]),onMouseleave:Oe(Rn,["stop"]),onClick:Oe(Ye=>Ea(Ie.id,Re.replyToUser.id,Re.replyToUser.nickName||Re.replyToUser.username),["stop"])}," @"+h(Re.replyToUser.nickName||Re.replyToUser.username),41,q7)])):T("",!0),n("span",H7,h(Qe(Re.date)),1)]),n("div",z7,[n("p",null,h(Re.content),1),Re.attachments&&Re.attachments.length>0?(u(),f("div",W7,[Ze(Re.attachments).length>0?(u(),f("div",K7,[m(mn,{images:jt(Re),"show-index":!1,columns:4,"max-width":120,onImageClick:Ye=>ke(Re,Ye)},null,8,["images","onImageClick"])])):T("",!0),dt(Re.attachments).length>0?(u(),f("div",G7,[(u(!0),f(ye,null,Ee(dt(Re.attachments),Ye=>(u(),f("div",{key:Ye.id,class:Te(["attachment-item",{clickable:!0}]),onClick:wt=>oe(Ye)},[m(k,{icon:"mdi:file",class:"attachment-icon"}),n("span",J7,h(Ye.name),1),n("span",X7,h(Ge(Ye.size)),1),m(k,{icon:"mdi:download",class:"attachment-action-icon",title:"下载文件"})],8,Q7))),128))])):T("",!0)])):T("",!0),n("div",Z7,[n("button",{class:"action-btn small",onClick:Ye=>Ea(Ie.id,Re.replyUser.id,Re.replyUser.nickName||Re.replyUser.username)},[m(k,{icon:"mdi:reply-outline",class:"action-icon"}),ce[24]||(ce[24]=n("span",null,"回复",-1))],8,Y7),n("button",{class:"action-btn small report-btn",onClick:Ye=>$d(Ie.id,Re.id)},[m(k,{icon:"mdi:flag-outline",class:"action-icon"}),ce[25]||(ce[25]=n("span",null,"举报",-1))],8,eT)])])])]))),128))])):T("",!0)])]))),128))])):T("",!0),i.value.replies&&i.value.replies.length>0&&F.value>1?(u(),Ne(qs,{key:1,"current-page":I.value,"total-pages":F.value,total:E.value,onPageChange:ve},null,8,["current-page","total-pages","total"])):T("",!0),!i.value.replies||i.value.replies.length===0?(u(),f("div",tT,[...ce[26]||(ce[26]=[n("p",null,"还没有回帖,快来抢沙发吧!",-1)])])):T("",!0)])])):T("",!0)]),m(Tn,{visible:d.value,"images-info":b.value,"initial-index":_.value,"show-navigation":!0,"show-info":!0,onClose:H,onIndexChange:ce[6]||(ce[6]=Ie=>_.value=Ie)},null,8,["visible","images-info","initial-index"]),m(gd,{visible:q.value,"report-info":ie.value,onClose:ce[7]||(ce[7]=Ie=>q.value=!1),onSubmit:Cd},null,8,["visible","report-info"]),m(Yl,{visible:Pe.value,"user-id":le.value,"user-name":xe.value,"avatar-id":P.value,position:je.value,onClose:Sd,onSendMessage:xd,onBlockUser:Ad,onMouseEnter:Id},null,8,["visible","user-id","user-name","avatar-id","position"]),m(Yt,{toasts:se(o).toasts.value,onRemove:se(o).removeToast},null,8,["toasts","onRemove"])])}}}),nT=We(sT,[["__scopeId","data-v-5262f5d5"]]),oT={class:"tabs-container"},aT={class:"tabs-wrapper"},lT=["onClick"],iT={key:0,class:"tab-badge"},rT=ze({__name:"Tabs",props:{tabs:{},activeTab:{}},emits:["update:activeTab"],setup(e){const t=e,s=w(null),o=w(!1),a=w(!1),l=()=>{if(!s.value)return;const d=s.value,v=d.scrollLeft,b=d.scrollWidth,_=d.clientWidth,y=b>_;o.value=y&&v>1,a.value=y&&v+_<b-1},i=()=>{if(!s.value)return;const d=s.value,v=d.clientWidth*.8;d.scrollBy({left:-v,behavior:"smooth"}),setTimeout(()=>{l()},300)},r=()=>{if(!s.value)return;const d=s.value,v=d.clientWidth*.8;d.scrollBy({left:v,behavior:"smooth"}),setTimeout(()=>{l()},300)},c=()=>{l()};let p=null;return Xe(()=>t.tabs,()=>{pt(()=>{l()})},{deep:!0}),nt(()=>{pt(()=>{l(),s.value&&(p=new ResizeObserver(()=>{l()}),p.observe(s.value))})}),At(()=>{p&&p.disconnect()}),(d,v)=>(u(),f("div",oT,[n("div",aT,[o.value?(u(),f("button",{key:0,class:"scroll-arrow left",onClick:i,type:"button"},[m(k,{icon:"mdi:chevron-left"})])):T("",!0),n("div",{ref_key:"tabsRef",ref:s,class:"tabs",onScroll:c},[(u(!0),f(ye,null,Ee(e.tabs,b=>(u(),f("button",{key:b.id,class:Te(["tab-button",{active:e.activeTab===b.id}]),onClick:Oe(_=>d.$emit("update:activeTab",b.id),["stop"]),type:"button"},[m(k,{icon:b.icon,class:"tab-icon"},null,8,["icon"]),n("span",null,h(b.label),1),b.badge?(u(),f("span",iT,h(b.badge),1)):T("",!0)],10,lT))),128))],544),a.value?(u(),f("button",{key:1,class:"scroll-arrow right",onClick:r,type:"button"},[m(k,{icon:"mdi:chevron-right"})])):T("",!0)])]))}}),Ta=We(rT,[["__scopeId","data-v-e285743c"]]),cT={class:"user-edit-dialog"},uT={class:"dialog-header"},dT={class:"dialog-body"},fT={key:0,class:"loading-state"},pT={key:1,class:"user-form"},vT={class:"user-header-section"},mT=["src"],hT={key:1,class:"avatar-placeholder"},gT=["disabled"],yT=["disabled"],bT=["disabled"],_T={key:1,class:"avatar-menu-item uploading"},wT={class:"readonly-info"},kT={class:"info-item"},$T={class:"info-value"},CT={class:"info-item"},IT={class:"info-value"},ST={class:"form-grid"},xT={class:"form-item"},AT={class:"input-with-icon"},TT={class:"form-item"},ET={class:"input-with-icon"},RT={class:"form-item"},UT={class:"form-item"},PT={class:"input-with-icon"},MT={class:"form-item"},DT={class:"input-with-icon"},LT={class:"form-item"},NT={class:"input-with-icon"},OT={key:0,class:"form-item"},FT={class:"form-item"},VT={class:"titles-section"},BT={class:"titles-list"},jT=["onClick"],qT={class:"add-title-input"},HT=["disabled"],zT={class:"dialog-actions"},WT=["disabled"],KT=["src"],GT=ze({__name:"UserEditDialog",props:{visible:{type:Boolean},userData:{},canEditRole:{type:Boolean,default:!1},loading:{type:Boolean,default:!1}},emits:["confirm","cancel","update:visible"],setup(e,{emit:t}){const s=e,o=t,a=w({nickName:"",email:"",avatar:"",gender:"unknown",age:0,exp:0,level:0,role:"user",status:"active",titles:[]}),l=w(""),i=w(null),r=w(null),c=w(null),p=w(null),d=w(""),v=w(!1),b=w(!1),_=w(!1),y=w(null),{toasts:S,success:C,error:I,removeToast:x}=_t(),E=w(""),F=async()=>{if(a.value.avatar){if(a.value.avatar.startsWith("http://")||a.value.avatar.startsWith("https://")){E.value=a.value.avatar;return}try{const Z=await Y.getImage(a.value.avatar,80,200,200);E.value&&E.value.startsWith("blob:")&&URL.revokeObjectURL(E.value),E.value=Z}catch(Z){console.error("获取头像失败:",Z),E.value=""}}else E.value&&E.value.startsWith("blob:")&&URL.revokeObjectURL(E.value),E.value=""},W=()=>{var Z;(Z=i.value)==null||Z.click()},G=async Z=>{var le;const ie=(le=Z.target.files)==null?void 0:le[0];if(!ie)return;if(!ie.type.startsWith("image/")){I("请选择图片文件",2e3);return}const Pe=10*1024*1024;if(ie.size>Pe){I("图片大小不能超过10MB",2e3);return}const je=new FileReader;je.onload=xe=>{var K;d.value=(K=xe.target)==null?void 0:K.result},je.readAsDataURL(ie),p.value=ie,await re(ie)},re=async Z=>{var q,ie,Pe;v.value=!0;try{const je=await Y.uploadImage("icon",Z);if(je.success&&((q=je.data)!=null&&q.fileId))a.value.avatar=je.data.fileId,C("头像上传成功",2e3);else throw new Error(je.message||"上传头像失败")}catch(je){console.error("上传头像失败:",je);const le=((Pe=(ie=je.response)==null?void 0:ie.data)==null?void 0:Pe.message)||je.message||"上传头像失败";I(le,3e3),p.value=null,d.value=""}finally{v.value=!1}},D=()=>{p.value=null,d.value="",a.value.avatar="",i.value&&(i.value.value=""),b.value=!1},U=()=>{y.value&&(clearTimeout(y.value),y.value=null),b.value=!0},O=()=>{(d.value||E.value)&&(_.value=!0,b.value=!1)},$=Z=>{const q=Z.relatedTarget;q&&c.value&&c.value.contains(q)||(y.value&&clearTimeout(y.value),y.value=window.setTimeout(()=>{b.value=!1},200))},R=()=>{if(!b.value||!r.value||!c.value)return;const Z=r.value.getBoundingClientRect(),q=c.value,ie=52,Pe=q.offsetHeight;let je=Z.right+12,le=Z.top;je+ie>window.innerWidth-20&&(je=Z.left-ie-12),le+Pe>window.innerHeight-20&&(le=window.innerHeight-Pe-20),je<20&&(je=20),le<20&&(le=20),q.style.left=`${je}px`,q.style.top=`${le}px`};Xe(b,Z=>{Z&&pt(()=>{R()})});const M=ge(()=>[{value:"user",label:"普通用户",icon:"mdi:account"},{value:"admin",label:"管理员",icon:"mdi:shield-account"}]),N=ge(()=>[{value:"active",label:"正常",icon:"mdi:check-circle"},{value:"locked",label:"锁定",icon:"mdi:lock"},{value:"banned",label:"封禁",icon:"mdi:ban"}]),L=ge(()=>[{value:"unknown",label:"未知",icon:"mdi:help-circle"},{value:"male",label:"男",icon:"mdi:gender-male"},{value:"female",label:"女",icon:"mdi:gender-female"}]),X=Z=>Z?new Date(Z).toLocaleString("zh-CN"):"未知",ne=()=>{var q;const Z=l.value.trim();Z&&!((q=a.value.titles)!=null&&q.includes(Z))&&(a.value.titles||(a.value.titles=[]),a.value.titles.push(Z),l.value="")},ee=Z=>{a.value.titles&&a.value.titles.splice(Z,1)},we=()=>{var Z;s.userData&&(a.value={nickName:s.userData.nickName||"",email:s.userData.email||"",avatar:s.userData.avatar||"",gender:s.userData.gender||"unknown",age:s.userData.age||0,exp:s.userData.exp||0,level:s.userData.level||0,role:s.userData.role||"user",status:s.userData.status||"active",titles:s.userData.titles?[...s.userData.titles]:[]},p.value=null,d.value="",b.value=!1,(Z=s.userData)!=null&&Z.avatar?F():(E.value&&E.value.startsWith("blob:")&&URL.revokeObjectURL(E.value),E.value=""))};nt(()=>{window.addEventListener("scroll",R,!0),window.addEventListener("resize",R)}),At(()=>{window.removeEventListener("scroll",R,!0),window.removeEventListener("resize",R),y.value&&clearTimeout(y.value),E.value&&E.value.startsWith("blob:")&&URL.revokeObjectURL(E.value)}),Xe(()=>s.visible,Z=>{Z&&(we(),l.value="")});const de=()=>{o("confirm",a.value)},ue=()=>{o("update:visible",!1),o("cancel")};return(Z,q)=>(u(),f(ye,null,[(u(),Ne(Ot,{to:"body"},[m(gt,{name:"fade"},{default:lt(()=>[e.visible?(u(),f("div",{key:0,class:"user-edit-dialog-overlay",onClick:Oe(ue,["self"])},[n("div",cT,[n("div",uT,[q[12]||(q[12]=n("h3",{class:"dialog-title"},"编辑用户信息",-1)),n("button",{class:"close-btn",onClick:ue,type:"button"},[m(k,{icon:"mdi:close"})])]),n("div",dT,[e.loading?(u(),f("div",fT,[...q[13]||(q[13]=[n("div",{class:"spinner"},null,-1),n("p",null,"加载用户信息中...",-1)])])):(u(),f("div",pT,[n("div",vT,[n("div",{class:"avatar-section",onMouseenter:U,onMouseleave:$},[n("div",{ref_key:"avatarPreviewRef",ref:r,class:"avatar-preview"},[d.value||E.value?(u(),f("img",{key:0,src:d.value||E.value,alt:"头像预览",class:"avatar-image"},null,8,mT)):(u(),f("div",hT,[m(k,{icon:"mdi:account",class:"placeholder-icon"})]))],512),n("input",{ref_key:"avatarInputRef",ref:i,type:"file",accept:"image/*",onChange:G,class:"file-input",style:{display:"none"}},null,544),(u(),Ne(Ot,{to:"body"},[m(gt,{name:"avatar-menu-fade"},{default:lt(()=>[b.value?(u(),f("div",{key:0,ref_key:"avatarMenuRef",ref:c,class:"avatar-menu",onMouseenter:U,onMouseleave:$},[n("button",{type:"button",class:"avatar-menu-item",onClick:O,disabled:!d.value&&!E.value,title:"预览"},[m(k,{icon:"fluent:eye-24-regular"})],8,gT),n("button",{type:"button",class:"avatar-menu-item",onClick:W,disabled:v.value,title:"更换"},[m(k,{icon:"fluent:image-edit-24-regular"})],8,yT),p.value||a.value.avatar?(u(),f("button",{key:0,type:"button",class:"avatar-menu-item danger",onClick:D,disabled:v.value,title:"清除"},[m(k,{icon:"fluent:delete-24-regular"})],8,bT)):T("",!0),v.value?(u(),f("div",_T,[...q[14]||(q[14]=[n("div",{class:"spinner-small"},null,-1)])])):T("",!0)],544)):T("",!0)]),_:1})]))],32),n("div",wT,[n("div",kT,[q[15]||(q[15]=n("span",{class:"info-label"},"用户ID",-1)),n("span",$T,h(e.userData.id),1)]),n("div",CT,[q[16]||(q[16]=n("span",{class:"info-label"},"注册时间",-1)),n("span",IT,h(X(e.userData.createdAt)),1)])])]),n("div",ST,[n("div",xT,[q[17]||(q[17]=n("label",{class:"form-label"},"昵称",-1)),n("div",AT,[m(k,{icon:"fluent:person-24-regular",class:"input-icon"}),Ve(n("input",{"onUpdate:modelValue":q[0]||(q[0]=ie=>a.value.nickName=ie),type:"text",placeholder:"请输入昵称",class:"form-input"},null,512),[[Ke,a.value.nickName]])])]),n("div",TT,[q[18]||(q[18]=n("label",{class:"form-label"},"邮箱",-1)),n("div",ET,[m(k,{icon:"fluent:mail-24-regular",class:"input-icon"}),Ve(n("input",{"onUpdate:modelValue":q[1]||(q[1]=ie=>a.value.email=ie),type:"email",placeholder:"请输入邮箱",class:"form-input"},null,512),[[Ke,a.value.email]])])]),n("div",RT,[q[19]||(q[19]=n("label",{class:"form-label"},"性别",-1)),m(is,{modelValue:a.value.gender,"onUpdate:modelValue":q[2]||(q[2]=ie=>a.value.gender=ie),options:L.value,placeholder:"请选择性别"},null,8,["modelValue","options"])]),n("div",UT,[q[20]||(q[20]=n("label",{class:"form-label"},"年龄",-1)),n("div",PT,[m(k,{icon:"mdi:calendar",class:"input-icon"}),Ve(n("input",{"onUpdate:modelValue":q[3]||(q[3]=ie=>a.value.age=ie),type:"number",min:"0",max:"150",placeholder:"请输入年龄",class:"form-input"},null,512),[[Ke,a.value.age,void 0,{number:!0}]])])]),n("div",MT,[q[21]||(q[21]=n("label",{class:"form-label"},"经验值",-1)),n("div",DT,[m(k,{icon:"mdi:star",class:"input-icon"}),Ve(n("input",{"onUpdate:modelValue":q[4]||(q[4]=ie=>a.value.exp=ie),type:"number",min:"0",placeholder:"请输入经验值",class:"form-input"},null,512),[[Ke,a.value.exp,void 0,{number:!0}]])])]),n("div",LT,[q[22]||(q[22]=n("label",{class:"form-label"},"等级",-1)),n("div",NT,[m(k,{icon:"mdi:trending-up",class:"input-icon"}),Ve(n("input",{"onUpdate:modelValue":q[5]||(q[5]=ie=>a.value.level=ie),type:"number",min:"0",placeholder:"请输入等级",class:"form-input"},null,512),[[Ke,a.value.level,void 0,{number:!0}]])])]),e.canEditRole?(u(),f("div",OT,[q[23]||(q[23]=n("label",{class:"form-label"},"角色",-1)),m(is,{modelValue:a.value.role,"onUpdate:modelValue":q[6]||(q[6]=ie=>a.value.role=ie),options:M.value,placeholder:"请选择角色"},null,8,["modelValue","options"])])):T("",!0),n("div",FT,[q[24]||(q[24]=n("label",{class:"form-label"},"状态",-1)),m(is,{modelValue:a.value.status,"onUpdate:modelValue":q[7]||(q[7]=ie=>a.value.status=ie),options:N.value,placeholder:"请选择状态"},null,8,["modelValue","options"])])]),n("div",VT,[n("div",BT,[(u(!0),f(ye,null,Ee(a.value.titles,(ie,Pe)=>(u(),f("div",{key:Pe,class:"title-tag"},[n("span",null,h(ie),1),n("button",{type:"button",class:"remove-title-btn",onClick:je=>ee(Pe)},[m(k,{icon:"mdi:close"})],8,jT)]))),128)),n("div",qT,[Ve(n("input",{"onUpdate:modelValue":q[8]||(q[8]=ie=>l.value=ie),type:"text",placeholder:"添加称号",class:"title-input",onKeyup:en(ne,["enter"])},null,544),[[Ke,l.value]]),n("button",{type:"button",class:"add-title-btn",onClick:ne,disabled:!l.value.trim()},[m(k,{icon:"mdi:plus"})],8,HT)])])])]))]),n("div",zT,[n("button",{class:"btn btn-outline",onClick:ue}," 取消 "),n("button",{class:"btn btn-primary",onClick:de,disabled:e.loading}," 保存 ",8,WT)])])])):T("",!0)]),_:1})])),m(gt,{name:"preview-fade"},{default:lt(()=>[_.value?(u(),f("div",{key:0,class:"avatar-preview-modal",onClick:q[11]||(q[11]=ie=>_.value=!1)},[n("div",{class:"preview-content",onClick:q[10]||(q[10]=Oe(()=>{},["stop"]))},[n("img",{src:d.value||E.value,alt:"头像预览"},null,8,KT),n("button",{class:"close-preview-btn",onClick:q[9]||(q[9]=ie=>_.value=!1)},[m(k,{icon:"mdi:close"})])])])):T("",!0)]),_:1}),m(Yt,{toasts:se(S),onRemove:se(x)},null,8,["toasts","onRemove"])],64))}}),QT=We(GT,[["__scopeId","data-v-bf22433e"]]);function JT(){const e=w(!1),t=w({title:"",fields:[],confirmText:"确认",cancelText:"取消"});let s=null;const o=i=>(t.value={...t.value,...i},e.value=!0,new Promise(r=>{s=r})),a=i=>{e.value=!1,s&&(s(i),s=null)},l=()=>{e.value=!1,s&&(s(null),s=null)};return{visible:ge(()=>e.value),config:ge(()=>t.value),show:o,handleConfirm:a,handleCancel:l}}const XT={class:"users-management"},ZT={class:"section-header"},YT={class:"header-actions"},e9={class:"table-container"},t9={key:0,class:"loading-state"},s9={key:1,class:"error-state"},n9={class:"data-table"},o9={key:0},a9={colspan:"8",class:"empty-state"},l9={class:"action-buttons"},i9=["onClick"],r9=["onClick"],c9=["onClick"],u9=["onClick"],d9=["onClick"],f9=["onClick"],p9=["onClick"],v9=["onClick"],m9=ze({__name:"UsersManagement",setup(e){const{success:t,error:s}=_t(),o=gs(),a=JT(),{isQiuChenLy:l}=An(),i=w(""),r=w([]),c=w(!1),p=w(""),d=w(1),v=w(20),b=w(0),_=ge(()=>Math.ceil(b.value/v.value)),y=w(!1),S=w(null),C=w(!1),I=ge(()=>r.value);let x=null;const E=()=>{x&&clearTimeout(x),x=setTimeout(()=>{d.value=1,D()},500)},F=de=>{d.value=de,D()},W=de=>new Date(de).toLocaleString("zh-CN"),G=de=>{switch(de){case"admin":return"管理员";case"qiuchenly":return"超级管理员";default:return"用户"}},re=de=>{switch(de){case"active":return"正常";case"locked":return"锁定";case"banned":return"封禁";case"deleted":return"已删除";default:return de}},D=async()=>{c.value=!0,p.value="";try{const de=await Y.getUsers(d.value,v.value,i.value||void 0);de.users&&Array.isArray(de.users)?(r.value=de.users.map(ue=>{var Z;return{id:ue.id||ue._id||((Z=ue._id)==null?void 0:Z.toString()),username:ue.username,nickName:ue.nickName,email:ue.email,avatar:ue.avatar||"",role:ue.role||(ue.roleWeight>=9999?"qiuchenly":ue.roleWeight>=90?"admin":"user"),roleWeight:ue.roleWeight,status:ue.status||"active",gender:ue.gender||"unknown",age:ue.age||0,exp:ue.exp||0,level:ue.level||0,titles:ue.titles||[],createdAt:ue.createdAt}}),b.value=de.total||0):p.value="加载用户列表失败"}catch(de){p.value=de.message||"加载用户列表失败",s(de.message||"加载用户列表失败",3e3)}finally{c.value=!1}},U=async()=>{var ue,Z;const de=await a.show({title:"添加用户",message:"请填写用户信息",fields:[{key:"username",label:"用户名",placeholder:"请输入用户名",type:"text",required:!0},{key:"password",label:"密码",placeholder:"请输入密码",type:"password",required:!0},{key:"email",label:"邮箱",placeholder:"请输入邮箱(可选)",type:"email",required:!1},{key:"nickName",label:"昵称",placeholder:"请输入昵称(可选)",type:"text",required:!1},{key:"role",label:"角色",type:"select",required:!1,defaultValue:"user",options:[{label:"普通用户",value:"user"},...l.value?[{label:"管理员",value:"admin"}]:[]]}]});if(de)try{const q=await Y.addUser({username:de.username,password:de.password,email:de.email||void 0,nickName:de.nickName||void 0,role:de.role==="admin"?"admin":void 0});if(q.success)t("添加用户成功",2e3),D();else{const ie=q.message||"添加用户失败";s(ie,3e3),console.error("添加用户失败:",q)}}catch(q){const ie=((Z=(ue=q.response)==null?void 0:ue.data)==null?void 0:Z.message)||q.message||"添加用户失败";s(ie,3e3),console.error("添加用户异常:",q)}},O=async de=>{S.value={id:de.id,username:de.username,nickName:de.nickName,email:de.email,avatar:de.avatar||"",role:de.role,roleWeight:de.roleWeight,status:de.status,gender:de.gender||"unknown",age:de.age||0,exp:de.exp||0,level:de.level||0,titles:de.titles||[],createdAt:de.createdAt},y.value=!0},$=async de=>{var ue,Z,q,ie,Pe,je;if(S.value){C.value=!0;try{const le={};if(de.nickName!==void 0&&(le.nickName=de.nickName),de.email!==void 0&&(le.email=de.email),de.avatar!==void 0&&(le.avatar=de.avatar),de.gender!==void 0&&(le.gender=de.gender),de.age!==void 0&&(le.age=de.age),de.exp!==void 0&&(le.exp=de.exp),de.level!==void 0&&(le.level=de.level),de.titles!==void 0&&(le.titles=de.titles),de.status!==void 0){const K={active:"active",locked:"locked",banned:"banned"}[de.status]||de.status;try{await Y.setUserStatus(S.value.username,K)}catch(ae){const Fe=((Z=(ue=ae.response)==null?void 0:ue.data)==null?void 0:Z.message)||ae.message||"更新用户状态失败";s(Fe,3e3),console.error("更新用户状态异常:",ae)}}if(de.role!==void 0&&l.value)try{await Y.upgradeUserRole(S.value.username,de.role)}catch(xe){const K=((ie=(q=xe.response)==null?void 0:q.data)==null?void 0:ie.message)||xe.message||"更新用户角色失败";s(K,3e3),console.error("更新用户角色异常:",xe)}if(Object.keys(le).length>0){const xe=await Y.updateUser(S.value.id,le);if(xe.success)t("更新用户成功",2e3),D(),y.value=!1,S.value=null;else{const K=xe.message||"更新用户失败";s(K,3e3),console.error("更新用户失败:",xe)}}else t("更新用户成功",2e3),D(),y.value=!1,S.value=null}catch(le){const xe=((je=(Pe=le.response)==null?void 0:Pe.data)==null?void 0:je.message)||le.message||"更新用户失败";s(xe,3e3),console.error("更新用户异常:",le)}finally{C.value=!1}}},R=()=>{y.value=!1,S.value=null},M=async de=>{var Z,q;if(await o.show({title:"删除用户",message:`确定要删除用户 ${de.username} 吗?此操作不可恢复!`,type:"danger",confirmText:"删除",cancelText:"取消"}))try{const ie=await Y.deleteUser(de.username);if(ie.success)t("删除用户成功",2e3),D();else{const Pe=ie.message||"删除用户失败";s(Pe,3e3),console.error("删除用户失败:",ie)}}catch(ie){const Pe=((q=(Z=ie.response)==null?void 0:Z.data)==null?void 0:q.message)||ie.message||"删除用户失败";s(Pe,3e3),console.error("删除用户异常:",ie)}},N=async de=>{var Z,q;if(await o.show({title:"锁定用户",message:`确定要锁定用户 ${de.username} 吗?锁定后用户将无法发表评论、点赞、收藏、分享等操作。`,type:"warning",confirmText:"锁定",cancelText:"取消"}))try{const ie=await Y.setUserStatus(de.username,"locked");if(ie.success)t("锁定用户成功",2e3),D();else{const Pe=ie.message||"锁定用户失败";s(Pe,3e3),console.error("锁定用户失败:",ie)}}catch(ie){const Pe=((q=(Z=ie.response)==null?void 0:Z.data)==null?void 0:q.message)||ie.message||"锁定用户失败";s(Pe,3e3),console.error("锁定用户异常:",ie)}},L=async de=>{var ue,Z;try{const q=await Y.setUserStatus(de.username,"active");if(q.success)t("解除锁定成功",2e3),D();else{const ie=q.message||"解除锁定失败";s(ie,3e3),console.error("解除锁定失败:",q)}}catch(q){const ie=((Z=(ue=q.response)==null?void 0:ue.data)==null?void 0:Z.message)||q.message||"解除锁定失败";s(ie,3e3),console.error("解除锁定异常:",q)}},X=async de=>{var Z,q;if(await o.show({title:"封禁用户",message:`确定要封禁用户 ${de.username} 吗?封禁后用户将无法登录,无法访问任何API接口。`,type:"danger",confirmText:"封禁",cancelText:"取消"}))try{const ie=await Y.setUserStatus(de.username,"banned");if(ie.success)t("封禁用户成功",2e3),D();else{const Pe=ie.message||"封禁用户失败";s(Pe,3e3),console.error("封禁用户失败:",ie)}}catch(ie){const Pe=((q=(Z=ie.response)==null?void 0:Z.data)==null?void 0:q.message)||ie.message||"封禁用户失败";s(Pe,3e3),console.error("封禁用户异常:",ie)}},ne=async de=>{var ue,Z;try{const q=await Y.setUserStatus(de.username,"active");if(q.success)t("解除封禁成功",2e3),D();else{const ie=q.message||"解除封禁失败";s(ie,3e3),console.error("解除封禁失败:",q)}}catch(q){const ie=((Z=(ue=q.response)==null?void 0:ue.data)==null?void 0:Z.message)||q.message||"解除封禁失败";s(ie,3e3),console.error("解除封禁异常:",q)}},ee=async de=>{var Z,q;if(await o.show({title:"提升用户权限",message:`确定要将用户 ${de.username} 提升为管理员吗?`,type:"warning",confirmText:"提升",cancelText:"取消"}))try{const ie=await Y.upgradeUserRole(de.username,"admin");if(ie.success)t("提升用户权限成功",2e3),D();else{const Pe=ie.message||"提升用户权限失败";s(Pe,3e3),console.error("提升用户权限失败:",ie)}}catch(ie){const Pe=((q=(Z=ie.response)==null?void 0:Z.data)==null?void 0:q.message)||ie.message||"提升用户权限失败";s(Pe,3e3),console.error("提升用户权限异常:",ie)}},we=async de=>{var Z,q;if(await o.show({title:"降级用户权限",message:`确定要将管理员 ${de.username} 降级为普通用户吗?`,type:"warning",confirmText:"降级",cancelText:"取消"}))try{const ie=await Y.upgradeUserRole(de.username,"user");if(ie.success)t("降级用户权限成功",2e3),D();else{const Pe=ie.message||"降级用户权限失败";s(Pe,3e3),console.error("降级用户权限失败:",ie)}}catch(ie){const Pe=((q=(Z=ie.response)==null?void 0:Z.data)==null?void 0:q.message)||ie.message||"降级用户权限失败";s(Pe,3e3),console.error("降级用户权限异常:",ie)}};return nt(()=>{D()}),(de,ue)=>(u(),f("div",XT,[n("div",ZT,[ue[3]||(ue[3]=n("h2",null,"用户管理",-1)),n("div",YT,[Ve(n("input",{"onUpdate:modelValue":ue[0]||(ue[0]=Z=>i.value=Z),type:"text",placeholder:"搜索用户...",class:"search-input",onInput:E},null,544),[[Ke,i.value]]),n("button",{class:"btn btn-primary",onClick:U},[m(k,{icon:"mdi:plus",class:"btn-icon"}),ue[2]||(ue[2]=$e(" 添加用户 ",-1))])])]),n("div",e9,[c.value?(u(),f("div",t9,[...ue[4]||(ue[4]=[n("div",{class:"spinner"},null,-1),n("p",null,"加载中...",-1)])])):p.value?(u(),f("div",s9,[m(k,{icon:"mdi:alert-circle"}),n("p",null,h(p.value),1),n("button",{class:"btn btn-primary",onClick:D},"重试")])):(u(),f(ye,{key:2},[n("table",n9,[ue[6]||(ue[6]=n("thead",null,[n("tr",null,[n("th",null,"ID"),n("th",null,"用户名"),n("th",null,"昵称"),n("th",null,"邮箱"),n("th",null,"角色"),n("th",null,"注册时间"),n("th",null,"状态"),n("th",null,"操作")])],-1)),n("tbody",null,[I.value.length===0?(u(),f("tr",o9,[n("td",a9,[m(k,{icon:"mdi:account-off"}),ue[5]||(ue[5]=n("p",null,"暂无用户数据",-1))])])):T("",!0),(u(!0),f(ye,null,Ee(I.value,Z=>(u(),f("tr",{key:Z.id},[n("td",null,h(Z.id),1),n("td",null,h(Z.username),1),n("td",null,h(Z.nickName||"-"),1),n("td",null,h(Z.email||"-"),1),n("td",null,[n("span",{class:Te(["role-badge",Z.role])},h(G(Z.role)),3)]),n("td",null,h(W(Z.createdAt)),1),n("td",null,[n("span",{class:Te(["status-badge",Z.status])},h(re(Z.status)),3)]),n("td",null,[n("div",l9,[n("button",{class:"action-btn edit",onClick:q=>O(Z),title:"编辑"},[m(k,{icon:"mdi:pencil"})],8,i9),n("button",{class:"action-btn delete",onClick:q=>M(Z),title:"删除"},[m(k,{icon:"mdi:delete"})],8,r9),Z.status==="active"?(u(),f("button",{key:0,class:"action-btn lock",onClick:q=>N(Z),title:"锁定"},[m(k,{icon:"mdi:lock"})],8,c9)):Z.status==="locked"?(u(),f("button",{key:1,class:"action-btn unlock",onClick:q=>L(Z),title:"解除锁定"},[m(k,{icon:"mdi:lock-open"})],8,u9)):T("",!0),Z.status==="active"||Z.status==="locked"?(u(),f("button",{key:2,class:"action-btn ban",onClick:q=>X(Z),title:"封禁"},[m(k,{icon:"mdi:ban"})],8,d9)):T("",!0),Z.status==="banned"?(u(),f("button",{key:3,class:"action-btn unban",onClick:q=>ne(Z),title:"解除封禁"},[m(k,{icon:"mdi:check-circle"})],8,f9)):T("",!0),se(l)&&Z.role==="user"?(u(),f("button",{key:4,class:"action-btn upgrade",onClick:q=>ee(Z),title:"提升为管理员"},[m(k,{icon:"mdi:arrow-up-circle"})],8,p9)):T("",!0),se(l)&&Z.role==="admin"?(u(),f("button",{key:5,class:"action-btn downgrade",onClick:q=>we(Z),title:"降级为普通用户"},[m(k,{icon:"mdi:arrow-down-circle"})],8,v9)):T("",!0)])])]))),128))])]),m(qs,{"current-page":d.value,"total-pages":_.value,total:b.value,onPageChange:F},null,8,["current-page","total-pages","total"])],64))]),m(QT,{visible:y.value,"onUpdate:visible":ue[1]||(ue[1]=Z=>y.value=Z),userData:S.value,loading:C.value,onConfirm:$,onCancel:R},null,8,["visible","userData","loading"])]))}}),h9=We(m9,[["__scopeId","data-v-60f380c8"]]),g9={class:"post-edit-dialog"},y9={class:"dialog-header"},b9={class:"dialog-body"},_9={key:0,class:"loading-state"},w9={key:1,class:"post-form"},k9={key:0,class:"form-group author-info-section"},$9={class:"author-card"},C9={class:"author-avatar"},I9={class:"author-details"},S9={class:"author-name"},x9={key:0,class:"author-id"},A9={class:"form-group"},T9=["disabled"],E9={class:"form-group"},R9=["disabled"],U9={class:"form-group"},P9={key:0,class:"attachments-list"},M9=["onClick","disabled"],D9=["onClick"],L9={class:"attachment-name"},N9={class:"attachment-size"},O9={key:1,class:"no-attachments"},F9={class:"form-group"},V9={class:"attachment-upload"},B9=["disabled"],j9=["disabled"],q9=["disabled"],H9=["disabled"],z9={key:0,class:"upload-progress"},W9={class:"dialog-actions"},K9=["disabled"],G9=["disabled"],Q9={key:0},J9={key:1},X9=ze({__name:"PostEditDialog",props:{visible:{type:Boolean},postData:{},loading:{type:Boolean,default:!1}},emits:["confirm","cancel"],setup(e,{emit:t}){const s=e,o=t,a=_t(),l=w({title:"",content:"",attachments:[]}),i=w(!1),r=w(!1),c=w(null),p=w(null),d=w(null);w("");const v=ge(()=>l.value.title.trim().length>0&&l.value.content.trim().length>0),b=D=>{if(D===0)return"0 B";const U=1024,O=["B","KB","MB","GB"],$=Math.floor(Math.log(D)/Math.log(U));return Math.round(D/Math.pow(U,$)*100)/100+" "+O[$]},_=()=>{s.postData?l.value={title:s.postData.title||"",content:s.postData.content||"",attachments:s.postData.attachments||[]}:l.value={title:"",content:"",attachments:[]}};Xe(()=>s.visible,D=>{D&&s.postData&&(console.log("对话框打开,初始化表单数据:",s.postData),_())}),Xe(()=>s.postData,D=>{s.visible&&D&&(console.log("postData变化,更新表单数据:",D),_())},{deep:!0}),Xe(()=>s.loading,D=>{console.log("loading状态变化:",D)});const y=()=>{var D;(D=c.value)==null||D.click()},S=()=>{var D;(D=p.value)==null||D.click()},C=async D=>{var $,R,M;const U=D.target,O=($=U.files)==null?void 0:$[0];if(O){r.value=!0;try{const N=await Y.uploadImageAttachment(O);N.success&&N.attachmentId?(l.value.attachments.push({id:N.attachmentId,name:O.name,url:N.url||"",type:"image",size:O.size}),a.success("图片上传成功")):a.error(N.message||"图片上传失败")}catch(N){console.error("上传图片失败:",N),a.error(((M=(R=N.response)==null?void 0:R.data)==null?void 0:M.message)||N.message||"图片上传失败")}finally{r.value=!1,U&&(U.value="")}}},I=async D=>{var $,R,M;const U=D.target,O=($=U.files)==null?void 0:$[0];if(O){r.value=!0;try{const N=await Y.uploadFileAttachment(O);N.success&&N.attachmentId?(l.value.attachments.push({id:N.attachmentId,name:O.name,url:N.url||"",type:"file",size:O.size}),a.success("文件上传成功")):a.error(N.message||"文件上传失败")}catch(N){console.error("上传文件失败:",N),a.error(((M=(R=N.response)==null?void 0:R.data)==null?void 0:M.message)||N.message||"文件上传失败")}finally{r.value=!1,U&&(U.value="")}}},x=D=>{l.value.attachments=l.value.attachments.filter(U=>U.id!==D)},E=()=>{if(!v.value)return;const D=l.value.attachments.map(U=>U.id);o("confirm",{title:l.value.title.trim(),content:l.value.content.trim(),attachmentIds:D})},F=()=>{o("cancel")},W=async D=>{if(D.type==="image"){if(D.id){const U=await Y.getAttachmentImage(D.id);U?d.value=U:a.error("图片加载失败")}}else await re(D)},G=()=>{d.value&&(URL.revokeObjectURL(d.value),d.value=null)},re=async D=>{try{const U=await Y.getAttachmentDownloadUrl(D.id);if(U){const O=document.createElement("a");O.href=U,O.download=D.name,O.target="_blank",document.body.appendChild(O),O.click(),document.body.removeChild(O),a.success("文件下载已开始")}else if(D.url){const O=document.createElement("a");O.href=D.url,O.download=D.name,O.target="_blank",document.body.appendChild(O),O.click(),document.body.removeChild(O),a.success("文件下载已开始")}else a.error("无法获取下载链接")}catch(U){console.error("下载文件失败:",U),a.error("下载文件失败: "+(U.message||"未知错误"))}};return(D,U)=>(u(),f(ye,null,[(u(),Ne(Ot,{to:"body"},[m(gt,{name:"fade"},{default:lt(()=>{var O;return[e.visible?(u(),f("div",{key:0,class:"post-edit-dialog-overlay",onClick:Oe(F,["self"])},[n("div",g9,[n("div",y9,[U[2]||(U[2]=n("h3",{class:"dialog-title"},"编辑帖子",-1)),n("button",{class:"close-btn",onClick:F,type:"button"},[m(k,{icon:"mdi:close"})])]),n("div",b9,[s.loading?(u(),f("div",_9,[...U[3]||(U[3]=[n("div",{class:"spinner"},null,-1),n("p",null,"加载帖子详情中...",-1)])])):(u(),f("div",w9,[(O=s.postData)!=null&&O.author?(u(),f("div",k9,[U[4]||(U[4]=n("label",{class:"form-label"},"发帖人",-1)),n("div",$9,[n("div",C9,[m(Et,{"avatar-id":s.postData.author.avatar,"user-name":s.postData.author.name,width:36,height:36},null,8,["avatar-id","user-name"])]),n("div",I9,[n("div",S9,h(s.postData.author.name),1),s.postData.author.id?(u(),f("div",x9," ID: "+h(s.postData.author.id),1)):T("",!0)])])])):T("",!0),n("div",A9,[U[5]||(U[5]=n("label",{class:"form-label"},[$e("标题 "),n("span",{class:"required"},"*")],-1)),Ve(n("input",{"onUpdate:modelValue":U[0]||(U[0]=$=>l.value.title=$),type:"text",placeholder:"请输入帖子标题",class:"form-input",disabled:i.value},null,8,T9),[[Ke,l.value.title]])]),n("div",E9,[U[6]||(U[6]=n("label",{class:"form-label"},[$e("内容 "),n("span",{class:"required"},"*")],-1)),Ve(n("textarea",{"onUpdate:modelValue":U[1]||(U[1]=$=>l.value.content=$),placeholder:"请输入帖子内容",class:"form-textarea",rows:"15",disabled:i.value},null,8,R9),[[Ke,l.value.content]])]),n("div",U9,[U[8]||(U[8]=n("label",{class:"form-label"},"附件",-1)),l.value.attachments&&l.value.attachments.length>0?(u(),f("div",P9,[(u(!0),f(ye,null,Ee(l.value.attachments,$=>(u(),f("div",{key:$.id,class:Te(["attachment-item",{clickable:!0}])},[n("button",{class:"remove-attachment-btn-left",onClick:Oe(R=>x($.id),["stop"]),disabled:i.value,type:"button",title:"删除附件"},[m(k,{icon:"mdi:close"})],8,M9),n("div",{class:"attachment-info",onClick:Oe(R=>W($),["stop"])},[m(k,{icon:$.type==="image"?"mdi:image":"mdi:file",class:"attachment-icon"},null,8,["icon"]),n("span",L9,h($.name),1),n("span",N9,h(b($.size)),1),$.type==="image"?(u(),Ne(k,{key:0,icon:"mdi:eye-outline",class:"attachment-action-icon",title:"预览图片"})):(u(),Ne(k,{key:1,icon:"mdi:download",class:"attachment-action-icon",title:"下载文件"}))],8,D9)]))),128))])):(u(),f("div",O9,[...U[7]||(U[7]=[n("p",null,"暂无附件",-1)])]))]),n("div",F9,[U[12]||(U[12]=n("label",{class:"form-label"},"添加附件",-1)),n("div",V9,[n("input",{ref_key:"imageInputRef",ref:c,type:"file",accept:"image/*",onChange:C,class:"file-input",style:{display:"none"},disabled:i.value},null,40,B9),n("input",{ref_key:"fileInputRef",ref:p,type:"file",onChange:I,class:"file-input",style:{display:"none"},disabled:i.value},null,40,j9),n("button",{class:"btn btn-outline",onClick:y,disabled:i.value||r.value,type:"button"},[m(k,{icon:"mdi:image",class:"btn-icon"}),U[9]||(U[9]=$e(" 添加图片 ",-1))],8,q9),n("button",{class:"btn btn-outline",onClick:S,disabled:i.value||r.value,type:"button"},[m(k,{icon:"mdi:file",class:"btn-icon"}),U[10]||(U[10]=$e(" 添加文件 ",-1))],8,H9)]),r.value?(u(),f("div",z9,[...U[11]||(U[11]=[n("div",{class:"spinner-small"},null,-1),n("span",null,"上传中...",-1)])])):T("",!0)])]))]),n("div",W9,[n("button",{class:"btn btn-outline",onClick:F,disabled:i.value||r.value}," 取消 ",8,K9),n("button",{class:"btn btn-primary",onClick:E,disabled:!v.value||i.value||r.value},[i.value?(u(),f("span",Q9,"保存中...")):(u(),f("span",J9,"保存"))],8,G9)])])])):T("",!0)]}),_:1})])),m(Tn,{visible:!!d.value,"image-url":d.value,onClose:G},null,8,["visible","image-url"])],64))}}),Z9=We(X9,[["__scopeId","data-v-0145a47d"]]),Y9={class:"posts-management"},eE={class:"section-header"},tE={class:"header-actions"},sE={class:"table-container"},nE={key:0,class:"loading-state"},oE={key:1,class:"error-state"},aE={class:"data-table"},lE={key:0},iE={colspan:"8",class:"empty-state"},rE={class:"post-title-cell"},cE={class:"post-title"},uE={class:"action-buttons"},dE=["onClick"],fE=["onClick"],pE=["onClick"],vE=ze({__name:"PostsManagement",setup(e){const t=Gt(),{success:s,error:o}=_t(),a=gs(),l=js(),i=w(""),r=w("all"),c=w([]),p=w(!1),d=w(""),v=w(1),b=w(20),_=w(0),y=ge(()=>Math.ceil(_.value/b.value)),S=w(!1),C=w(null),I=w(!1),x=[{value:"all",label:"全部",icon:"fluent-color:text-bullet-list-square-sparkle-32"},{value:"reported",label:"已举报",icon:"fluent-color:flag-24"},{value:"deleted",label:"已删除",icon:"fluent-color:cloud-dismiss-48"}],E=ge(()=>c.value),F=L=>new Date(L).toLocaleString("zh-CN"),W=L=>{switch(L){case"reported":return"已举报";case"deleted":return"已删除";default:return"正常"}};let G=null;const re=()=>{G&&clearTimeout(G),G=setTimeout(()=>{v.value=1,D()},500)};Xe(r,()=>{v.value=1,D()});const D=async()=>{var L,X;p.value=!0,d.value="";try{const ne=await Y.getAdminPosts(v.value,b.value,i.value||void 0,r.value);ne.success&&ne.data?(c.value=ne.data.posts.map(ee=>{var we;return{id:ee.id,title:ee.title,author:typeof ee.author=="string"?ee.author:((we=ee.author)==null?void 0:we.name)||"-",forumName:ee.forumName||ee.bundleId||"-",bundleId:ee.bundleId,content:ee.content,attachments:ee.attachments||[],replyCount:ee.replyCount||0,publishTime:ee.publishTime,status:ee.status||"normal"}}),_.value=ne.data.total):d.value=ne.message||"加载帖子列表失败"}catch(ne){console.error("加载帖子列表失败:",ne),d.value=((X=(L=ne.response)==null?void 0:L.data)==null?void 0:X.message)||ne.message||"加载帖子列表失败"}finally{p.value=!1}},U=L=>{L.bundleId?t.push(`/discussion/${L.bundleId}/post/${L.id}`):t.push("/discussion")},O=async L=>{var X,ne;if(C.value={id:L.id,bundleId:L.bundleId,title:L.title,content:L.content||"",attachments:L.attachments||[],author:typeof L.author=="string"?{id:"",name:L.author}:L.author},S.value=!0,I.value=!0,L.bundleId)try{const ee=await Y.getForumPost(L.bundleId,L.id,1,1);ee&&(C.value={id:L.id,bundleId:L.bundleId,title:ee.title||L.title,content:ee.content||L.content||"",attachments:ee.attachments||[],author:ee.author||(typeof L.author=="string"?{id:"",name:L.author}:L.author)})}catch(ee){console.error("获取帖子详情失败:",ee),o("获取帖子详情失败: "+(((ne=(X=ee.response)==null?void 0:X.data)==null?void 0:ne.message)||ee.message||"未知错误"),3e3)}finally{I.value=!1}else I.value=!1},$=async L=>{var X,ne;if(C.value){l.show("保存中...");try{const ee=await Y.updateAdminPost(C.value.id,L.title,L.content,L.attachmentIds);ee.success?(s("编辑帖子成功",2e3),await D(),S.value=!1,C.value=null):o(ee.message||"编辑帖子失败",3e3)}catch(ee){o(((ne=(X=ee.response)==null?void 0:X.data)==null?void 0:ne.message)||ee.message||"编辑帖子失败",3e3)}finally{l.hide()}}},R=()=>{S.value=!1,C.value=null},M=async L=>{var ne,ee;if(await a.show({title:"删除帖子",message:`确定要删除帖子 "${L.title}" 吗?`,type:"danger",confirmText:"删除",cancelText:"取消"})){l.show("删除中...");try{const we=await Y.deleteAdminPost(L.id);we.success?(s("删除帖子成功",2e3),await D()):o(we.message||"删除帖子失败",3e3)}catch(we){o(((ee=(ne=we.response)==null?void 0:ne.data)==null?void 0:ee.message)||we.message||"删除帖子失败",3e3)}finally{l.hide()}}},N=L=>{v.value=L,D()};return nt(()=>{D()}),(L,X)=>(u(),f("div",Y9,[n("div",eE,[X[3]||(X[3]=n("h2",null,"帖子管理",-1)),n("div",tE,[Ve(n("input",{"onUpdate:modelValue":X[0]||(X[0]=ne=>i.value=ne),type:"text",placeholder:"搜索帖子...",class:"search-input",onInput:re},null,544),[[Ke,i.value]]),m(is,{modelValue:r.value,"onUpdate:modelValue":X[1]||(X[1]=ne=>r.value=ne),options:x},null,8,["modelValue"])])]),n("div",sE,[p.value?(u(),f("div",nE,[...X[4]||(X[4]=[n("div",{class:"spinner"},null,-1),n("p",null,"加载中...",-1)])])):d.value?(u(),f("div",oE,[m(k,{icon:"mdi:alert-circle"}),n("p",null,h(d.value),1),n("button",{class:"btn btn-primary",onClick:D},"重试")])):(u(),f(ye,{key:2},[n("table",aE,[X[6]||(X[6]=n("thead",null,[n("tr",null,[n("th",null,"ID"),n("th",null,"标题"),n("th",null,"作者"),n("th",null,"板块"),n("th",null,"回复数"),n("th",null,"发布时间"),n("th",null,"状态"),n("th",null,"操作")])],-1)),n("tbody",null,[E.value.length===0?(u(),f("tr",lE,[n("td",iE,[m(k,{icon:"mdi:file-document-outline"}),X[5]||(X[5]=n("p",null,"暂无帖子数据",-1))])])):T("",!0),(u(!0),f(ye,null,Ee(E.value,ne=>{var ee;return u(),f("tr",{key:ne.id},[n("td",null,h(ne.id),1),n("td",rE,[n("span",cE,h(ne.title),1)]),n("td",null,h(typeof ne.author=="string"?ne.author:((ee=ne.author)==null?void 0:ee.name)||"-"),1),n("td",null,h(ne.forumName),1),n("td",null,h(ne.replyCount),1),n("td",null,h(F(ne.publishTime)),1),n("td",null,[n("span",{class:Te(["status-badge",ne.status])},h(W(ne.status)),3)]),n("td",null,[n("div",uE,[n("button",{class:"action-btn view",onClick:we=>U(ne),title:"查看"},[m(k,{icon:"mdi:eye"})],8,dE),n("button",{class:"action-btn edit",onClick:we=>O(ne),title:"编辑"},[m(k,{icon:"mdi:pencil"})],8,fE),n("button",{class:"action-btn delete",onClick:we=>M(ne),title:"删除"},[m(k,{icon:"mdi:delete"})],8,pE)])])])}),128))])]),y.value>1?(u(),Ne(qs,{key:0,"current-page":v.value,"total-pages":y.value,total:_.value,onPageChange:N},null,8,["current-page","total-pages","total"])):T("",!0)],64))]),m(Z9,{visible:S.value,"onUpdate:visible":X[2]||(X[2]=ne=>S.value=ne),post:C.value,loading:I.value,onConfirm:$,onCancel:R},null,8,["visible","post","loading"])]))}}),mE=We(vE,[["__scopeId","data-v-e1a2bc1f"]]),hE={class:"violations-management"},gE={class:"section-header"},yE={class:"header-actions"},bE={class:"violations-list"},_E={key:0,class:"loading-state"},wE={key:1,class:"error-state"},kE={key:0,class:"empty-state"},$E={class:"violation-header"},CE={class:"violation-info"},IE={class:"violation-type"},SE={class:"violation-id"},xE={class:"violation-time"},AE={class:"violation-content"},TE={class:"violation-details"},EE={class:"detail-row"},RE={class:"detail-value"},UE={key:0,class:"detail-row"},PE={class:"detail-value"},ME={class:"detail-row"},DE={class:"report-types-tags"},LE={class:"detail-row"},NE={class:"detail-content"},OE={key:1,class:"detail-row"},FE={class:"detail-content"},VE={key:0,class:"violation-actions"},BE=["onClick"],jE=["onClick"],qE=ze({__name:"ViolationsManagement",setup(e,{expose:t}){const{success:s,error:o}=_t(),a=gs(),l=js(),i=w("all"),r=w([]),c=w(!1),p=w(""),d=w(1),v=w(20),b=w(0),_=ge(()=>Math.ceil(b.value/v.value)),y=[{value:"all",label:"全部",icon:"fluent-color:text-bullet-list-square-sparkle-32"},{value:"pending",label:"待处理",icon:"fluent-color:clock-24"},{value:"resolved",label:"已处理",icon:"fluent-color:checkmark-circle-24"},{value:"rejected",label:"已驳回",icon:"fluent-color:dismiss-circle-24"}],S=ge(()=>r.value),C=U=>new Date(U).toLocaleString("zh-CN"),I=U=>{switch(U){case"post":return"帖子";case"reply":return"回复";case"nestedReply":return"楼中楼";default:return U}},x=U=>{switch(U){case"pending":return"待处理";case"resolved":return"已处理";case"rejected":return"已驳回";default:return U}},E=U=>{var O;return U?typeof U=="string"?U:typeof U=="object"&&(U.name||U.id||((O=U._id)==null?void 0:O.toString()))||"-":"-"},F=U=>{var O;return!U||typeof U=="string"?null:typeof U=="object"&&(U.id||((O=U._id)==null?void 0:O.toString()))||null},W=()=>{window.dispatchEvent(new CustomEvent("system-notifications-changed"))};Xe(i,()=>{d.value=1,G()});const G=async()=>{var U,O;c.value=!0,p.value="";try{const $=await Y.getAdminViolations(d.value,v.value,i.value);$.success&&$.data?(r.value=$.data.violations.map(R=>({id:R.id,type:R.type,reportedUser:R.reportedUser||R.reporterNickname||"-",reportTypes:R.reportTypes||[],content:R.content||"-",comment:R.comment,reportTime:R.reportTime,status:R.status||"pending"})),b.value=$.data.total):p.value=$.message||"加载违规列表失败"}catch($){console.error("加载违规列表失败:",$),p.value=((O=(U=$.response)==null?void 0:U.data)==null?void 0:O.message)||$.message||"加载违规列表失败"}finally{c.value=!1}},re=async(U,O)=>{var M,N;const $=O==="resolved"?"确认违规":"驳回举报";if(await a.show({title:$,message:`确定要${$}吗?`,type:O==="resolved"?"warning":"info",confirmText:$,cancelText:"取消"})){l.show("处理中...");try{const L=await Y.resolveViolation(U.id,O);L.success?(s(`${$}成功`,2e3),await G(),W()):o(L.message||`${$}失败`,3e3)}catch(L){o(((N=(M=L.response)==null?void 0:M.data)==null?void 0:N.message)||L.message||`${$}失败`,3e3)}finally{l.hide()}}};t({loadPendingViolationsCount:async()=>{try{const U=await Y.getAdminViolations(1,1,"pending");if(U.success&&U.data)return U.data.total||0}catch{}return 0}});const D=U=>{d.value=U,G()};return nt(()=>{G()}),(U,O)=>(u(),f("div",hE,[n("div",gE,[O[1]||(O[1]=n("h2",null,"违规处理",-1)),n("div",yE,[m(is,{modelValue:i.value,"onUpdate:modelValue":O[0]||(O[0]=$=>i.value=$),options:y},null,8,["modelValue"])])]),n("div",bE,[c.value?(u(),f("div",_E,[...O[2]||(O[2]=[n("div",{class:"spinner"},null,-1),n("p",null,"加载中...",-1)])])):p.value?(u(),f("div",wE,[m(k,{icon:"mdi:alert-circle"}),n("p",null,h(p.value),1),n("button",{class:"btn btn-primary",onClick:G},"重试")])):(u(),f(ye,{key:2},[S.value.length===0?(u(),f("div",kE,[m(k,{icon:"mdi:shield-check"}),O[3]||(O[3]=n("p",null,"暂无违规记录",-1))])):T("",!0),(u(!0),f(ye,null,Ee(S.value,$=>(u(),f("div",{key:$.id,class:"violation-item"},[n("div",$E,[n("div",CE,[n("span",IE,h(I($.type)),1),n("span",SE,"#"+h($.id),1),n("span",xE,h(C($.reportTime)),1)]),n("span",{class:Te(["violation-status",$.status])},h(x($.status)),3)]),n("div",AE,[n("div",TE,[n("div",EE,[O[4]||(O[4]=n("span",{class:"detail-label"},"被举报人:",-1)),n("span",RE,h(E($.reportedUser)),1)]),F($.reportedUser)?(u(),f("div",UE,[O[5]||(O[5]=n("span",{class:"detail-label"},"用户ID:",-1)),n("span",PE,[n("code",null,h(F($.reportedUser)),1)])])):T("",!0),n("div",ME,[O[6]||(O[6]=n("span",{class:"detail-label"},"举报类型:",-1)),n("div",DE,[(u(!0),f(ye,null,Ee($.reportTypes,R=>(u(),f("span",{key:R,class:Te(["report-type-tag",se(md)(R)])},h(se(vd)(R)),3))),128))])]),n("div",LE,[O[7]||(O[7]=n("span",{class:"detail-label"},"被举报内容:",-1)),n("div",NE,h($.content),1)]),$.comment?(u(),f("div",OE,[O[8]||(O[8]=n("span",{class:"detail-label"},"补充说明:",-1)),n("div",FE,h($.comment),1)])):T("",!0)]),$.status==="pending"?(u(),f("div",VE,[n("button",{class:"btn btn-danger",onClick:R=>re($,"resolved")},[m(k,{icon:"mdi:check",class:"btn-icon"}),O[9]||(O[9]=$e(" 确认违规 ",-1))],8,BE),n("button",{class:"btn btn-secondary",onClick:R=>re($,"rejected")},[m(k,{icon:"mdi:close",class:"btn-icon"}),O[10]||(O[10]=$e(" 驳回举报 ",-1))],8,jE)])):T("",!0)])]))),128)),_.value>1?(u(),Ne(qs,{key:1,"current-page":d.value,"total-pages":_.value,total:b.value,onPageChange:D},null,8,["current-page","total-pages","total"])):T("",!0)],64))])]))}}),HE=We(qE,[["__scopeId","data-v-66b8b215"]]),zE={class:"input-dialog"},WE={class:"dialog-header"},KE={class:"dialog-title"},GE={class:"dialog-body"},QE={key:0,class:"dialog-message"},JE={key:0,class:"input-label"},XE=["onUpdate:modelValue","placeholder","required","rows"],ZE=["onUpdate:modelValue","type","placeholder","required"],YE={class:"dialog-actions"},eR=["disabled"],tR=ze({__name:"InputDialog",props:{visible:{type:Boolean},title:{},message:{},fields:{},confirmText:{default:"确认"},cancelText:{default:"取消"}},emits:["confirm","cancel"],setup(e,{emit:t}){const s=e,o=t,a=w({}),l=w([]),i=b=>b.map(_=>({value:_.value,label:_.label,icon:r(_.value)||""})),r=b=>({user:"mdi:account",admin:"mdi:shield-account",qiuchenly:"mdi:shield-crown",active:"mdi:check-circle",locked:"mdi:lock",banned:"mdi:ban"})[b]||"",c=ge(()=>s.fields.every(b=>{const _=a.value[b.key]||"";return b.required&&!_.trim()?!1:b.validator?b.validator(_):!0})),p=()=>{const b={};s.fields.forEach(_=>{b[_.key]=_.value!==void 0?_.value:_.defaultValue||""}),a.value=b};Xe(()=>s.visible,b=>{b&&(p(),pt(()=>{l.value[0]&&l.value[0].focus()}))}),Xe(()=>s.fields,()=>{s.visible&&p()},{deep:!0});const d=()=>{c.value&&o("confirm",{...a.value})},v=()=>{o("cancel")};return(b,_)=>(u(),Ne(Ot,{to:"body"},[m(gt,{name:"fade"},{default:lt(()=>[e.visible?(u(),f("div",{key:0,class:"input-dialog-overlay",onClick:Oe(v,["self"])},[n("div",zE,[n("div",WE,[n("h3",KE,h(e.title),1),n("button",{class:"close-btn",onClick:v,type:"button"},[m(k,{icon:"mdi:close"})])]),n("div",GE,[e.message?(u(),f("p",QE,h(e.message),1)):T("",!0),(u(!0),f(ye,null,Ee(e.fields,(y,S)=>(u(),f("div",{class:"input-group",key:S},[y.label?(u(),f("label",JE,h(y.label),1)):T("",!0),y.type==="select"?(u(),Ne(is,{key:1,modelValue:a.value[y.key],"onUpdate:modelValue":C=>a.value[y.key]=C,options:i(y.options||[]),placeholder:y.placeholder||"请选择",class:"input-select"},null,8,["modelValue","onUpdate:modelValue","options","placeholder"])):y.type==="textarea"?Ve((u(),f("textarea",{key:2,"onUpdate:modelValue":C=>a.value[y.key]=C,placeholder:y.placeholder,required:y.required,class:"input-field textarea-field",rows:y.rows||10,onKeyup:en(v,["esc"]),ref_for:!0,ref:C=>{C&&S===0&&(l.value[0]=C)}},null,40,XE)),[[Ke,a.value[y.key]]]):Ve((u(),f("input",{key:3,"onUpdate:modelValue":C=>a.value[y.key]=C,type:y.type||"text",placeholder:y.placeholder,required:y.required,class:"input-field",onKeyup:[en(d,["enter"]),en(v,["esc"])],ref_for:!0,ref:C=>{C&&S===0&&(l.value[0]=C)}},null,40,ZE)),[[Gp,a.value[y.key]]])]))),128))]),n("div",YE,[e.cancelText?(u(),f("button",{key:0,class:"btn btn-outline",onClick:v},h(e.cancelText),1)):T("",!0),n("button",{class:"btn btn-primary",onClick:d,disabled:!c.value},h(e.confirmText),9,eR)])])])):T("",!0)]),_:1})]))}}),yd=We(tR,[["__scopeId","data-v-87e827f6"]]),sR={class:"issues-management"},nR={class:"filter-select"},oR={class:"issues-list"},aR={key:0,class:"loading-state"},lR={key:1,class:"error-state"},iR={key:0,class:"empty-state"},rR={class:"violation-header"},cR={class:"violation-info"},uR={class:"violation-id"},dR={class:"violation-time"},fR={class:"violation-content"},pR={class:"violation-details"},vR={class:"detail-row"},mR={class:"detail-value-with-icon"},hR=["src","alt"],gR={key:1,class:"app-icon-placeholder-small"},yR={class:"detail-row"},bR={class:"detail-value"},_R={class:"detail-row"},wR={class:"detail-row"},kR={class:"detail-value"},$R={class:"detail-row"},CR={class:"detail-value"},IR={class:"detail-row"},SR={class:"detail-value"},xR={class:"detail-row"},AR={class:"detail-content"},TR={key:0,class:"detail-row"},ER={key:1,class:"detail-row"},RR={class:"attachments-list"},UR=["onClick"],PR={class:"attachment-name"},MR={key:2,class:"detail-row"},DR={class:"detail-content"},LR={key:3,class:"detail-row"},NR={class:"detail-value"},OR={key:0,class:"violation-actions"},FR=["onClick"],VR=["onClick"],BR=ze({__name:"IssuesManagement",setup(e){const{success:t,error:s}=_t(),o=js(),a=w("all"),l=w([]),i=w(!1),r=w(""),c=w(1),p=w(20),d=w(0),v=ge(()=>Math.ceil(d.value/p.value)),b=w(!1),_=w(null),y=w(""),S=w("resolved"),C=w(new Map),I=w(new Map),x=w([]),E=w(0),F=w(!1),W=[{value:"all",label:"全部",icon:"fluent-color:text-bullet-list-square-sparkle-32"},{value:"pending",label:"待处理",icon:"fluent-color:clock-24"},{value:"resolved",label:"已解决",icon:"fluent-color:checkmark-circle-24"},{value:"rejected",label:"已驳回",icon:"fluent-color:dismiss-circle-24"}],G=ge(()=>l.value),re=ue=>new Date(ue).toLocaleString("zh-CN"),D=ue=>{switch(ue){case"crash":return"打开崩溃";case"crack_failed":return"破解失效";case"update_request":return"请求更新";case"unexpected_error":return"意外错误";default:return ue}},U=ue=>{switch(ue){case"pending":return"待处理";case"resolved":return"已解决";case"rejected":return"已驳回";default:return ue}},O=ue=>{var Z,q;return typeof ue=="string"?ue:ue&&typeof ue=="object"?((Z=ue._id)==null?void 0:Z.toString())||((q=ue.id)==null?void 0:q.toString())||ue.toString():String(ue)},$=ue=>C.value.get(ue),R=ue=>{const Z=I.value.get(ue.id);if(!Z)return[];const q=[];if(ue.screenshotAttachmentIds&&ue.screenshotAttachmentIds.length>0)for(const ie of ue.screenshotAttachmentIds){const Pe=O(ie),je=Z.get(Pe);je&&q.push(je)}return q},M=(ue,Z)=>{const q=R(ue);x.value=q,E.value=Z,F.value=!0},N=()=>{F.value=!1,x.value=[]},L=async ue=>{try{const Z=O(ue),q=await Y.getAttachment(Z);if(!q){s("获取文件信息失败",2e3);return}const ie=await Y.getAttachmentDownloadUrl(Z);if(!ie){s("获取下载链接失败",2e3);return}const Pe=document.createElement("a");Pe.href=ie,Pe.download=q.name,Pe.target="_blank",document.body.appendChild(Pe),Pe.click(),document.body.removeChild(Pe)}catch(Z){console.error("下载文件失败:",Z),s("下载文件失败",2e3)}};Xe(a,()=>{c.value=1,X()});const X=async()=>{var ue,Z;i.value=!0,r.value="";try{const q=await Y.getAdminIssues(c.value,p.value,a.value);if(q.success&&q.data){l.value=q.data.issues||[],d.value=q.data.total||0;for(const ie of l.value){if(ie.appIconId&&!C.value.has(ie.id))try{const Pe=await Y.getImage(ie.appIconId);C.value.set(ie.id,Pe)}catch(Pe){console.warn(`加载问题 ${ie.id} 的图标失败:`,Pe)}if(ie.screenshotAttachmentIds&&ie.screenshotAttachmentIds.length>0){const Pe=new Map;for(const je of ie.screenshotAttachmentIds){const le=O(je);try{const xe=await Y.getAttachmentImage(le);xe&&Pe.set(le,xe)}catch(xe){console.warn(`加载问题 ${ie.id} 的截图 ${le} 失败:`,xe)}}Pe.size>0&&I.value.set(ie.id,Pe)}}}else r.value=q.message||"加载问题列表失败"}catch(q){console.error("加载问题列表失败:",q),r.value=((Z=(ue=q.response)==null?void 0:ue.data)==null?void 0:Z.message)||q.message||"加载问题列表失败"}finally{i.value=!1}},ne=(ue,Z)=>{_.value=ue,S.value=Z,y.value="",b.value=!0},ee=async ue=>{var Z,q;if(_.value){y.value=ue.resolutionNote||"",o.show("处理中...");try{const ie=await Y.resolveIssue(_.value.id,S.value,y.value.trim()||void 0);ie.success?(t(`问题已${S.value==="resolved"?"标记为已解决":"驳回"}`,2e3),b.value=!1,_.value=null,y.value="",await X()):s(ie.message||"处理问题失败",3e3)}catch(ie){s(((q=(Z=ie.response)==null?void 0:Z.data)==null?void 0:q.message)||ie.message||"处理问题失败",3e3)}finally{o.hide()}}},we=()=>{b.value=!1,_.value=null,y.value=""},de=ue=>{c.value=ue,X()};return nt(()=>{X()}),(ue,Z)=>(u(),f("div",sR,[n("div",nR,[m(is,{modelValue:a.value,"onUpdate:modelValue":Z[0]||(Z[0]=q=>a.value=q),options:W},null,8,["modelValue"])]),n("div",oR,[i.value?(u(),f("div",aR,[...Z[1]||(Z[1]=[n("div",{class:"spinner"},null,-1),n("p",null,"加载中...",-1)])])):r.value?(u(),f("div",lR,[m(k,{icon:"mdi:alert-circle"}),n("p",null,h(r.value),1),n("button",{class:"btn btn-primary",onClick:X},"重试")])):(u(),f(ye,{key:2},[G.value.length===0?(u(),f("div",iR,[m(k,{icon:"mdi:bug-check"}),Z[2]||(Z[2]=n("p",null,"暂无问题报告",-1))])):T("",!0),(u(!0),f(ye,null,Ee(G.value,q=>(u(),f("div",{key:q.id,class:"violation-item"},[n("div",rR,[n("div",cR,[n("span",{class:Te(["violation-type",`issue-type-${q.errorType}`])},h(D(q.errorType)),3),n("span",uR,"#"+h(q.id),1),n("span",dR,h(re(q.submitTime)),1)]),n("span",{class:Te(["violation-status",q.status])},h(U(q.status)),3)]),n("div",fR,[n("div",pR,[n("div",vR,[Z[3]||(Z[3]=n("span",{class:"detail-label"},"应用:",-1)),n("div",mR,[q.appIconId&&$(q.id)?(u(),f("img",{key:0,src:$(q.id),alt:q.appName,class:"app-icon-small"},null,8,hR)):(u(),f("div",gR,h(q.appName.charAt(0).toUpperCase()),1)),n("span",null,h(q.appName)+" ("+h(q.appVersion)+")",1)])]),n("div",yR,[Z[4]||(Z[4]=n("span",{class:"detail-label"},"Bundle ID:",-1)),n("span",bR,h(q.bundleId),1)]),n("div",_R,[Z[5]||(Z[5]=n("span",{class:"detail-label"},"问题类型:",-1)),n("span",{class:Te(["detail-value issue-type-badge",`issue-type-${q.errorType}`])},h(D(q.errorType)),3)]),n("div",wR,[Z[6]||(Z[6]=n("span",{class:"detail-label"},"系统信息:",-1)),n("span",kR,h(q.osVersion)+" ("+h(q.architecture)+")",1)]),n("div",$R,[Z[7]||(Z[7]=n("span",{class:"detail-label"},"提交用户:",-1)),n("span",CR,h(q.userName),1)]),n("div",IR,[Z[8]||(Z[8]=n("span",{class:"detail-label"},"提交时间:",-1)),n("span",SR,h(re(q.submitTime)),1)]),n("div",xR,[Z[9]||(Z[9]=n("span",{class:"detail-label"},"问题描述:",-1)),n("div",AR,h(q.content),1)]),q.screenshotAttachmentIds&&q.screenshotAttachmentIds.length>0?(u(),f("div",TR,[Z[10]||(Z[10]=n("span",{class:"detail-label"},"截图:",-1)),m(mn,{images:R(q),"show-index":!1,columns:4,"max-width":80,onImageClick:ie=>M(q,ie)},null,8,["images","onImageClick"])])):T("",!0),q.fileAttachmentIds&&q.fileAttachmentIds.length>0?(u(),f("div",ER,[Z[11]||(Z[11]=n("span",{class:"detail-label"},"文件:",-1)),n("div",RR,[(u(!0),f(ye,null,Ee(q.fileAttachmentIds,(ie,Pe)=>(u(),f("div",{key:`file-${Pe}`,class:"attachment-item",onClick:je=>L(ie)},[m(k,{icon:"mdi:file",class:"attachment-icon"}),n("span",PR,"文件 "+h(Pe+1),1),m(k,{icon:"mdi:download",class:"attachment-action-icon",title:"下载"})],8,UR))),128))])])):T("",!0),q.resolutionNote?(u(),f("div",MR,[Z[12]||(Z[12]=n("span",{class:"detail-label"},"处理说明:",-1)),n("div",DR,h(q.resolutionNote),1)])):T("",!0),q.processedAt?(u(),f("div",LR,[Z[13]||(Z[13]=n("span",{class:"detail-label"},"处理时间:",-1)),n("span",NR,h(re(q.processedAt)),1)])):T("",!0)]),q.status==="pending"?(u(),f("div",OR,[n("button",{class:"btn btn-primary",onClick:ie=>ne(q,"resolved")},[m(k,{icon:"mdi:check",class:"btn-icon"}),Z[14]||(Z[14]=$e(" 标记为已解决 ",-1))],8,FR),n("button",{class:"btn btn-secondary",onClick:ie=>ne(q,"rejected")},[m(k,{icon:"mdi:close",class:"btn-icon"}),Z[15]||(Z[15]=$e(" 驳回 ",-1))],8,VR)])):T("",!0)])]))),128)),v.value>1?(u(),Ne(qs,{key:1,"current-page":c.value,"total-pages":v.value,total:d.value,onPageChange:de},null,8,["current-page","total-pages","total"])):T("",!0)],64))]),m(yd,{visible:b.value,title:S.value==="resolved"?"标记为已解决":"驳回问题",message:`确定要${S.value==="resolved"?"标记为已解决":"驳回"}这个问题吗?`,fields:[{key:"resolutionNote",label:"处理说明",placeholder:"请输入处理说明(可选)",type:"textarea",required:!1,defaultValue:y.value}],"confirm-text":"确认","cancel-text":"取消",onConfirm:ee,onCancel:we},null,8,["visible","title","message","fields"]),m(Tn,{visible:F.value,images:x.value,"initial-index":E.value,onClose:N},null,8,["visible","images","initial-index"])]))}}),jR=We(BR,[["__scopeId","data-v-555d1adb"]]),qR={class:"forums-management"},HR={key:0,class:"sub-tab-content"},zR={class:"section-header"},WR={class:"header-actions"},KR={class:"table-container"},GR={class:"data-table"},QR={class:"forum-name-cell"},JR=["src","alt"],XR={key:1,class:"forum-icon-placeholder"},ZR={class:"bundle-id"},YR={class:"action-buttons"},eU=["onClick"],tU=["onClick"],sU={key:0,class:"empty-state"},nU={key:1,class:"sub-tab-content"},oU={class:"section-header"},aU={class:"header-info"},lU={class:"header-actions"},iU={class:"table-container"},rU={class:"data-table"},cU={class:"forum-name-cell"},uU=["src","alt"],dU={key:1,class:"forum-icon-placeholder"},fU={class:"bundle-id"},pU={class:"action-buttons"},vU=["onClick"],mU=["onClick"],hU={key:0,class:"empty-state"},gU=ze({__name:"ForumsManagement",setup(e){const{success:t,error:s}=_t(),o=w(""),a=w("all"),l=w([]),i=w([]),r=w("forums"),c=w(0),p=[{value:"all",label:"全部",icon:"fluent-color:text-bullet-list-square-sparkle-32"},{value:"enabled",label:"已启用",icon:"fluent-color:checkmark-circle-24"},{value:"disabled",label:"已禁用",icon:"fluent-color:dismiss-circle-24"}],d=ge(()=>{let U=[...l.value];if(o.value){const O=o.value.toLowerCase();U=U.filter($=>$.appName.toLowerCase().includes(O)||$.bundleId.toLowerCase().includes(O))}return a.value!=="all"&&(U=U.filter(O=>a.value==="enabled"&&O.enabled||a.value==="disabled"&&!O.enabled)),U}),v=ge(()=>i.value.filter(U=>U.status===ss.PENDING)),b=ge(()=>[{id:"forums",label:"讨论区列表",icon:"fluent-color:comment-multiple-28",badge:null},{id:"requests",label:"申请开通",icon:"fluent-color:clipboard-text-edit-32",badge:v.value.length>0?String(v.value.length):null}]),_=U=>new Date(U).toLocaleString("zh-CN"),y=U=>Y.getAppIconUrl(U),S=U=>{switch(U){case ss.PENDING:return"待处理";case ss.APPROVED:return"已批准";case ss.REJECTED:return"已拒绝";default:return U}},C=()=>{window.dispatchEvent(new CustomEvent("system-notifications-changed"))},I=async U=>{var $,R;const O=l.value.find(M=>M.bundleId===U);if(O)try{const M=await Y.disableForum(U);M.success?(O.enabled=!1,O.updatedAt=new Date().toISOString(),t("禁用讨论区成功",2e3),console.log("禁用讨论区:",U)):s(M.message||"禁用讨论区失败",3e3)}catch(M){const N=((R=($=M.response)==null?void 0:$.data)==null?void 0:R.message)||M.message||"禁用讨论区失败";s(N,3e3),console.error("禁用讨论区异常:",M)}},x=async U=>{var $,R;const O=l.value.find(M=>M.bundleId===U);if(O)try{const M=await Y.enableForum(U);M.success?(O.enabled=!0,O.updatedAt=new Date().toISOString(),t("启用讨论区成功",2e3),console.log("启用讨论区:",U)):s(M.message||"启用讨论区失败",3e3)}catch(M){const N=((R=($=M.response)==null?void 0:$.data)==null?void 0:R.message)||M.message||"启用讨论区失败";s(N,3e3),console.error("启用讨论区异常:",M)}},E=async()=>{try{const U=await Y.getForumPermissions();if(U&&U.length>0)l.value=U;else{const $=(await Y.getApps()).filter(R=>R.path&&R.path.length>0);l.value=$.map(R=>({bundleId:R.bundleId,appName:R.name,enabled:!1,postCount:0,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}))}}catch(U){console.error("加载讨论区列表失败:",U),l.value=[]}},F=async()=>{try{const U=await Y.getForumRequests("all",1,1e3);i.value=U.requests,c.value=U.total}catch(U){console.error("加载申请列表失败:",U),i.value=[],c.value=0}},W=async U=>{var $,R;const O=i.value.find(M=>M.id===U);if(O)try{const M=await Y.processForumRequest(U,"approve");if(M.success){O.status=ss.APPROVED;const N=l.value.find(L=>L.bundleId===O.bundleId);N?(N.enabled=!0,N.updatedAt=new Date().toISOString()):l.value.push({bundleId:O.bundleId,appName:O.appName,enabled:!0,postCount:0,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}),await F(),C(),t("批准申请成功",2e3),console.log("批准申请:",U)}else s(M.message||"批准申请失败",3e3)}catch(M){const N=((R=($=M.response)==null?void 0:$.data)==null?void 0:R.message)||M.message||"批准申请失败";s(N,3e3),console.error("批准申请异常:",M)}},G=async(U,O)=>{var R,M;const $=i.value.find(N=>N.id===U);if($)try{const N=O||"该应用暂不支持讨论区功能",L=await Y.processForumRequest(U,"reject",N);L.success?($.status=ss.REJECTED,await F(),C(),t("拒绝申请成功",2e3),console.log("拒绝申请:",U)):s(L.message||"拒绝申请失败",3e3)}catch(N){const L=((M=(R=N.response)==null?void 0:R.data)==null?void 0:M.message)||N.message||"拒绝申请失败";s(L,3e3),console.error("拒绝申请异常:",N)}},re=async()=>{for(const U of v.value)await W(U.id)},D=()=>{F()};return nt(()=>{E(),F(),window.addEventListener("forum-requests-changed",D)}),At(()=>{window.removeEventListener("forum-requests-changed",D)}),(U,O)=>(u(),f("div",qR,[m(Ta,{tabs:b.value,activeTab:r.value,"onUpdate:activeTab":O[0]||(O[0]=$=>r.value=$)},null,8,["tabs","activeTab"]),r.value==="forums"?(u(),f("div",HR,[n("div",zR,[n("div",WR,[Ve(n("input",{"onUpdate:modelValue":O[1]||(O[1]=$=>o.value=$),type:"text",placeholder:"搜索讨论区...",class:"search-input"},null,512),[[Ke,o.value]]),m(is,{modelValue:a.value,"onUpdate:modelValue":O[2]||(O[2]=$=>a.value=$),options:p},null,8,["modelValue"])])]),n("div",KR,[n("table",GR,[O[3]||(O[3]=n("thead",null,[n("tr",null,[n("th",null,"应用名称"),n("th",null,"Bundle ID"),n("th",null,"帖子数"),n("th",null,"最后发帖时间"),n("th",null,"状态"),n("th",null,"操作")])],-1)),n("tbody",null,[(u(!0),f(ye,null,Ee(d.value,$=>(u(),f("tr",{key:$.bundleId},[n("td",null,[n("div",QR,[y($.bundleId)?(u(),f("img",{key:0,src:y($.bundleId),alt:$.appName,class:"forum-icon"},null,8,JR)):(u(),f("div",XR,h($.appName.charAt(0).toUpperCase()),1)),n("span",null,h($.appName),1)])]),n("td",null,[n("code",ZR,h($.bundleId),1)]),n("td",null,h($.postCount),1),n("td",null,h($.lastPostTime?_($.lastPostTime):"-"),1),n("td",null,[n("span",{class:Te(["status-badge",$.enabled?"enabled":"disabled"])},h($.enabled?"已启用":"已禁用"),3)]),n("td",null,[n("div",YR,[$.enabled?(u(),f("button",{key:0,class:"action-btn ban",onClick:R=>I($.bundleId),title:"禁用讨论区"},[m(k,{icon:"mdi:ban"})],8,eU)):(u(),f("button",{key:1,class:"action-btn enable",onClick:R=>x($.bundleId),title:"启用讨论区"},[m(k,{icon:"mdi:check-circle"})],8,tU))])])]))),128))])]),d.value.length===0?(u(),f("div",sU,[m(k,{icon:"mdi:forum-outline",class:"empty-icon"}),O[4]||(O[4]=n("p",null,"没有找到讨论区",-1))])):T("",!0)])])):T("",!0),r.value==="requests"?(u(),f("div",nU,[n("div",oU,[n("div",aU,[n("span",null,"共 "+h(c.value)+" 条申请记录",1)]),n("div",lU,[v.value.length>0?(u(),f("button",{key:0,class:"btn btn-primary",onClick:re},[m(k,{icon:"mdi:check-all",class:"btn-icon"}),$e(" 一键批准全部 ("+h(v.value.length)+") ",1)])):T("",!0)])]),n("div",iU,[n("table",rU,[O[5]||(O[5]=n("thead",null,[n("tr",null,[n("th",null,"应用名称"),n("th",null,"Bundle ID"),n("th",null,"申请人"),n("th",null,"申请时间"),n("th",null,"状态"),n("th",null,"操作")])],-1)),n("tbody",null,[(u(!0),f(ye,null,Ee(i.value,$=>(u(),f("tr",{key:$.id},[n("td",null,[n("div",cU,[y($.bundleId)?(u(),f("img",{key:0,src:y($.bundleId),alt:$.appName,class:"forum-icon"},null,8,uU)):(u(),f("div",dU,h($.appName.charAt(0).toUpperCase()),1)),n("span",null,h($.appName),1)])]),n("td",null,[n("code",fU,h($.bundleId),1)]),n("td",null,h($.requesterName),1),n("td",null,h(_($.requestTime)),1),n("td",null,[n("span",{class:Te(["status-badge",$.status])},h(S($.status)),3)]),n("td",null,[n("div",pU,[$.status===se(ss).PENDING?(u(),f("button",{key:0,class:"action-btn enable",onClick:R=>W($.id),title:"批准申请"},[m(k,{icon:"mdi:check"})],8,vU)):T("",!0),$.status===se(ss).PENDING?(u(),f("button",{key:1,class:"action-btn delete",onClick:R=>G($.id),title:"拒绝申请"},[m(k,{icon:"mdi:close"})],8,mU)):T("",!0)])])]))),128))])]),i.value.length===0?(u(),f("div",hU,[m(k,{icon:"mdi:file-document-outline",class:"empty-icon"}),O[6]||(O[6]=n("p",null,"暂无申请记录",-1))])):T("",!0)])])):T("",!0)]))}}),yU=We(gU,[["__scopeId","data-v-16bb48f7"]]),bU={class:"apps-management"},_U={class:"section-header"},wU={class:"header-actions"},kU={class:"table-container"},$U={key:0,class:"loading-state"},CU={key:1,class:"error-state"},IU={class:"data-table"},SU={key:0},xU={colspan:"5",class:"empty-state"},AU={class:"action-buttons"},TU=["onClick"],EU=ze({__name:"AppsManagement",setup(e){const{isQiuChenLy:t}=An(),s=hd(),o=w(""),a=w([]),l=w(!1),i=w(""),r=w(1),c=w(20),p=w(0),d=ge(()=>Math.ceil(p.value/c.value)),v=ge(()=>{if(!o.value)return a.value;const I=o.value.toLowerCase();return a.value.filter(x=>x.bundleId&&x.bundleId.toLowerCase().includes(I)||x.appName&&x.appName.toLowerCase().includes(I))});let b=null;const _=()=>{b&&clearTimeout(b),b=setTimeout(()=>{r.value=1,y()},500)},y=async()=>{if(t.value){l.value=!0,i.value="";try{const I=await Y.getAppInfoAll(r.value,c.value);if(I.success&&I.data){let x=[];Array.isArray(I.data)?x=I.data:I.data.list&&Array.isArray(I.data.list)?x=I.data.list:I.data.apps&&Array.isArray(I.data.apps)&&(x=I.data.apps),a.value=x;const E=I.data.total||I.data.count||x.length;p.value=E}else i.value=I.message||"加载App列表失败"}catch(I){i.value=I.message||"加载App列表失败"}finally{l.value=!1}}},S=I=>{const x=[`Bundle ID: ${I.bundleId}`,`名称: ${I.appName||"未设置"}`,`版本: ${I.appVersion||"未设置"}`,`描述: ${I.description||"无描述"}`].join(`
|
||
`);s.show("应用详情",x)},C=I=>{r.value=I,y()};return nt(()=>{y()}),(I,x)=>(u(),f("div",bU,[n("div",_U,[x[2]||(x[2]=n("h2",null,"App管理",-1)),n("div",wU,[Ve(n("input",{"onUpdate:modelValue":x[0]||(x[0]=E=>o.value=E),type:"text",placeholder:"搜索Bundle ID或应用名称...",class:"search-input",onInput:_},null,544),[[Ke,o.value]]),n("button",{class:"btn btn-primary",onClick:y},[m(k,{icon:"mdi:refresh",class:"btn-icon"}),x[1]||(x[1]=$e(" 刷新 ",-1))])])]),n("div",kU,[l.value?(u(),f("div",$U,[...x[3]||(x[3]=[n("div",{class:"spinner"},null,-1),n("p",null,"加载中...",-1)])])):i.value?(u(),f("div",CU,[m(k,{icon:"mdi:alert-circle"}),n("p",null,h(i.value),1),n("button",{class:"btn btn-primary",onClick:y},"重试")])):(u(),f(ye,{key:2},[n("table",IU,[x[5]||(x[5]=n("thead",null,[n("tr",null,[n("th",null,"Bundle ID"),n("th",null,"应用名称"),n("th",null,"版本"),n("th",null,"描述"),n("th",null,"操作")])],-1)),n("tbody",null,[v.value.length===0?(u(),f("tr",SU,[n("td",xU,[m(k,{icon:"mdi:apps"}),x[4]||(x[4]=n("p",null,"暂无应用数据",-1))])])):T("",!0),(u(!0),f(ye,null,Ee(v.value,E=>(u(),f("tr",{key:E._id||E.id||E.bundleId},[n("td",null,h(E.bundleId),1),n("td",null,h(E.appName||"-"),1),n("td",null,h(E.appVersion||"-"),1),n("td",null,h((E.description||"").substring(0,50))+h(E.description&&E.description.length>50?"...":""),1),n("td",null,[n("div",AU,[n("button",{class:"action-btn view",onClick:F=>S(E),title:"查看详情"},[m(k,{icon:"mdi:eye"})],8,TU)])])]))),128))])]),d.value>1?(u(),Ne(qs,{key:0,"current-page":r.value,"total-pages":d.value,total:p.value,onPageChange:C},null,8,["current-page","total-pages","total"])):T("",!0)],64))])]))}}),RU=We(EU,[["__scopeId","data-v-6a3b201d"]]),UU=["checked","disabled"],PU={class:"checkbox-box"},MU={key:0,class:"checkbox-icon",viewBox:"0 0 12 12",fill:"none",xmlns:"http://www.w3.org/2000/svg"},DU={class:"checkbox-label-text"},LU=ze({__name:"CustomCheckbox",props:{modelValue:{type:Boolean},label:{},disabled:{type:Boolean}},emits:["update:modelValue"],setup(e){return(t,s)=>(u(),f("label",{class:Te(["custom-checkbox",{checked:e.modelValue,disabled:e.disabled}])},[n("input",{type:"checkbox",checked:e.modelValue,disabled:e.disabled,onChange:s[0]||(s[0]=o=>t.$emit("update:modelValue",o.target.checked)),class:"checkbox-input"},null,40,UU),n("span",PU,[e.modelValue?(u(),f("svg",MU,[...s[1]||(s[1]=[n("path",{d:"M10 3L4.5 8.5L2 6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])):T("",!0)]),n("span",DU,h(e.label),1)],2))}}),bd=We(LU,[["__scopeId","data-v-91b6be7d"]]),NU={class:"files-management"},OU={key:0,class:"sub-tab-content"},FU={class:"section-header"},VU={class:"header-actions"},BU={class:"table-container"},jU={key:0,class:"loading-state"},qU={key:1,class:"error-state"},HU={key:2,class:"data-table"},zU={key:0},WU={colspan:"5",class:"empty-state"},KU={class:"actions"},GU=["onClick"],QU={key:1,class:"sub-tab-content"},JU={class:"section-header"},XU={class:"header-actions"},ZU={class:"table-container"},YU={key:0,class:"loading-state"},eP={key:1,class:"error-state"},tP={class:"data-table"},sP={key:0},nP={colspan:"6",class:"empty-state"},oP={key:0,class:"beta-tag"},aP={key:1,class:"text-muted"},lP={class:"actions"},iP=["onClick"],rP={class:"modal-dialog"},cP={class:"modal-header"},uP={class:"modal-content"},dP={class:"form-group autocomplete-group"},fP={class:"autocomplete-wrapper"},pP=["onClick"],vP=["src","alt","onError","onLoad"],mP={key:1,class:"app-icon-placeholder"},hP={class:"app-content"},gP={class:"app-name"},yP={class:"app-info"},bP={class:"bundle-id"},_P={key:0,class:"app-version"},wP={class:"app-detail-header"},kP=["src","alt"],$P={key:1,class:"app-icon-placeholder-large"},CP={class:"app-detail-content"},IP={class:"app-detail-name"},SP={class:"app-detail-bundle-id"},xP={class:"form-group"},AP={class:"form-group checkbox-group"},TP={class:"form-group file-info-group"},EP=["value"],RP={class:"modal-footer"},UP=["disabled"],PP=ze({__name:"FilesManagement",setup(e){const{success:t,error:s}=_t(),o=gs(),a=w("files"),l=ge(()=>[{id:"files",label:"文件列表",icon:"mdi:file",badge:null},{id:"binds",label:"文件绑定",icon:"mdi:link",badge:null}]),i=w([]),r=w(!1),c=w(""),p=w([]),d=w(!1),v=w(""),b=w(1),_=w(20),y=w(1),S=w(!1),C=w(null),I=w({bundleId:"",version:"",beta:!1}),x=w(!1),E=w([]),F=w(!1),W=w(null),G=w(null),re=w(null),D=w(null),U=w({}),O=K=>new Date(K).toLocaleString("zh-CN"),$=K=>{if(!K)return"0 B";const ae=1024,Fe=["B","KB","MB","GB"],P=Math.floor(Math.log(K)/Math.log(ae));return Math.round(K/Math.pow(ae,P)*100)/100+" "+Fe[P]},R=K=>{var P;if(!K)return"-";const ae=(P=K.split(".").pop())==null?void 0:P.toLowerCase();return{dmg:"DMG镜像",pkg:"安装包",zip:"压缩包",tar:"压缩包",gz:"压缩包",app:"应用程序"}[ae||""]||(ae==null?void 0:ae.toUpperCase())||"未知"},M=async()=>{r.value=!0,c.value="";try{const K=await Y.getFiles();K.success&&K.data?i.value=Array.isArray(K.data)?K.data:[]:c.value=K.message||"加载文件列表失败"}catch(K){c.value=K.message||"加载文件列表失败"}finally{r.value=!1}},N=async()=>{d.value=!0,v.value="";try{const K=await Y.getBinds(b.value,_.value);K.success&&K.data?(p.value=K.data.binds||K.data.list||K.data||[],y.value=Math.ceil((K.data.total||0)/_.value)):v.value=K.message||"加载绑定列表失败"}catch(K){v.value=K.message||"加载绑定列表失败"}finally{d.value=!1}},L=K=>{b.value=K,N()},X=async()=>{try{const K=await Y.getAppInfoAll(1,1e3);if(K.success&&K.data){let ae=[];Array.isArray(K.data)?ae=K.data:K.data.list&&Array.isArray(K.data.list)?ae=K.data.list:K.data.apps&&Array.isArray(K.data.apps)&&(ae=K.data.apps),E.value=ae}}catch(K){console.error("加载应用列表失败:",K)}},ne=async K=>{C.value=K,I.value={bundleId:"",version:"",beta:!1},D.value=null,E.value.length===0&&await X(),S.value=!0},ee=ge(()=>{const K=I.value.bundleId.trim().toLowerCase();return K?E.value.filter(ae=>{const Fe=(ae.bundleId||"").toLowerCase(),P=(ae.appName||"").toLowerCase();return Fe.includes(K)||P.includes(K)}):E.value}),we=()=>{if(!W.value){re.value=null;return}pt(()=>{if(!W.value)return;const K=W.value.getBoundingClientRect(),ae=Math.min(ee.value.length*64+8,300),Fe=window.innerHeight-K.bottom;let P=K.bottom+4,g=K.left,A=K.width;Fe<ae&&K.top>ae&&(P=K.top-ae-4),g+A>window.innerWidth-16&&(g=window.innerWidth-A-16),g<16&&(g=16),re.value={top:`${P}px`,left:`${g}px`,width:`${A}px`}})},de=()=>{F.value=!0,we();const K=E.value.find(ae=>ae.bundleId===I.value.bundleId);K&&K.appVersion&&(I.value.version=K.appVersion)},ue=()=>{F.value=!0,we()},Z=()=>{setTimeout(()=>{F.value=!1},200)};Xe(F,K=>{K?(we(),window.addEventListener("scroll",we,!0),window.addEventListener("resize",we)):(window.removeEventListener("scroll",we,!0),window.removeEventListener("resize",we))}),Xe(ee,()=>{F.value&&we()}),Xe(S,K=>{K||(I.value={bundleId:"",version:"",beta:!1},D.value=null)});const q=K=>{I.value.bundleId=K.bundleId,D.value=K,K&&K.bundleId&&(U.value[K.bundleId]=!1),K.appVersion&&(I.value.version=K.appVersion),F.value=!1};Xe(()=>I.value.bundleId,K=>{if(K&&E.value.length>0){const ae=E.value.find(Fe=>Fe.bundleId===K);ae?(D.value=ae,ae.bundleId&&(U.value[ae.bundleId]=!1),ae.appVersion&&!I.value.version&&(I.value.version=ae.appVersion)):D.value=null}else D.value=null});const ie=K=>K.hasIcon!==!1?Y.getAppIconUrl(K.bundleId):null,Pe=K=>{K&&K.bundleId&&(U.value[K.bundleId]=!1)},je=(K,ae)=>{ae&&ae.bundleId&&(U.value[ae.bundleId]=!0)},le=async()=>{var K;if(!I.value.bundleId||!I.value.version){s("请填写包名和版本",2e3);return}if(!((K=C.value)!=null&&K.name)){s("文件信息不完整",2e3);return}x.value=!0;try{const ae=await Y.bindFile({bundleId:I.value.bundleId,version:I.value.version,fileId:C.value.name,beta:I.value.beta});ae.success?(t("文件绑定成功",2e3),S.value=!1,I.value={bundleId:"",version:"",beta:!1},D.value=null,N()):s(ae.message||"绑定失败",3e3)}catch(ae){s(ae.message||"绑定失败",3e3)}finally{x.value=!1}},xe=async K=>{if(await o.show({title:"删除绑定",message:`确定要删除绑定 "${K.bundleId} ${K.version}" 吗?`,type:"danger",confirmText:"删除",cancelText:"取消"}))try{const Fe=K._id||K.id;if(!Fe){s("绑定ID不存在",2e3);return}const P=await Y.deleteBind(Fe);P.success?(t("绑定删除成功",2e3),N()):s(P.message||"删除失败",3e3)}catch(Fe){s(Fe.message||"删除失败",3e3)}};return nt(()=>{M(),N()}),At(()=>{window.removeEventListener("scroll",we,!0),window.removeEventListener("resize",we)}),(K,ae)=>{var Fe,P;return u(),f("div",NU,[m(Ta,{tabs:l.value,activeTab:a.value,"onUpdate:activeTab":ae[0]||(ae[0]=g=>a.value=g)},null,8,["tabs","activeTab"]),a.value==="files"?(u(),f("div",OU,[n("div",FU,[n("div",VU,[n("button",{onClick:M,class:"btn btn-primary"},[m(k,{icon:"mdi:refresh"}),ae[10]||(ae[10]=$e(" 刷新 ",-1))])])]),n("div",BU,[r.value?(u(),f("div",jU,[...ae[11]||(ae[11]=[n("div",{class:"spinner"},null,-1),n("p",null,"加载中...",-1)])])):c.value?(u(),f("div",qU,[m(k,{icon:"mdi:alert-circle"}),n("p",null,h(c.value),1)])):(u(),f("table",HU,[ae[13]||(ae[13]=n("thead",null,[n("tr",null,[n("th",null,"文件名"),n("th",null,"大小"),n("th",null,"类型"),n("th",null,"修改时间"),n("th",null,"操作")])],-1)),n("tbody",null,[i.value.length===0?(u(),f("tr",zU,[n("td",WU,[m(k,{icon:"mdi:file-off"}),ae[12]||(ae[12]=n("p",null,"暂无文件数据",-1))])])):T("",!0),(u(!0),f(ye,null,Ee(i.value,(g,A)=>(u(),f("tr",{key:g.name||A},[n("td",null,h(g.name),1),n("td",null,h($(g.size)),1),n("td",null,h(R(g.name)),1),n("td",null,h(O(g.lastModified)),1),n("td",KU,[n("button",{onClick:z=>ne(g),class:"action-btn edit",title:"绑定到应用"},[m(k,{icon:"mdi:link"})],8,GU)])]))),128))])]))])])):T("",!0),a.value==="binds"?(u(),f("div",QU,[n("div",JU,[n("div",XU,[n("button",{onClick:N,class:"btn btn-primary"},[m(k,{icon:"mdi:refresh"}),ae[14]||(ae[14]=$e(" 刷新 ",-1))])])]),n("div",ZU,[d.value?(u(),f("div",YU,[...ae[15]||(ae[15]=[n("div",{class:"spinner"},null,-1),n("p",null,"加载中...",-1)])])):v.value?(u(),f("div",eP,[m(k,{icon:"mdi:alert-circle"}),n("p",null,h(v.value),1)])):(u(),f(ye,{key:2},[n("table",tP,[ae[17]||(ae[17]=n("thead",null,[n("tr",null,[n("th",null,"Bundle ID"),n("th",null,"版本"),n("th",null,"文件名"),n("th",null,"Beta"),n("th",null,"绑定时间"),n("th",null,"操作")])],-1)),n("tbody",null,[p.value.length===0?(u(),f("tr",sP,[n("td",nP,[m(k,{icon:"mdi:link-off"}),ae[16]||(ae[16]=n("p",null,"暂无绑定数据",-1))])])):T("",!0),(u(!0),f(ye,null,Ee(p.value,g=>(u(),f("tr",{key:g._id||g.id},[n("td",null,h(g.bundleId),1),n("td",null,h(g.version),1),n("td",null,h(g.fileId),1),n("td",null,[g.beta?(u(),f("span",oP,"Beta")):(u(),f("span",aP,"-"))]),n("td",null,h(O(g.createdAt)),1),n("td",lP,[n("button",{onClick:A=>xe(g),class:"action-btn delete",title:"删除绑定"},[m(k,{icon:"mdi:delete"})],8,iP)])]))),128))])]),p.value.length>0&&y.value>1?(u(),Ne(qs,{key:0,"current-page":b.value,"total-pages":y.value,onPageChange:L},null,8,["current-page","total-pages"])):T("",!0)],64))])])):T("",!0),S.value?(u(),f("div",{key:2,class:"modal-overlay",onClick:ae[9]||(ae[9]=Oe(g=>S.value=!1,["self"]))},[n("div",rP,[n("div",cP,[ae[18]||(ae[18]=n("h3",null,"绑定文件到应用",-1)),n("button",{onClick:ae[1]||(ae[1]=g=>S.value=!1),class:"close-btn"},[m(k,{icon:"mdi:close"})])]),n("div",uP,[n("div",dP,[ae[19]||(ae[19]=n("label",{class:"form-label"},"选择应用:",-1)),n("div",fP,[Ve(n("input",{ref_key:"bundleIdInputRef",ref:W,"onUpdate:modelValue":ae[2]||(ae[2]=g=>I.value.bundleId=g),type:"text",placeholder:"输入包名或应用名,如: paral",onInput:de,onFocus:ue,onBlur:Z,class:"form-input"},null,544),[[Ke,I.value.bundleId]]),F.value&&E.value.length>0&&ee.value.length>0?(u(),f("div",{key:0,ref_key:"autocompleteDropdownRef",ref:G,class:"autocomplete-dropdown",style:St(re.value),onMousedown:ae[3]||(ae[3]=Oe(()=>{},["prevent"]))},[(u(!0),f(ye,null,Ee(ee.value,g=>(u(),f("div",{key:g.bundleId,class:"autocomplete-item",onClick:A=>q(g)},[n("div",{class:Te(["app-icon-wrapper",{"has-icon":ie(g)&&!U.value[g.bundleId]}])},[ie(g)&&!U.value[g.bundleId]?(u(),f("img",{key:0,src:ie(g),alt:g.appName||g.bundleId,class:"app-icon",onError:A=>je(A,g),onLoad:A=>Pe(g)},null,40,vP)):T("",!0),!ie(g)||U.value[g.bundleId]?(u(),f("div",mP,h((g.appName||g.bundleId).charAt(0).toUpperCase()),1)):T("",!0)],2),n("div",hP,[n("div",gP,h(g.appName||g.bundleId),1),n("div",yP,[n("span",bP,h(g.bundleId),1),g.appVersion?(u(),f("span",_P,h(g.appVersion),1)):T("",!0)])])],8,pP))),128))],36)):T("",!0)])]),n("div",{class:Te(["selected-app-info",{"is-empty":!D.value}])},[n("div",wP,[n("div",{class:Te(["app-detail-icon",{"has-icon":D.value&&ie(D.value)&&!U.value[D.value.bundleId]}])},[D.value&&ie(D.value)&&!U.value[D.value.bundleId]?(u(),f("img",{key:0,src:ie(D.value),alt:D.value.appName||D.value.bundleId,class:"app-icon-large",onError:ae[4]||(ae[4]=g=>je(g,D.value)),onLoad:ae[5]||(ae[5]=g=>Pe(D.value))},null,40,kP)):T("",!0),!D.value||!ie(D.value)||U.value[(Fe=D.value)==null?void 0:Fe.bundleId]?(u(),f("div",$P,h(D.value?(D.value.appName||D.value.bundleId).charAt(0).toUpperCase():"?"),1)):T("",!0)],2),n("div",CP,[n("div",IP,h(D.value?D.value.appName||D.value.bundleId:"未选择应用"),1),n("div",SP,h(D.value?D.value.bundleId:"请在上方选择或输入应用"),1)])]),n("div",xP,[ae[20]||(ae[20]=n("label",{class:"form-label"},"版本:",-1)),Ve(n("input",{"onUpdate:modelValue":ae[6]||(ae[6]=g=>I.value.version=g),type:"text",placeholder:"1.0.0"},null,512),[[Ke,I.value.version]])]),n("div",AP,[m(bd,{modelValue:I.value.beta,"onUpdate:modelValue":ae[7]||(ae[7]=g=>I.value.beta=g),label:"Beta"},null,8,["modelValue"])])],2),n("div",TP,[ae[21]||(ae[21]=n("label",{class:"form-label"},"文件:",-1)),n("input",{value:(P=C.value)==null?void 0:P.name,type:"text",disabled:""},null,8,EP)])]),n("div",RP,[n("button",{onClick:ae[8]||(ae[8]=g=>S.value=!1),class:"btn btn-secondary"},"取消"),n("button",{onClick:le,class:"btn btn-primary",disabled:x.value},h(x.value?"绑定中...":"确认绑定"),9,UP)])])])):T("",!0)])}}}),MP=We(PP,[["__scopeId","data-v-fff42038"]]),DP={class:"logs-management"},LP={class:"sub-tab-content"},NP={class:"section-header"},OP={class:"header-actions"},FP={class:"table-container"},VP={key:0,class:"loading-state"},BP={key:1,class:"error-state"},jP={class:"data-table"},qP={key:0},HP={colspan:"4",class:"empty-state"},zP={class:"user-info-cell"},WP={key:1,class:"user-avatar-placeholder"},KP={class:"user-details"},GP={class:"user-name"},QP={class:"user-username"},JP=ze({__name:"LogsManagement",setup(e){const t=w("all"),s=ge(()=>[{id:"all",label:"所有日志",icon:"mdi:file-document-multiple",badge:null},{id:"my",label:"我的日志",icon:"mdi:account",badge:null}]),o=C=>{t.value=C,C==="all"?_():y()},a=w([]),l=w(!1),i=w(""),r=w(1),c=w(20),p=w(0),d=ge(()=>Math.ceil(p.value/c.value)),v=C=>new Date(C).toLocaleString("zh-CN"),b=C=>({UPLOAD_APP_INFO:"上传应用信息",UPLOAD_IMAGE:"上传图片",BIND_FILE:"绑定文件",DELETE_BIND:"删除绑定",DELETE_USER:"删除用户",UPGRADE_USER:"升级用户",SET_USER_STATUS:"设置用户状态",DOWNLOAD_PRECRACKED_PACKAGE:"下载预破解包"})[String(C)]||String(C),_=async()=>{l.value=!0,i.value="";try{const C=await Y.getOperationLogs(r.value,c.value);if(C.success&&C.data){a.value=C.data.logs||C.data.list||C.data||[];const I=C.data.total||C.data.count||a.value.length;p.value=I}else i.value=C.message||"加载操作日志失败"}catch(C){i.value=C.message||"加载操作日志失败"}finally{l.value=!1}},y=async()=>{l.value=!0,i.value="";try{const C=await Y.getMyOperationLogs(r.value,c.value);if(C.success&&C.data){a.value=C.data.logs||C.data.list||C.data||[];const I=C.data.total||C.data.count||a.value.length;p.value=I}else i.value=C.message||"加载操作日志失败"}catch(C){i.value=C.message||"加载操作日志失败"}finally{l.value=!1}},S=C=>{r.value=C,t.value==="all"?_():y()};return nt(()=>{_()}),(C,I)=>(u(),f("div",DP,[m(Ta,{tabs:s.value,activeTab:t.value,"onUpdate:activeTab":o},null,8,["tabs","activeTab"]),n("div",LP,[n("div",NP,[n("div",OP,[n("button",{class:"btn btn-primary",onClick:I[0]||(I[0]=x=>t.value==="all"?_():y())},[m(k,{icon:"mdi:refresh",class:"btn-icon"}),I[2]||(I[2]=$e(" 刷新 ",-1))])])]),n("div",FP,[l.value?(u(),f("div",VP,[...I[3]||(I[3]=[n("div",{class:"spinner"},null,-1),n("p",null,"加载中...",-1)])])):i.value?(u(),f("div",BP,[m(k,{icon:"mdi:alert-circle"}),n("p",null,h(i.value),1),n("button",{class:"btn btn-primary",onClick:I[1]||(I[1]=x=>t.value==="all"?_():y())}," 重试 ")])):(u(),f(ye,{key:2},[n("table",jP,[I[5]||(I[5]=n("thead",null,[n("tr",null,[n("th",null,"操作类型"),n("th",null,"用户"),n("th",null,"路径"),n("th",null,"时间")])],-1)),n("tbody",null,[a.value.length===0?(u(),f("tr",qP,[n("td",HP,[m(k,{icon:"mdi:file-document-outline"}),I[4]||(I[4]=n("p",null,"暂无日志数据",-1))])])):T("",!0),(u(!0),f(ye,null,Ee(a.value,x=>{var E,F,W,G,re,D,U,O;return u(),f("tr",{key:x._id||x.id},[n("td",null,h(b(x.operationType)),1),n("td",null,[n("div",zP,[(E=x.user)!=null&&E.avatar?(u(),Ne(Et,{key:0,"avatar-id":x.user.avatar,width:32,height:32,"user-name":((F=x.user)==null?void 0:F.nickName)||((W=x.user)==null?void 0:W.username)||x.username,class:"user-avatar"},null,8,["avatar-id","user-name"])):(u(),f("div",WP,h((((G=x.user)==null?void 0:G.nickName)||((re=x.user)==null?void 0:re.username)||x.username||"-").charAt(0).toUpperCase()),1)),n("div",KP,[n("div",GP,h(((D=x.user)==null?void 0:D.nickName)||((U=x.user)==null?void 0:U.username)||x.username||"-"),1),n("div",QP,"@"+h(((O=x.user)==null?void 0:O.username)||x.username||"-"),1)])])]),n("td",null,h(x.path||"-"),1),n("td",null,h(v(x.createdAt)),1)])}),128))])]),d.value>1?(u(),Ne(qs,{key:0,"current-page":r.value,"total-pages":d.value,total:p.value,onPageChange:S},null,8,["current-page","total-pages","total"])):T("",!0)],64))])])]))}}),XP=We(JP,[["__scopeId","data-v-38333ef9"]]),ZP={class:"settings-management"},YP={key:0,class:"minio-config-section"},eM={class:"section-header"},tM={class:"header-actions"},sM=["disabled"],nM={key:0,class:"loading-state"},oM={key:1,class:"error-state"},aM={key:2,class:"minio-config-form"},lM={class:"config-grid"},iM={class:"config-item"},rM={class:"config-item"},cM={class:"config-item config-item-checkbox"},uM={class:"config-item"},dM={class:"config-item"},fM={class:"config-item"},pM={class:"config-item"},vM={class:"config-item"},mM={class:"form-actions"},hM=["disabled"],gM={class:"device-config-section"},yM={class:"section-header"},bM={class:"header-actions"},_M={class:"table-container"},wM={class:"table-header"},kM={key:0,class:"loading-state"},$M={key:1,class:"error-state"},CM={key:2,class:"data-table"},IM={key:0},SM={colspan:"3",class:"empty-state"},xM={class:"action-buttons"},AM=["onClick"],TM=["onClick"],EM=ze({__name:"SettingsManagement",setup(e){const{success:t,error:s}=_t(),o=gs(),{isQiuChenLy:a}=An(),l=w({endPoint:"",port:443,useSSL:!1,accessKey:"",secretKey:"",defaultBucket:"",defaultIconBucket:"",defaultAppImageBucket:""}),i=w(!1),r=w(""),c=w(!1),p=w(!1),d=w("device_type"),v=w([]),b=w(!1),_=w(""),y=w(null),S=w(!1),C=[{value:"device_type",label:"设备类型",icon:"fluent-color:device-24"},{value:"system_type",label:"系统类型",icon:"fluent-color:desktop-24"},{value:"processor_type",label:"处理器类型",icon:"fluent-color:cpu-24"}],I=R=>new Date(R).toLocaleString("zh-CN"),x=()=>{console.log("讨论区设置")},E=async()=>{if(a.value){i.value=!0,r.value="";try{const R=await Y.getMinioConfig();R.success&&R.data?l.value={endPoint:R.data["minio.endPoint"]||"",port:parseInt(R.data["minio.port"]||"443",10),useSSL:R.data["minio.useSSL"]==="true",accessKey:R.data["minio.accessKey"]||"",secretKey:R.data["minio.secretKey"]||"",defaultBucket:R.data["minio.defaultBucket"]||"",defaultIconBucket:R.data["minio.defaultIconBucket"]||"",defaultAppImageBucket:R.data["minio.defaultAppImageBucket"]||""}:r.value=R.message||"加载配置失败"}catch(R){r.value=R.message||"加载配置失败",s(R.message||"加载配置失败",3e3)}finally{i.value=!1}}},F=async()=>{var R,M;if(a.value){c.value=!0;try{const N={endPoint:l.value.endPoint,port:l.value.port,useSSL:l.value.useSSL,accessKey:l.value.accessKey,defaultBucket:l.value.defaultBucket,defaultIconBucket:l.value.defaultIconBucket,defaultAppImageBucket:l.value.defaultAppImageBucket};l.value.secretKey&&(N.secretKey=l.value.secretKey);const L=await Y.updateMinioConfig(N);L.success?(t(L.message||"配置保存成功",2e3),l.value.secretKey="",await E()):s(L.message||"保存配置失败",3e3)}catch(N){s(((M=(R=N.response)==null?void 0:R.data)==null?void 0:M.message)||N.message||"保存配置失败",3e3)}finally{c.value=!1}}},W=async()=>{var R,M,N;if(a.value){p.value=!0;try{const L=await Y.testMinioConnection();L.success&&((R=L.data)!=null&&R.connected)?t("MinIO连接测试成功",2e3):s(L.message||"MinIO连接测试失败",3e3)}catch(L){s(((N=(M=L.response)==null?void 0:M.data)==null?void 0:N.message)||L.message||"MinIO连接测试失败",3e3)}finally{p.value=!1}}},G=async()=>{b.value=!0,_.value="";try{const R=await Y.getAllDeviceConfigs(d.value);R.success&&R.data?v.value=R.data:_.value=R.message||"加载配置列表失败"}catch(R){_.value=R.message||"加载配置列表失败",s(R.message||"加载配置列表失败",3e3)}finally{b.value=!1}},re=()=>{y.value={type:d.value,value:""},S.value=!0},D=R=>{y.value={...R},S.value=!0},U=async R=>{var N,L;if(await o.show({title:"确认删除",message:`确定要删除配置 "${R.value}" 吗?此操作不可恢复。`,type:"warning"}))try{const X=await Y.deleteDeviceConfig(R._id);X.success?(t("配置已删除",2e3),await G()):s(X.message||"删除失败",3e3)}catch(X){s(((L=(N=X.response)==null?void 0:N.data)==null?void 0:L.message)||X.message||"删除失败",3e3)}},O=async R=>{var M,N;if(y.value)try{let L;y.value._id?L=await Y.updateDeviceConfig(y.value._id,{value:R.value}):L=await Y.createDeviceConfig({type:d.value,value:R.value}),L.success?(t(y.value._id?"配置已更新":"配置已创建",2e3),S.value=!1,y.value=null,await G()):s(L.message||"保存失败",3e3)}catch(L){s(((N=(M=L.response)==null?void 0:M.data)==null?void 0:N.message)||L.message||"保存失败",3e3)}},$=()=>{S.value=!1,y.value=null};return Xe(d,()=>{G()}),nt(()=>{a.value&&E(),G()}),(R,M)=>{var N;return u(),f("div",ZP,[M[26]||(M[26]=n("div",{class:"section-header"},[n("h2",null,"系统设置")],-1)),n("div",{class:"settings-list"},[n("div",{class:"setting-item"},[M[9]||(M[9]=n("div",{class:"setting-info"},[n("h3",null,"内容审核设置"),n("p",null,"配置内容审核规则和自动处理")],-1)),n("button",{class:"btn btn-primary",onClick:x},"配置")])]),se(a)?(u(),f("div",YP,[n("div",eM,[M[11]||(M[11]=n("h2",null,"MinIO存储配置",-1)),n("div",tM,[n("button",{class:"btn btn-secondary",onClick:W,disabled:p.value},[m(k,{icon:"mdi:connection"}),$e(" "+h(p.value?"测试中...":"测试连接"),1)],8,sM),n("button",{class:"btn btn-primary",onClick:E},[m(k,{icon:"mdi:refresh"}),M[10]||(M[10]=$e(" 刷新 ",-1))])])]),i.value?(u(),f("div",nM,[...M[12]||(M[12]=[n("div",{class:"spinner"},null,-1),n("p",null,"加载中...",-1)])])):r.value?(u(),f("div",oM,[m(k,{icon:"mdi:alert-circle"}),n("p",null,h(r.value),1),n("button",{class:"btn btn-primary",onClick:E},"重试")])):(u(),f("div",aM,[n("div",lM,[n("div",iM,[M[13]||(M[13]=n("label",{class:"config-label"},"服务器地址",-1)),Ve(n("input",{"onUpdate:modelValue":M[0]||(M[0]=L=>l.value.endPoint=L),type:"text",class:"config-input",placeholder:"https://file.example.com/minio"},null,512),[[Ke,l.value.endPoint]])]),n("div",rM,[M[14]||(M[14]=n("label",{class:"config-label"},"端口",-1)),Ve(n("input",{"onUpdate:modelValue":M[1]||(M[1]=L=>l.value.port=L),type:"number",class:"config-input",placeholder:"443"},null,512),[[Ke,l.value.port,void 0,{number:!0}]])]),n("div",cM,[m(bd,{modelValue:l.value.useSSL,"onUpdate:modelValue":M[2]||(M[2]=L=>l.value.useSSL=L),label:"使用SSL"},null,8,["modelValue"])]),n("div",uM,[M[15]||(M[15]=n("label",{class:"config-label"},"Access Key",-1)),Ve(n("input",{"onUpdate:modelValue":M[3]||(M[3]=L=>l.value.accessKey=L),type:"text",class:"config-input",placeholder:"访问密钥"},null,512),[[Ke,l.value.accessKey]])]),n("div",dM,[M[16]||(M[16]=n("label",{class:"config-label"},"Secret Key",-1)),Ve(n("input",{"onUpdate:modelValue":M[4]||(M[4]=L=>l.value.secretKey=L),type:"password",class:"config-input",placeholder:"密钥"},null,512),[[Ke,l.value.secretKey]])]),n("div",fM,[M[17]||(M[17]=n("label",{class:"config-label"},"默认存储桶",-1)),Ve(n("input",{"onUpdate:modelValue":M[5]||(M[5]=L=>l.value.defaultBucket=L),type:"text",class:"config-input",placeholder:"macos"},null,512),[[Ke,l.value.defaultBucket]])]),n("div",pM,[M[18]||(M[18]=n("label",{class:"config-label"},"图标存储桶",-1)),Ve(n("input",{"onUpdate:modelValue":M[6]||(M[6]=L=>l.value.defaultIconBucket=L),type:"text",class:"config-input",placeholder:"macos-icon"},null,512),[[Ke,l.value.defaultIconBucket]])]),n("div",vM,[M[19]||(M[19]=n("label",{class:"config-label"},"应用图片存储桶",-1)),Ve(n("input",{"onUpdate:modelValue":M[7]||(M[7]=L=>l.value.defaultAppImageBucket=L),type:"text",class:"config-input",placeholder:"macos-app-image"},null,512),[[Ke,l.value.defaultAppImageBucket]])])]),n("div",mM,[n("button",{class:"btn btn-primary",onClick:F,disabled:c.value},h(c.value?"保存中...":"保存配置"),9,hM)])]))])):T("",!0),n("div",gM,[n("div",yM,[M[20]||(M[20]=n("h2",null,"设备配置管理",-1)),n("div",bM,[m(is,{modelValue:d.value,"onUpdate:modelValue":M[8]||(M[8]=L=>d.value=L),options:C},null,8,["modelValue"])])]),n("div",_M,[n("div",wM,[n("button",{class:"btn btn-primary",onClick:re},[m(k,{icon:"mdi:plus"}),M[21]||(M[21]=$e(" 添加配置 ",-1))]),n("button",{class:"btn btn-secondary",onClick:G},[m(k,{icon:"mdi:refresh"}),M[22]||(M[22]=$e(" 刷新 ",-1))])]),b.value?(u(),f("div",kM,[...M[23]||(M[23]=[n("div",{class:"spinner"},null,-1),n("p",null,"加载中...",-1)])])):_.value?(u(),f("div",$M,[m(k,{icon:"mdi:alert-circle"}),n("p",null,h(_.value),1),n("button",{class:"btn btn-primary",onClick:G},"重试")])):(u(),f("table",CM,[M[25]||(M[25]=n("thead",null,[n("tr",null,[n("th",null,"配置值"),n("th",null,"创建时间"),n("th",null,"操作")])],-1)),n("tbody",null,[v.value.length===0?(u(),f("tr",IM,[n("td",SM,[m(k,{icon:"mdi:database-off"}),M[24]||(M[24]=n("p",null,"暂无配置数据",-1))])])):T("",!0),(u(!0),f(ye,null,Ee(v.value,L=>(u(),f("tr",{key:L._id},[n("td",null,h(L.value),1),n("td",null,h(I(L.createdAt)),1),n("td",null,[n("div",xM,[n("button",{class:"action-btn edit",onClick:X=>D(L),title:"编辑"},[m(k,{icon:"mdi:pencil"})],8,AM),n("button",{class:"action-btn delete",onClick:X=>U(L),title:"删除"},[m(k,{icon:"mdi:delete"})],8,TM)])])]))),128))])]))])]),y.value?(u(),Ne(yd,{key:1,visible:S.value,title:y.value._id?"编辑配置":"添加配置",message:`${((N=C.find(L=>L.value===d.value))==null?void 0:N.label)||""}配置`,fields:[{key:"value",label:"配置值",placeholder:"请输入配置值",type:"text",required:!0,defaultValue:y.value.value??""}],"confirm-text":"保存","cancel-text":"取消",onConfirm:O,onCancel:$},null,8,["visible","title","message","fields"])):T("",!0)])}}}),RM=We(EM,[["__scopeId","data-v-a25011fe"]]),UM={class:"admin-panel-page"},PM={class:"page-container"},MM={class:"content-area"},DM=ze({__name:"AdminPanel",setup(e){const{toasts:t,removeToast:s}=_t(),o=w("users"),a=w(null),l=w([{id:"users",label:"用户管理",icon:"fluent-color:people-team-48",badge:null},{id:"posts",label:"帖子管理",icon:"fluent-color:notebook-32",badge:null},{id:"violations",label:"违规处理",icon:"fluent-color:person-warning-48",badge:null},{id:"issues",label:"问题管理",icon:"fluent-color:person-feedback-48",badge:null},{id:"forums",label:"讨论区管理",icon:"fluent-color:chat-bubbles-question-24",badge:null},{id:"apps",label:"App管理",icon:"fluent-color:apps-24",badge:null},{id:"files",label:"文件管理",icon:"fluent-color:document-24",badge:null},{id:"logs",label:"系统日志",icon:"fluent-color:document-text-24",badge:null},{id:"settings",label:"系统设置",icon:"fluent-color:settings-24",badge:null}]),i=async()=>{try{const c=await Y.getAdminViolations(1,1,"pending");if(c.success&&c.data){const p=c.data.total||0,d=l.value.find(v=>v.id==="violations");d&&(d.badge=p>0?String(p):null)}}catch{}};let r=null;return nt(()=>{i(),r=setInterval(()=>{i()},6e4)}),At(()=>{r&&(clearInterval(r),r=null)}),(c,p)=>(u(),f("div",UM,[n("div",PM,[p[1]||(p[1]=n("div",{class:"page-header"},[n("h1",{class:"page-title"},"管理员面板"),n("p",{class:"page-description"},"管理系统用户、帖子内容和违规处理")],-1)),m(Ta,{tabs:l.value,"active-tab":o.value,"onUpdate:activeTab":p[0]||(p[0]=d=>o.value=d)},null,8,["tabs","active-tab"]),n("div",MM,[o.value==="users"?(u(),Ne(h9,{key:0})):T("",!0),o.value==="posts"?(u(),Ne(mE,{key:1})):T("",!0),o.value==="violations"?(u(),Ne(HE,{key:2,ref_key:"violationsManagementRef",ref:a},null,512)):T("",!0),o.value==="issues"?(u(),Ne(jR,{key:3})):T("",!0),o.value==="forums"?(u(),Ne(yU,{key:4})):T("",!0),o.value==="apps"?(u(),Ne(RU,{key:5})):T("",!0),o.value==="files"?(u(),Ne(MP,{key:6})):T("",!0),o.value==="logs"?(u(),Ne(XP,{key:7})):T("",!0),o.value==="settings"?(u(),Ne(RM,{key:8})):T("",!0)])]),m(Yt,{toasts:se(t),onRemove:se(s)},null,8,["toasts","onRemove"])]))}}),LM=We(DM,[["__scopeId","data-v-7596219e"]]),NM={class:"notifications-page"},OM={class:"page-container"},FM={class:"tabs-container"},VM={class:"tabs"},BM=["onClick"],jM={key:0,class:"tab-badge"},qM={class:"content-area"},HM={key:0,class:"tab-content"},zM={class:"section-header"},WM={class:"header-actions"},KM=["disabled"],GM={class:"notifications-list"},QM={class:"notification-icon"},JM={key:0,class:"unread-dot"},XM={class:"notification-content"},ZM={class:"notification-header"},YM={class:"notification-title"},eD={class:"notification-time"},tD={class:"notification-body"},sD={class:"detail-content"},nD={key:0,class:"notification-expanded-details"},oD={key:0,class:"expanded-section"},aD={class:"detail-item"},lD={class:"detail-value"},iD={class:"detail-item"},rD={class:"detail-value"},cD={class:"detail-item"},uD={class:"detail-value"},dD={class:"detail-item"},fD={class:"detail-content"},pD={class:"detail-item"},vD={class:"detail-value"},mD={key:0,class:"detail-item"},hD={class:"detail-content admin-comment"},gD={key:1,class:"expanded-section"},yD={class:"detail-item"},bD={class:"detail-value"},_D={class:"detail-item"},wD={class:"report-types-tags"},kD={class:"detail-item"},$D={class:"detail-content"},CD={key:0,class:"detail-item"},ID={class:"detail-content admin-comment"},SD={key:2,class:"expanded-section"},xD={class:"detail-item"},AD={class:"detail-value"},TD={class:"detail-item"},ED={class:"detail-value"},RD={key:0,class:"detail-item"},UD={class:"detail-content"},PD={class:"notification-actions"},MD=["onClick"],DD={key:0,class:"empty-state"},LD={key:1,class:"tab-content"},ND={class:"notifications-list"},OD={key:0,class:"loading-state issues-loading"},FD={key:1,class:"empty-state"},VD={class:"notification-icon"},BD=["src","alt"],jD={key:1,class:"app-icon-placeholder"},qD={class:"notification-content"},HD={class:"notification-header"},zD={class:"notification-title"},WD={class:"notification-time"},KD={class:"notification-body"},GD={class:"issue-type"},QD={class:"issue-type-value"},JD={class:"detail-content"},XD={key:0,class:"notification-expanded-details"},ZD={class:"expanded-section"},YD={class:"detail-item"},eL={class:"detail-value"},tL={class:"detail-item"},sL={class:"detail-value"},nL={key:0,class:"detail-item"},oL={key:1,class:"detail-item"},aL={class:"attachments-list"},lL=["onClick"],iL={class:"attachment-name"},rL={key:2,class:"detail-item"},cL={class:"detail-content admin-comment"},uL={key:3,class:"detail-item"},dL={class:"detail-value"},fL={class:"notification-actions"},pL=["onClick"],vL={key:2,class:"tab-content"},mL={class:"notifications-list"},hL=["onClick"],gL={class:"notification-icon"},yL={class:"notification-content"},bL={class:"notification-header"},_L={class:"notification-title"},wL={class:"notification-time"},kL={class:"notification-body"},$L={class:"notification-details"},CL={class:"detail-content"},IL={key:0,class:"new-replies-badge"},SL={key:0,class:"empty-state"},xL={key:3,class:"tab-content"},AL={class:"section-header"},TL={class:"notifications-list"},EL={class:"notification-icon"},RL={key:0,class:"unread-dot"},UL={class:"notification-content"},PL={class:"notification-header"},ML={class:"notification-title"},DL={class:"user-name"},LL={class:"notification-time"},NL={class:"notification-body"},OL={class:"detail-content"},FL={key:0,class:"empty-state"},VL={key:4,class:"tab-content"},BL={class:"section-header"},jL={class:"header-actions"},qL=["disabled"],HL={class:"notifications-list"},zL=["onClick"],WL={class:"notification-icon"},KL={key:0,class:"unread-dot"},GL={class:"notification-content"},QL={class:"notification-header"},JL={class:"notification-title"},XL={class:"user-name"},ZL={key:0,class:"reply-to"},YL={key:1},eN={class:"notification-time"},tN={class:"notification-body"},sN={class:"notification-text"},nN={class:"notification-details"},oN={class:"detail-content"},aN={key:0,class:"empty-state"},lN=ze({__name:"Notifications",setup(e){const t=Gt(),{toasts:s,showError:o,showSuccess:a,showWarning:l,removeToast:i}=_t(),r=w("system"),c=w(new Set),p=w([]),d=w([]),v=w([]),b=w([]),_=w(!1),y=w(!1),S=w(!1),C=w(!1),I=w(new Map),x=w(!1),E=async()=>{x.value=!0;try{const j=await Y.getNotifications(1,100);j.success&&j.data?de.value=j.data.notifications.map(V=>({id:V.id,type:V.type,title:V.title,content:V.content,relatedId:V.relatedId,createTime:V.createTime,read:V.read,reportDetails:V.reportDetails,requestDetails:V.requestDetails,issueDetails:V.issueDetails})):de.value=[]}catch(j){console.error("加载系统通知失败:",j),de.value=[]}finally{x.value=!1}},F=async()=>{_.value=!0;try{const j=await Y.getMyReplies(1,100);j.success&&j.data?p.value=j.data.replies.map(V=>({id:V.id,postId:V.postId,postTitle:V.postTitle,content:V.content,replyTime:V.replyTime,hasNewReplies:V.hasNewReplies||!1,newReplyCount:V.newReplyCount||0})):p.value=[]}catch(j){console.error("加载我回复的列表失败:",j),p.value=[]}finally{_.value=!1}},W=async()=>{S.value=!0;try{const j=await Y.getRepliesToMe(1,100);j.success&&j.data?v.value=j.data.replies.map(V=>({id:V.id,postId:V.postId,postTitle:V.postTitle,userName:V.userName,replyToUserName:V.replyToUserName,content:V.content,replyTime:V.replyTime,read:V.read||!1})):v.value=[]}catch(j){console.error("加载回复我的列表失败:",j),v.value=[]}finally{S.value=!1}},G=async()=>{y.value=!0;try{const j=await Y.getMessageNotifications(10);j.success&&j.data?d.value=j.data.notifications.map(V=>({id:V.id,fromUserId:V.fromUserId,fromUserName:V.fromUserName,content:V.content,sendTime:V.sendTime,read:V.read||!1})):d.value=[]}catch(j){console.error("加载私信通知失败:",j),d.value=[]}finally{y.value=!1}},re=async()=>{var j,V;C.value=!0;try{const B=await Y.getMyIssues(1,100);if(B.success&&B.data){b.value=B.data.issues||[];for(const ve of b.value){if(ve.appIconId&&!I.value.has(ve.id))try{const me=await Y.getImage(ve.appIconId);I.value.set(ve.id,me)}catch(me){console.warn(`加载问题 ${ve.id} 的图标失败:`,me)}if(ve.screenshotAttachmentIds&&ve.screenshotAttachmentIds.length>0){const me=new Map;for(const Le of ve.screenshotAttachmentIds){const Ue=U(Le);try{const Be=await Y.getAttachmentImage(Ue);Be&&me.set(Ue,Be)}catch(Be){console.warn(`加载问题 ${ve.id} 的截图 ${Ue} 失败:`,Be)}}me.size>0&&O.value.set(ve.id,me)}}}else b.value=[],B.message&&o(B.message,3e3)}catch(B){console.error("加载问题报告失败:",B),b.value=[],o(((V=(j=B.response)==null?void 0:j.data)==null?void 0:V.message)||B.message||"加载问题报告失败",3e3)}finally{C.value=!1}},D=j=>I.value.get(j),U=j=>{var V,B;return typeof j=="string"?j:j&&typeof j=="object"?((V=j._id)==null?void 0:V.toString())||((B=j.id)==null?void 0:B.toString())||j.toString():String(j)},O=w(new Map),$=j=>{const V=O.value.get(j.id);if(!V)return[];const B=[];if(j.screenshotAttachmentIds&&j.screenshotAttachmentIds.length>0)for(const ve of j.screenshotAttachmentIds){const me=U(ve),Le=V.get(me);Le&&B.push(Le)}return B},R=w([]),M=w(0),N=w(!1),L=(j,V)=>{const B=$(j);R.value=B,M.value=V,N.value=!0},X=()=>{N.value=!1,R.value=[]},ne=async j=>{try{const V=U(j),B=await Y.getAttachment(V);if(!B){console.error("获取文件信息失败");return}const ve=await Y.getAttachmentDownloadUrl(V);if(!ve){console.error("获取下载链接失败");return}const me=document.createElement("a");me.href=ve,me.download=B.name,me.target="_blank",document.body.appendChild(me),me.click(),document.body.removeChild(me)}catch(V){console.error("下载文件失败:",V)}},ee=j=>{switch(j){case"pending":return"待处理";case"resolved":return"已解决";case"rejected":return"已驳回";default:return j}},we=j=>{switch(j){case"crash":return"打开崩溃";case"crack_failed":return"破解失效";case"update_request":return"请求更新";case"unexpected_error":return"意外错误";default:return j}},de=w([]),ue=ge(()=>v.value.filter(j=>!j.read).length),Z=ge(()=>de.value.filter(j=>!j.read).length),q=w(0),ie=async()=>{try{const j=await Y.getUnreadMessageCount();j.success&&j.data&&(q.value=j.data.count||0)}catch(j){console.error("获取未读私信数量失败:",j),q.value=0}},Pe=ge(()=>[{id:"system",label:"系统通知",icon:"fluent-color:mail-alert-32",badge:Z.value>0?String(Z.value):null},{id:"myReplies",label:"我回复的",icon:"fluent-color:people-chat-48",badge:null},{id:"repliesToMe",label:"回复我的",icon:"fluent-color:pin-48",badge:ue.value>0?String(ue.value):null},{id:"messages",label:"私信",icon:"fluent-color:comment-multiple-32",badge:q.value>0?q.value>99?"99+":String(q.value):null},{id:"issues",label:"问题报告",icon:"fluent-color:person-feedback-48",badge:null}]),je=async j=>{if(c.value.has(j))c.value.delete(j);else{c.value.add(j);const V=de.value.find(B=>B.id===j);if(V&&!V.read)try{await Y.markNotificationAsRead(j),V.read=!0}catch(B){console.error("标记通知为已读失败:",B)}}},le=j=>{const V=new Date(j),ve=new Date().getTime()-V.getTime(),me=Math.floor(ve/6e4),Le=Math.floor(ve/36e5),Ue=Math.floor(ve/864e5);return me<1?"刚刚":me<60?`${me}分钟前`:Le<24?`${Le}小时前`:Ue<7?`${Ue}天前`:V.toLocaleDateString("zh-CN")},xe=j=>{console.log("查看帖子",j)},K=async j=>{j.read=!0,console.log("查看回复",j)},ae=async()=>{v.value.forEach(j=>{j.read=!0})},Fe=()=>{t.push("/messages")},P=j=>{switch(j){case"forum_request_approved":return"fluent-color:shield-checkmark-16";case"forum_request_rejected":return"fluent-color:calendar-cancel-16";case"report_processed":return"fluent-color:flag-48";case"issue_processed":return"fluent-color:person-feedback-48";default:return"mdi:bell"}},g=async()=>{try{(await Y.markAllNotificationsAsRead()).success&&de.value.forEach(V=>{V.read=!0})}catch(j){console.error("标记所有通知为已读失败:",j)}},A=()=>{E()},z=()=>{E(),re(),F(),W(),G(),ie()},Q=()=>{r.value==="system"?E():r.value==="issues"?re():r.value==="myReplies"?F():r.value==="repliesToMe"?W():r.value==="messages"&&G()};return Xe(r,()=>{Q()}),nt(()=>{z();const j=setInterval(()=>{ie()},5e3),V=setInterval(()=>{z()},3e4);window.addEventListener("system-notifications-changed",A);const B=()=>{ie()};window.addEventListener("messages:conversations-updated",B);const ve=()=>{document.hidden||ie()};document.addEventListener("visibilitychange",ve);const me=()=>{ie()};window.addEventListener("focus",me),At(()=>{clearInterval(V),clearInterval(j),window.removeEventListener("system-notifications-changed",A),window.removeEventListener("messages:conversations-updated",B),document.removeEventListener("visibilitychange",ve),window.removeEventListener("focus",me)})}),ho(()=>{I.value.forEach(j=>{j.startsWith("blob:")&&URL.revokeObjectURL(j)}),I.value.clear(),O.value.forEach(j=>{j.forEach(V=>{V.startsWith("blob:")&&URL.revokeObjectURL(V)}),j.clear()}),O.value.clear()}),(j,V)=>(u(),f("div",NM,[n("div",OM,[V[37]||(V[37]=n("div",{class:"page-header"},[n("h1",{class:"page-title"},"消息通知"),n("p",{class:"page-description"},"查看你的举报处理、回复和互动通知")],-1)),n("div",FM,[n("div",VM,[(u(!0),f(ye,null,Ee(Pe.value,B=>(u(),f("button",{key:B.id,class:Te(["tab-button",{active:r.value===B.id}]),onClick:ve=>r.value=B.id},[m(k,{icon:B.icon,class:"tab-icon"},null,8,["icon"]),n("span",null,h(B.label),1),B.badge?(u(),f("span",jM,h(B.badge),1)):T("",!0)],10,BM))),128))])]),n("div",qM,[r.value==="system"?(u(),f("div",HM,[n("div",zM,[V[2]||(V[2]=n("h2",null,"系统通知",-1)),n("div",WM,[n("button",{class:"btn btn-secondary",onClick:g,disabled:Z.value===0},[m(k,{icon:"mdi:check-all",class:"btn-icon"}),V[1]||(V[1]=$e(" 全部标记为已读 ",-1))],8,KM)])]),n("div",GM,[(u(!0),f(ye,null,Ee(de.value,B=>(u(),f("div",{key:B.id,class:Te(["notification-item system-notification",{unread:!B.read,[B.type]:!0,expanded:c.value.has(B.id)}])},[n("div",QM,[m(k,{icon:P(B.type),class:"icon"},null,8,["icon"]),B.read?T("",!0):(u(),f("span",JM))]),n("div",XM,[n("div",ZM,[n("h3",YM,h(B.title),1),n("span",eD,h(le(B.createTime)),1)]),n("div",tD,[n("div",sD,h(B.content),1),c.value.has(B.id)?(u(),f("div",nD,[B.type==="issue_processed"&&B.issueDetails?(u(),f("div",oD,[n("div",aD,[V[3]||(V[3]=n("span",{class:"detail-label"},"应用:",-1)),n("span",lD,h(B.issueDetails.appName)+" ("+h(B.issueDetails.appVersion)+")",1)]),n("div",iD,[V[4]||(V[4]=n("span",{class:"detail-label"},"Bundle ID:",-1)),n("span",rD,[n("code",null,h(B.issueDetails.bundleId),1)])]),n("div",cD,[V[5]||(V[5]=n("span",{class:"detail-label"},"问题类型:",-1)),n("span",uD,h(B.issueDetails.errorTypeText||we(B.issueDetails.errorType)),1)]),n("div",dD,[V[6]||(V[6]=n("span",{class:"detail-label"},"问题描述:",-1)),n("div",fD,h(B.issueDetails.content),1)]),n("div",pD,[V[7]||(V[7]=n("span",{class:"detail-label"},"处理状态:",-1)),n("span",vD,h(B.issueDetails.status==="resolved"?"已解决":"已驳回"),1)]),B.issueDetails.resolutionNote?(u(),f("div",mD,[V[8]||(V[8]=n("span",{class:"detail-label"},"处理说明:",-1)),n("div",hD,h(B.issueDetails.resolutionNote),1)])):T("",!0)])):T("",!0),B.type==="report_processed"&&B.reportDetails?(u(),f("div",gD,[n("div",yD,[V[9]||(V[9]=n("span",{class:"detail-label"},"被举报人:",-1)),n("span",bD,h(B.reportDetails.reportedUser),1)]),n("div",_D,[V[10]||(V[10]=n("span",{class:"detail-label"},"举报类型:",-1)),n("div",wD,[(u(!0),f(ye,null,Ee(B.reportDetails.reportTypes||[],ve=>(u(),f("span",{key:ve,class:Te(["report-type-tag",se(md)(ve)])},h(se(vd)(ve)),3))),128))])]),n("div",kD,[V[11]||(V[11]=n("span",{class:"detail-label"},"被举报内容:",-1)),n("div",$D,h(B.reportDetails.content),1)]),B.reportDetails.adminComment?(u(),f("div",CD,[V[12]||(V[12]=n("span",{class:"detail-label"},"管理员回复:",-1)),n("div",ID,h(B.reportDetails.adminComment),1)])):T("",!0)])):T("",!0),(B.type==="forum_request_approved"||B.type==="forum_request_rejected")&&B.requestDetails?(u(),f("div",SD,[n("div",xD,[V[13]||(V[13]=n("span",{class:"detail-label"},"应用名称:",-1)),n("span",AD,h(B.requestDetails.appName),1)]),n("div",TD,[V[14]||(V[14]=n("span",{class:"detail-label"},"Bundle ID:",-1)),n("span",ED,[n("code",null,h(B.requestDetails.bundleId),1)])]),B.type==="forum_request_rejected"&&B.requestDetails.reason?(u(),f("div",RD,[V[15]||(V[15]=n("span",{class:"detail-label"},"拒绝原因:",-1)),n("div",UD,h(B.requestDetails.reason),1)])):T("",!0)])):T("",!0)])):T("",!0)]),n("div",PD,[n("button",{class:"expand-btn",onClick:Oe(ve=>je(B.id),["stop"])},[m(k,{icon:c.value.has(B.id)?"mdi:chevron-up":"mdi:chevron-down",class:"expand-icon"},null,8,["icon"]),n("span",null,h(c.value.has(B.id)?"收起":"展开"),1)],8,MD)])])],2))),128)),de.value.length===0?(u(),f("div",DD,[m(k,{icon:"mdi:bell-off-outline",class:"empty-icon"}),V[16]||(V[16]=n("p",null,"暂无系统通知",-1))])):T("",!0)])])):T("",!0),r.value==="issues"?(u(),f("div",LD,[V[26]||(V[26]=n("div",{class:"section-header"},[n("h2",null,"问题报告"),n("p",{class:"section-description"},"查看你提交的问题报告和处理状态")],-1)),n("div",ND,[C.value?(u(),f("div",OD,[...V[17]||(V[17]=[n("div",{class:"spinner"},null,-1),n("p",null,"加载问题报告中...",-1)])])):b.value.length===0?(u(),f("div",FD,[m(k,{icon:"mdi:bug-check",class:"empty-icon"}),V[18]||(V[18]=n("p",null,"暂无问题报告",-1))])):(u(!0),f(ye,{key:2},Ee(b.value,B=>(u(),f("div",{key:B.id,class:Te(["notification-item issue-item",{expanded:c.value.has(B.id)}])},[n("div",VD,[B.appIconId&&D(B.id)?(u(),f("img",{key:0,src:D(B.id),alt:B.appName,class:"app-icon"},null,8,BD)):(u(),f("div",jD,h(B.appName.charAt(0).toUpperCase()),1))]),n("div",qD,[n("div",HD,[n("h3",zD,h(B.appName)+" ("+h(B.appVersion)+")",1),n("span",WD,h(le(B.submitTime)),1)]),n("div",KD,[n("div",{class:Te(["issue-status",B.status])},[m(k,{icon:B.status==="resolved"?"mdi:check-circle":B.status==="rejected"?"mdi:close-circle":"mdi:clock-outline",class:"status-icon"},null,8,["icon"]),n("span",null,h(ee(B.status)),1)],2),n("div",GD,[V[19]||(V[19]=n("span",{class:"issue-type-label"},"问题类型:",-1)),n("span",QD,h(we(B.errorType)),1)]),n("div",JD,h(B.content),1),c.value.has(B.id)?(u(),f("div",XD,[n("div",ZD,[n("div",YD,[V[20]||(V[20]=n("span",{class:"detail-label"},"Bundle ID:",-1)),n("span",eL,[n("code",null,h(B.bundleId),1)])]),n("div",tL,[V[21]||(V[21]=n("span",{class:"detail-label"},"系统信息:",-1)),n("span",sL,h(B.osVersion)+" ("+h(B.architecture)+")",1)]),B.screenshotAttachmentIds&&B.screenshotAttachmentIds.length>0?(u(),f("div",nL,[V[22]||(V[22]=n("span",{class:"detail-label"},"截图:",-1)),m(mn,{images:$(B),"show-index":!1,columns:4,"max-width":80,onImageClick:ve=>L(B,ve)},null,8,["images","onImageClick"])])):T("",!0),B.fileAttachmentIds&&B.fileAttachmentIds.length>0?(u(),f("div",oL,[V[23]||(V[23]=n("span",{class:"detail-label"},"文件:",-1)),n("div",aL,[(u(!0),f(ye,null,Ee(B.fileAttachmentIds,(ve,me)=>(u(),f("div",{key:`file-${me}`,class:"attachment-item",onClick:Le=>ne(ve)},[m(k,{icon:"mdi:file",class:"attachment-icon"}),n("span",iL,"文件 "+h(me+1),1),m(k,{icon:"mdi:download",class:"attachment-action-icon",title:"下载"})],8,lL))),128))])])):T("",!0),B.resolutionNote?(u(),f("div",rL,[V[24]||(V[24]=n("span",{class:"detail-label"},"处理说明:",-1)),n("div",cL,h(B.resolutionNote),1)])):T("",!0),B.processedAt?(u(),f("div",uL,[V[25]||(V[25]=n("span",{class:"detail-label"},"处理时间:",-1)),n("span",dL,h(le(B.processedAt)),1)])):T("",!0)])])):T("",!0)]),n("div",fL,[n("button",{class:"expand-btn",onClick:Oe(ve=>je(B.id),["stop"])},[m(k,{icon:c.value.has(B.id)?"mdi:chevron-up":"mdi:chevron-down",class:"expand-icon"},null,8,["icon"]),n("span",null,h(c.value.has(B.id)?"收起":"展开"),1)],8,pL)])])],2))),128))])])):T("",!0),r.value==="myReplies"?(u(),f("div",vL,[V[29]||(V[29]=n("div",{class:"section-header"},[n("h2",null,"我回复的"),n("p",{class:"section-description"},"查看你回复的帖子和回复")],-1)),n("div",mL,[(u(!0),f(ye,null,Ee(p.value,B=>(u(),f("div",{key:B.id,class:"notification-item",onClick:ve=>xe(B.postId)},[n("div",gL,[m(k,{icon:"fluent-color:people-chat-48",class:"icon"})]),n("div",yL,[n("div",bL,[n("h3",_L,h(B.postTitle),1),n("span",wL,h(le(B.replyTime)),1)]),n("div",kL,[V[27]||(V[27]=n("p",{class:"notification-text"},"你的回复:",-1)),n("div",$L,[n("div",CL,h(B.content),1),B.hasNewReplies?(u(),f("div",IL,[m(k,{icon:"mdi:message-reply-text"}),n("span",null,"有 "+h(B.newReplyCount)+" 条新回复",1)])):T("",!0)])])])],8,hL))),128)),p.value.length===0?(u(),f("div",SL,[m(k,{icon:"mdi:reply-outline",class:"empty-icon"}),V[28]||(V[28]=n("p",null,"暂无回复记录",-1))])):T("",!0)])])):T("",!0),r.value==="messages"?(u(),f("div",xL,[n("div",AL,[V[31]||(V[31]=n("h2",null,"私信",-1)),n("button",{class:"btn btn-primary",onClick:Fe},[m(k,{icon:"fluent-color:comment-multiple-32",class:"btn-icon"}),V[30]||(V[30]=$e(" 前往私信 ",-1))])]),n("div",TL,[(u(!0),f(ye,null,Ee(d.value,B=>(u(),f("div",{key:B.id,class:Te(["notification-item message-item",{unread:!B.read}]),onClick:Fe},[n("div",EL,[m(k,{icon:"fluent-color:comment-multiple-32",class:"icon"}),B.read?T("",!0):(u(),f("span",RL))]),n("div",UL,[n("div",PL,[n("h3",ML,[n("span",DL,h(B.fromUserName),1),V[32]||(V[32]=n("span",null,"发来私信",-1))]),n("span",LL,h(le(B.sendTime)),1)]),n("div",NL,[n("div",OL,h(B.content),1)])])],2))),128)),d.value.length===0?(u(),f("div",FL,[m(k,{icon:"fluent-color:comment-multiple-32",class:"empty-icon"}),V[33]||(V[33]=n("p",null,"暂无私信",-1))])):T("",!0)])])):T("",!0),r.value==="repliesToMe"?(u(),f("div",VL,[n("div",BL,[V[35]||(V[35]=n("h2",null,"回复我的",-1)),n("div",jL,[n("button",{class:"btn btn-secondary",onClick:ae,disabled:ue.value===0},[m(k,{icon:"mdi:check-all",class:"btn-icon"}),V[34]||(V[34]=$e(" 全部标记为已读 ",-1))],8,qL)])]),n("div",HL,[(u(!0),f(ye,null,Ee(v.value,B=>(u(),f("div",{key:B.id,class:Te(["notification-item",{unread:!B.read}]),onClick:ve=>K(B)},[n("div",WL,[m(k,{icon:"fluent-color:people-list-16",class:"icon"}),B.read?T("",!0):(u(),f("span",KL))]),n("div",GL,[n("div",QL,[n("h3",JL,[n("span",XL,h(B.userName),1),B.replyToUserName?(u(),f("span",ZL," 回复了 @"+h(B.replyToUserName),1)):(u(),f("span",YL,"回复了你的帖子"))]),n("span",eN,h(le(B.replyTime)),1)]),n("div",tN,[n("p",sN,'在帖子"'+h(B.postTitle)+'"中:',1),n("div",nN,[n("div",oN,h(B.content),1)])])])],10,zL))),128)),v.value.length===0?(u(),f("div",aN,[m(k,{icon:"mdi:message-outline",class:"empty-icon"}),V[36]||(V[36]=n("p",null,"暂无回复通知",-1))])):T("",!0)])])):T("",!0)])]),m(Tn,{visible:N.value,images:R.value,"initial-index":M.value,"show-navigation":!0,"show-info":!0,onClose:X,onIndexChange:V[0]||(V[0]=B=>M.value=B)},null,8,["visible","images","initial-index"]),m(Yt,{toasts:se(s),onRemove:se(i)},null,8,["toasts","onRemove"])]))}}),iN=We(lN,[["__scopeId","data-v-c006e8d9"]]),rN={class:"messages-page"},cN={class:"page-container"},uN={class:"page-header"},dN={class:"page-title"},fN={key:0,class:"title-badge"},pN={class:"messages-layout"},vN={class:"conversations-sidebar"},mN={class:"sidebar-header"},hN={class:"conversations-list"},gN={key:0,class:"conversations-loading"},yN=["onClick"],bN={class:"conversation-avatar"},_N={key:0,class:"unread-badge"},wN={class:"conversation-info"},kN={class:"conversation-header"},$N={class:"conversation-name"},CN={class:"conversation-time"},IN={class:"conversation-preview"},SN={class:"preview-text"},xN={key:0,class:"unread-indicator"},AN={key:2,class:"empty-conversations"},TN={class:"messages-content"},EN={key:0,class:"user-selection-view"},RN={class:"selection-header"},UN={class:"selection-search"},PN={class:"search-input-wrapper"},MN={class:"user-list-container"},DN={key:0,class:"users-loading"},LN={key:1,class:"users-error"},NN={key:2,class:"users-empty"},ON={key:3,class:"users-list"},FN=["onClick"],VN={class:"user-item-info"},BN={class:"user-item-name"},jN={key:0,class:"user-item-username"},qN={key:1,class:"user-item-username"},HN={key:1,class:"empty-conversation-view"},zN={key:2,class:"conversation-view"},WN={class:"conversation-header-bar"},KN={class:"header-user-info"},GN={class:"user-details"},QN={class:"user-name"},JN={class:"user-status"},XN={key:0,class:"status-badge blocked"},ZN={key:1,class:"status-badge muted"},YN={key:2},eO={class:"header-actions-group"},tO={key:0,class:"messages-loading"},sO={key:0,class:"message-avatar"},nO={class:"message-content-wrapper"},oO={class:"message-content"},aO={class:"message-text"},lO={key:0,class:"message-attachments"},iO=["onClick"],rO={class:"attachment-name"},cO={class:"attachment-size"},uO={class:"message-footer"},dO={class:"message-time"},fO={key:0,class:"message-status sending"},pO={key:1,class:"message-status sent"},vO={key:2,class:"message-status failed"},mO={key:1,class:"message-avatar"},hO={class:"message-input-area"},gO={key:0,class:"input-disabled-notice"},yO={key:1},bO={class:"input-toolbar"},_O=["disabled"],wO=["disabled"],kO=["onKeydown"],$O={key:2,class:"attachments-preview"},CO=["src"],IO=["onClick"],SO={class:"file-name"},xO=["onClick"],AO={key:3,class:"input-footer"},TO={class:"char-count"},EO=["disabled"],RO=ze({__name:"Messages",setup(e){const t=Gt(),s=xn(),{toasts:o,error:a,removeToast:l}=_t(),i=gs(),{show:r,hide:c}=js(),{user:p}=Ts(),{isAdmin:d}=An(),v=w([]),b=w(!1),_=w(!1),y=w(null),S=w(""),C=w([]),I=w([]),x=w(null),E=w(null),F=w(null),W=w(null),G=w(!1),re=w(null),D=w(!1),U=w(null),O=w(!1),$=w(""),R=w([]),M=w(!1),N=w(""),L=w(1),X=w(50),ne=w(0),ee=ge(()=>v.value.find(Ae=>Ae.id===y.value)||null),we=ge(()=>v.value.reduce((Ae,J)=>Ae+(J.unreadCount||0),0)),de=ge(()=>S.value.trim().length>0||C.value.length>0||I.value.length>0),ue=async Ae=>{O.value=!1,y.value=Ae;const J=v.value.find(te=>te.id===Ae);J&&(J.unreadCount=0,(!J.messages||J.messages.length===0)&&await q(Ae)),pt(()=>{yt()})},Z=async(Ae=!1)=>{!Ae&&v.value.length===0&&(b.value=!0);try{const J=await Y.getConversations(1,100);if(J.success&&J.data){const te=J.data.conversations.map(pe=>{var Me;return{id:pe.id,userId:pe.userId,userName:pe.userName,userAvatar:pe.userAvatar||pe.avatar,lastMessage:pe.lastMessage,lastMessageTime:pe.lastMessageTime,unreadCount:pe.unreadCount||0,messages:((Me=v.value.find(tt=>tt.id===pe.id))==null?void 0:Me.messages)||[],blocked:pe.blocked||!1,muted:pe.muted||!1}}),ke=new Map(v.value.map(pe=>[pe.id,pe])),oe=te.filter(pe=>!ke.has(pe.id)&&pe.lastMessage&&pe.lastMessage.trim().length>0),H=te.filter(pe=>!ke.has(pe.id)&&(!pe.lastMessage||pe.lastMessage.trim().length===0)),be=[],_e=[];te.forEach(pe=>{const Me=ke.get(pe.id);if(Me){const tt=Me.lastMessageTime!==pe.lastMessageTime&&pe.lastMessage&&pe.lastMessage.trim().length>0,at=Me.unreadCount!==pe.unreadCount;tt||at?be.push({...pe,messages:Me.messages||[]}):_e.push(Me)}}),v.value.length===0?v.value=te:v.value=[...be,...oe,..._e,...H]}else Ae||(v.value=[])}catch(J){console.error("加载会话列表失败:",J),Ae||(a("加载会话列表失败",2e3),v.value=[])}finally{b.value=!1}window.dispatchEvent(new CustomEvent("messages:conversations-updated"))},q=async Ae=>{_.value=!0;try{const J=await Y.getConversationMessages(Ae,1,100);if(J.success&&J.data){const te=v.value.find(ke=>ke.id===Ae);te&&(te.messages=J.data.messages.map(ke=>({id:ke.id,content:ke.content,sendTime:ke.sendTime,sent:ke.sent,status:ke.sent?"sent":void 0,attachments:ke.attachments})))}}catch(J){console.error("加载消息列表失败:",J),a("加载消息列表失败",2e3)}finally{_.value=!1}},ie=()=>{O.value=!0,y.value=null,$.value="",L.value=1,je()},Pe=()=>{O.value=!1,$.value="",L.value=1},je=async()=>{M.value=!0,N.value="";try{const Ae=await Y.getUsersForChat(L.value,X.value,$.value||void 0);Ae.users&&Array.isArray(Ae.users)?(R.value=Ae.users.map(J=>{var te;return{id:J.id||J._id||((te=J._id)==null?void 0:te.toString()),username:J.username||"",nickName:J.nickName||"",avatar:J.avatar||"",age:J.age}}),ne.value=Ae.total||0):N.value="加载用户列表失败"}catch(Ae){console.error("加载用户列表失败:",Ae),N.value=Ae.message||"加载用户列表失败"}finally{M.value=!1}},le=()=>{clearTimeout(le.timer),le.timer=setTimeout(()=>{L.value=1,je()},300)},xe=()=>{$.value="",L.value=1,je()},K=ge(()=>{if(!$.value.trim())return R.value;const Ae=$.value.toLowerCase();return R.value.filter(J=>J.username&&J.username.toLowerCase().includes(Ae)||J.nickName&&J.nickName.toLowerCase().includes(Ae))}),ae=async Ae=>{Pe(),await Fe(Ae.id)},Fe=async Ae=>{r("创建会话...");try{const J=await Y.getOrCreateConversationByUserId(Ae);if(J.success&&J.data){const{conversationId:te,userName:ke}=J.data;if(v.value.find(H=>H.id===te))y.value=te,await ue(te);else{let H;try{const _e=await Y.getUserInfo(Ae);_e&&(H=_e.avatar)}catch(_e){console.warn("获取用户信息失败:",_e)}const be={id:te,userId:Ae,userName:ke,userAvatar:H,lastMessage:"",lastMessageTime:new Date().toISOString(),unreadCount:0,messages:[],blocked:!1,muted:!1};v.value.push(be),y.value=te,await ue(te)}t.replace({path:"/messages",query:{}})}else a(J.message||"创建会话失败",2e3)}catch(J){console.error("创建会话失败:",J),a("创建会话失败",2e3)}finally{c()}},P=()=>{ee.value&&(re.value={userId:ee.value.userId,userName:ee.value.userName,content:"",type:void 0},G.value=!0,D.value=!1)},g=async()=>{if(ee.value){r("设置拒收...");try{const Ae=await Y.setConversationMute(ee.value.id,!0);Ae.success?(ee.value.muted=!0,D.value=!1):a(Ae.message||"操作失败",2e3)}catch(Ae){console.error("设置拒收失败:",Ae),a("设置拒收失败",2e3)}finally{c()}}},A=async()=>{if(ee.value){r("取消拒收...");try{const Ae=await Y.setConversationMute(ee.value.id,!1);Ae.success?(ee.value.muted=!1,D.value=!1):a(Ae.message||"操作失败",2e3)}catch(Ae){console.error("取消拒收失败:",Ae),a("取消拒收失败",2e3)}finally{c()}}},z=async()=>{if(!ee.value)return;if(await i.show({title:"拉黑用户",message:`确定要拉黑用户"${ee.value.userName}"吗?拉黑后将无法接收该用户的消息。`,type:"warning",confirmText:"拉黑",cancelText:"取消"})){r("拉黑用户...");try{const J=await Y.setConversationBlock(ee.value.id,!0);J.success?(ee.value.blocked=!0,ee.value.muted=!0,D.value=!1):a(J.message||"操作失败",2e3)}catch(J){console.error("拉黑用户失败:",J),a("拉黑用户失败",2e3)}finally{c()}}},Q=async()=>{if(ee.value){r("取消拉黑...");try{const Ae=await Y.setConversationBlock(ee.value.id,!1);Ae.success?(ee.value.blocked=!1,D.value=!1):a(Ae.message||"操作失败",2e3)}catch(Ae){console.error("取消拉黑失败:",Ae),a("取消拉黑失败",2e3)}finally{c()}}},j=Ae=>{const J=Ae.target;U.value&&!U.value.contains(J)&&(D.value=!1)},V=async()=>{var ke,oe;if(!de.value||!ee.value)return;if(C.value.length>0||I.value.length>0){a("附件功能暂未实现",2e3);return}const Ae=S.value.trim();if(!Ae)return;const J=`temp-${Date.now()}-${Math.random()}`,te={id:J,content:Ae,sendTime:new Date().toISOString(),sent:!0,status:"sending"};ee.value.messages.push(te),S.value="",C.value=[],I.value=[],pt(()=>{yt()});try{const H=await Y.sendMessage(ee.value.id,Ae);if(H.success&&H.data){const be=ee.value.messages.findIndex(_e=>_e.id===J);be!==-1&&(ee.value.messages[be]={id:H.data.messageId,content:H.data.content,sendTime:H.data.sendTime,sent:!0,status:"sent"}),ee.value.lastMessage=Ae,ee.value.lastMessageTime=H.data.sendTime,window.dispatchEvent(new CustomEvent("messages:conversations-updated"))}else{const be=ee.value.messages.findIndex(_e=>_e.id===J);be!==-1&&(ee.value.messages[be].status="failed"),a(H.message||"发送失败",2e3)}}catch(H){console.error("发送消息失败:",H);const be=ee.value.messages.findIndex(_e=>_e.id===J);be!==-1&&(ee.value.messages[be].status="failed"),a(((oe=(ke=H.response)==null?void 0:ke.data)==null?void 0:oe.message)||"发送消息失败",2e3)}},B=()=>{var Ae;(Ae=x.value)==null||Ae.click()},ve=()=>{var Ae;(Ae=E.value)==null||Ae.click()},me=Ae=>{const J=Ae.target,te=Array.from(J.files||[]),ke=10*1024*1024;te.forEach(oe=>{if(C.value.length>=5)return;if(oe.size>ke){a("图片大小不能超过10MB",2e3);return}const H=new FileReader;H.onload=be=>{var _e;C.value.push({file:oe,preview:(_e=be.target)==null?void 0:_e.result})},H.readAsDataURL(oe)}),J.value=""},Le=Ae=>{const J=Ae.target,te=Array.from(J.files||[]),ke=20*1024*1024;te.forEach(oe=>{if(!(I.value.length>=5)){if(oe.size>ke){a("文件大小不能超过20MB",2e3);return}I.value.push({file:oe})}}),J.value=""},Ue=Ae=>{C.value.splice(Ae,1)},Be=Ae=>{I.value.splice(Ae,1)},Ce=Ae=>{Ae.type==="image"?W.value=Ae.url:Qe(Ae)},Qe=Ae=>{const J=document.createElement("a");J.href=Ae.url||"#",J.download=Ae.name,J.target="_blank",document.body.appendChild(J),J.click(),document.body.removeChild(J)},Ge=()=>{W.value=null},Ze=Ae=>{const J=new Date(Ae),ke=new Date().getTime()-J.getTime(),oe=Math.floor(ke/6e4),H=Math.floor(ke/36e5),be=Math.floor(ke/864e5);return oe<1?"刚刚":oe<60?`${oe}分钟前`:H<24?`${H}小时前`:be<7?`${be}天前`:J.toLocaleDateString("zh-CN")},dt=Ae=>Ae<1024?`${Ae} B`:Ae<1024*1024?`${(Ae/1024).toFixed(1)} KB`:`${(Ae/(1024*1024)).toFixed(1)} MB`,yt=()=>{F.value&&(F.value.scrollTop=F.value.scrollHeight)};let bt=null;const It=async()=>{document.hidden||await Z(!0)},jt=async()=>{await Z(!0)};return nt(async()=>{await Z();const Ae=s.query.userId;Ae&&await Fe(Ae),document.addEventListener("click",j),bt=window.setInterval(async()=>{await Z(!0)},5e3),document.addEventListener("visibilitychange",It),window.addEventListener("focus",jt)}),Xe(()=>s.query.userId,async Ae=>{Ae&&typeof Ae=="string"&&(v.value.length===0&&await Z(),await Fe(Ae))}),At(()=>{document.removeEventListener("click",j),document.removeEventListener("visibilitychange",It),window.removeEventListener("focus",jt),bt!==null&&(clearInterval(bt),bt=null)}),(Ae,J)=>(u(),f(ye,null,[n("div",rN,[n("div",cN,[n("div",uN,[n("h1",dN,[J[4]||(J[4]=$e(" 私信 ",-1)),we.value>0?(u(),f("span",fN,h(we.value>99?"99+":we.value),1)):T("",!0)]),J[5]||(J[5]=n("p",{class:"page-description"},"与用户进行一对一私信交流",-1))]),n("div",pN,[n("div",vN,[n("div",mN,[J[7]||(J[7]=n("h2",null,"会话列表",-1)),n("button",{class:"new-conversation-btn",onClick:ie},[m(k,{icon:"mdi:plus",class:"btn-icon"}),J[6]||(J[6]=$e(" 新会话 ",-1))])]),n("div",hN,[b.value&&v.value.length===0?(u(),f("div",gN,[m(k,{icon:"mdi:loading",class:"loading-icon spinning"}),J[8]||(J[8]=n("span",null,"加载会话列表...",-1))])):(u(),Ne(uu,{key:1,name:"conversation-list",tag:"div",class:"conversations-transition-wrapper"},{default:lt(()=>[(u(!0),f(ye,null,Ee(v.value,te=>(u(),f("div",{key:te.id,class:Te(["conversation-item",{active:y.value===te.id}]),onClick:ke=>ue(te.id)},[n("div",bN,[m(Et,{"user-id":te.userId,"user-name":te.userName,width:40,height:40},null,8,["user-id","user-name"]),te.unreadCount>0?(u(),f("span",_N,h(te.unreadCount),1)):T("",!0)]),n("div",wN,[n("div",kN,[n("span",$N,h(te.userName),1),n("span",CN,h(Ze(te.lastMessageTime)),1)]),n("div",IN,[n("span",SN,h(te.lastMessage),1),te.unreadCount>0?(u(),f("span",xN)):T("",!0)])])],10,yN))),128))]),_:1})),!b.value&&v.value.length===0?(u(),f("div",AN,[m(k,{icon:"fluent-color:comment-multiple-32",class:"empty-icon"}),J[9]||(J[9]=n("p",null,"暂无会话",-1))])):T("",!0)])]),n("div",TN,[O.value?(u(),f("div",EN,[n("div",RN,[J[10]||(J[10]=n("h2",null,"选择用户开始聊天",-1)),n("button",{class:"close-btn",onClick:Pe},[m(k,{icon:"mdi:close"})])]),n("div",UN,[n("div",PN,[m(k,{icon:"mdi:magnify",class:"search-icon"}),Ve(n("input",{"onUpdate:modelValue":J[0]||(J[0]=te=>$.value=te),type:"text",placeholder:"搜索用户名或昵称...",class:"search-input",onInput:le},null,544),[[Ke,$.value]]),$.value?(u(),f("button",{key:0,class:"clear-search-btn",onClick:xe},[m(k,{icon:"mdi:close-circle"})])):T("",!0)])]),n("div",MN,[M.value?(u(),f("div",DN,[m(k,{icon:"mdi:loading",class:"loading-icon spinning"}),J[11]||(J[11]=n("span",null,"加载用户列表...",-1))])):N.value?(u(),f("div",LN,[m(k,{icon:"mdi:alert-circle",class:"error-icon"}),n("p",null,h(N.value),1),n("button",{class:"retry-btn",onClick:je},"重试")])):K.value.length===0?(u(),f("div",NN,[m(k,{icon:"mdi:account-off",class:"empty-icon"}),n("p",null,h($.value?"未找到匹配的用户":"暂无用户"),1)])):(u(),f("div",ON,[(u(!0),f(ye,null,Ee(K.value,te=>(u(),f("div",{key:te.id,class:"user-item",onClick:ke=>ae(te)},[m(Et,{"user-id":te.id,"user-name":te.nickName||te.username,width:48,height:48},null,8,["user-id","user-name"]),n("div",VN,[n("div",BN,h(te.nickName||te.username||"未知用户"),1),te.username?(u(),f("div",jN,"@"+h(te.username),1)):te.age?(u(),f("div",qN,"年龄: "+h(te.age),1)):T("",!0)]),m(k,{icon:"mdi:chevron-right",class:"chevron-icon"})],8,FN))),128))]))])])):ee.value?(u(),f("div",zN,[n("div",WN,[n("div",KN,[m(Et,{"user-id":ee.value.userId,"user-name":ee.value.userName,width:40,height:40},null,8,["user-id","user-name"]),n("div",GN,[n("h3",QN,h(ee.value.userName),1),n("span",JN,[ee.value.blocked?(u(),f("span",XN,"已拉黑")):ee.value.muted?(u(),f("span",ZN,"已拒收")):(u(),f("span",YN,"在线"))])])]),n("div",eO,[n("button",{class:"header-action-btn report-btn",onClick:P},[m(k,{icon:"mdi:flag-outline"})]),n("div",{class:"more-actions-wrapper",ref_key:"moreActionsRef",ref:U},[n("button",{class:"header-action-btn",onClick:J[1]||(J[1]=te=>D.value=!D.value)},[m(k,{icon:"mdi:dots-vertical"})]),m(gt,{name:"menu-fade"},{default:lt(()=>[D.value?(u(),f("div",{key:0,class:"more-actions-menu",onClick:J[2]||(J[2]=Oe(()=>{},["stop"]))},[ee.value.muted?(u(),f("div",{key:1,class:"menu-item",onClick:A},[m(k,{icon:"mdi:bell-outline",class:"menu-icon"}),J[14]||(J[14]=n("span",null,"接收消息",-1))])):(u(),f("div",{key:0,class:"menu-item",onClick:g},[m(k,{icon:"mdi:bell-off-outline",class:"menu-icon"}),J[13]||(J[13]=n("span",null,"拒收消息",-1))])),ee.value.blocked?(u(),f("div",{key:3,class:"menu-item",onClick:Q},[m(k,{icon:"mdi:account-check-outline",class:"menu-icon"}),J[16]||(J[16]=n("span",null,"取消拉黑",-1))])):(u(),f("div",{key:2,class:"menu-item danger",onClick:z},[m(k,{icon:"mdi:block-helper",class:"menu-icon"}),J[15]||(J[15]=n("span",null,"拉黑用户",-1))]))])):T("",!0)]),_:1})],512)])]),n("div",{class:"messages-list",ref_key:"messagesListRef",ref:F},[_.value?(u(),f("div",tO,[m(k,{icon:"mdi:loading",class:"loading-icon spinning"}),J[17]||(J[17]=n("span",null,"加载消息...",-1))])):(u(!0),f(ye,{key:1},Ee(ee.value.messages,te=>{var ke,oe,H,be;return u(),f("div",{key:te.id,class:Te(["message-item",{sent:te.sent,received:!te.sent}])},[te.sent?T("",!0):(u(),f("div",sO,[m(Et,{"user-id":ee.value.userId,"user-name":ee.value.userName,width:40,height:40},null,8,["user-id","user-name"])])),n("div",nO,[n("div",oO,[n("p",aO,h(te.content),1),te.attachments&&te.attachments.length>0?(u(),f("div",lO,[(u(!0),f(ye,null,Ee(te.attachments,_e=>(u(),f("div",{key:_e.id,class:"attachment-item",onClick:pe=>Ce(_e)},[m(k,{icon:_e.type==="image"?"mdi:image":"mdi:file",class:"attachment-icon"},null,8,["icon"]),n("span",rO,h(_e.name),1),n("span",cO,h(dt(_e.size)),1)],8,iO))),128))])):T("",!0),n("div",uO,[n("span",dO,h(Ze(te.sendTime)),1),te.sent&&te.status==="sending"?(u(),f("span",fO,[m(k,{icon:"mdi:loading",class:"status-icon spinning"})])):te.sent&&te.status==="sent"?(u(),f("span",pO,[m(k,{icon:"mdi:check-circle",class:"status-icon"})])):te.sent&&te.status==="failed"?(u(),f("span",vO,[m(k,{icon:"mdi:alert-circle",class:"status-icon",title:"发送失败"})])):T("",!0)])])]),te.sent?(u(),f("div",mO,[m(Et,{"user-id":((ke=se(p))==null?void 0:ke.id)||((oe=se(p))==null?void 0:oe._id),"user-name":((H=se(p))==null?void 0:H.nickName)||((be=se(p))==null?void 0:be.username)||"我",width:40,height:40},null,8,["user-id","user-name"])])):T("",!0)],2)}),128))],512),n("div",hO,[ee.value.blocked||ee.value.muted?(u(),f("div",gO,[m(k,{icon:ee.value.blocked?"mdi:block-helper":"mdi:bell-off-outline",class:"notice-icon"},null,8,["icon"]),n("span",null,h(ee.value.blocked?"该用户已被拉黑,无法发送消息":"已拒收该用户的消息"),1)])):(u(),f("div",yO,[n("div",bO,[n("button",{class:"toolbar-btn",onClick:B,disabled:C.value.length>=5,title:"添加图片(最多5张,每张10M以内)"},[m(k,{icon:"mdi:image-outline"})],8,_O),n("button",{class:"toolbar-btn",onClick:ve,disabled:I.value.length>=5,title:"添加文件(最多5个,每个20M以内)"},[m(k,{icon:"mdi:file-outline"})],8,wO)]),Ve(n("textarea",{"onUpdate:modelValue":J[3]||(J[3]=te=>S.value=te),class:"message-textarea",placeholder:"输入消息...",rows:"3",maxlength:"2000",onKeydown:en(Oe(V,["ctrl"]),["enter"])},null,40,kO),[[Ke,S.value]])])),!ee.value.blocked&&!ee.value.muted&&(C.value.length>0||I.value.length>0)?(u(),f("div",$O,[(u(!0),f(ye,null,Ee(C.value,(te,ke)=>(u(),f("div",{key:`img-${ke}`,class:"attachment-preview-item"},[n("img",{src:te.preview,alt:"预览"},null,8,CO),n("button",{class:"remove-btn",onClick:oe=>Ue(ke)},[m(k,{icon:"mdi:close"})],8,IO)]))),128)),(u(!0),f(ye,null,Ee(I.value,(te,ke)=>(u(),f("div",{key:`file-${ke}`,class:"attachment-preview-item file"},[m(k,{icon:"mdi:file"}),n("span",SO,h(te.file.name),1),n("button",{class:"remove-btn",onClick:oe=>Be(ke)},[m(k,{icon:"mdi:close"})],8,xO)]))),128))])):T("",!0),!ee.value.blocked&&!ee.value.muted?(u(),f("div",AO,[n("span",TO,h(S.value.length)+"/2000",1),n("button",{class:"send-btn",onClick:V,disabled:!de.value},[m(k,{icon:"mdi:send",class:"btn-icon"}),J[18]||(J[18]=$e(" 发送 ",-1))],8,EO)])):T("",!0),n("input",{ref_key:"imageInput",ref:x,type:"file",accept:"image/*",multiple:"",onChange:me,style:{display:"none"}},null,544),n("input",{ref_key:"fileInput",ref:E,type:"file",multiple:"",onChange:Le,style:{display:"none"}},null,544)])])):(u(),f("div",HN,[m(k,{icon:"fluent-color:chat-32",class:"empty-icon"}),J[12]||(J[12]=n("p",{class:"empty-text"},"选择一个会话开始聊天",-1))]))])])]),m(Tn,{visible:!!W.value,"image-url":W.value,onClose:Ge},null,8,["visible","image-url"])]),m(Sn,{visible:se(i).visible.value,title:se(i).config.value.title||"",message:se(i).config.value.message||"",type:se(i).config.value.type,"confirm-text":se(i).config.value.confirmText,"cancel-text":se(i).config.value.cancelText,onConfirm:se(i).handleConfirm,onCancel:se(i).handleCancel},null,8,["visible","title","message","type","confirm-text","cancel-text","onConfirm","onCancel"]),m(Yt,{toasts:se(o),onRemove:se(l)},null,8,["toasts","onRemove"]),m(ud)],64))}}),UO=We(RO,[["__scopeId","data-v-afc300f5"]]),PO=[{path:"/",name:"Home",component:k2},{path:"/apps",name:"Apps",component:k6},{path:"/official",name:"OfficialApps",component:j6},{path:"/app/:bundleId",name:"AppDetail",component:n8,props:!0},{path:"/downloads",name:"DownloadManager",component:B8},{path:"/settings",name:"Settings",component:V5},{path:"/profile",name:"Profile",component:e6,beforeEnter:async(e,t,s)=>{const{useAuth:o}=await Or(async()=>{const{useAuth:l}=await Promise.resolve().then(()=>Tg);return{useAuth:l}},void 0),{isLoggedIn:a}=o();a.value?s():s({path:"/",replace:!0})}},{path:"/new-features",name:"NewFeatures",component:u6},{path:"/discussion",name:"DiscussionForums",component:fS},{path:"/discussion/:bundleId",name:"DiscussionForum",component:eA,props:!0},{path:"/discussion/:bundleId/post/:postId",name:"PostDetail",component:nT,props:!0},{path:"/admin",name:"AdminPanel",component:LM,beforeEnter:async(e,t,s)=>{const{usePermission:o}=await Or(async()=>{const{usePermission:l}=await Promise.resolve().then(()=>vb);return{usePermission:l}},void 0),{isAdmin:a}=o();a.value?s():s({path:"/",replace:!0})}},{path:"/notifications",name:"Notifications",component:iN},{path:"/messages",name:"Messages",component:UO}],MO=fb({history:By(),routes:PO}),ei=tv(Nb);ei.use(av());ei.use(MO);ei.mount("#app");
|